Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Custom WebView 작성 및 토큰 재발급 로직 작성, MDS 컬러 마이페이지 하위에 적용 #309

Conversation

elesahich
Copy link
Contributor

@elesahich elesahich commented Nov 30, 2023

🌴 PR 요약

  1. Custom WebView를 만들고, 토큰 재발급 로직을 작성했어요
  2. 새로운 컬러를 마이페이지와 하위 뷰에 적용했어요

🌱 작업한 브랜치

  • feature/create-webview-어쩌구

🌱 PR Point

1. Custom WebView를 만들고, 토큰 재발급 로직을 작성했어요

[웹뷰]

  • 커스텀 웹뷰들은 보안적인 이슈로 SSO 로그인들이 안 돼요. 그래서 Playground 로그인은 여전히 사파리입니다! [중요]
  • Configuration들은 PR에 코멘트를 달게요~
  • v1 - 웹뷰TF 이전) 로컬스토리지에 토큰을 무조건 주입해요. 요건 어떤 경로로 플그에 접근해도 로그인 되어 있어야 하기 때문이에요
  • 디자인은 요 슬랙 스레드에서 결정되었어요

[토큰 재발급 로직]

  • Playground 토큰의 TTL은 1주, App Token은 2주로 늘 1주 짧기 때문에 로그인이 풀리는 기간이 생겨요.
    이 구간 극복을 위해 로그인이 되어 있는 경우, enterforeground에 진입하면 토큰 재발급 로직을 수행하게 했습니다.
  • 요거의 모듈 위치가 좀 애매합니다.. 고민좀 하다가 옮겨 두겠어요 > BaseFeatureDepedencies 으로 갔습니다!

2. 새로운 컬러를 마이페이지와 하위 뷰에 적용했어요

📸 스크린샷

설명 사진
전반적인 동작은 이러합니다
UI 확정 찐찐막
왼쪽 : historyback, 오른쪽 나가기

📮 관련 이슈

  • Resolved: #

@elesahich elesahich added the Feat 새로운 기능 구현 label Nov 30, 2023
@elesahich elesahich self-assigned this Nov 30, 2023
let isScrollEnabled: Bool

public init(
javaScriptEnabled: Bool = true,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wkwebview javaScriptEnabled 속성에 대응 - 미사용


public init(
javaScriptEnabled: Bool = true,
allowsBackForwardNavigationGestures: Bool = true,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

navigation backswipe가 가능하도록 하는 프로퍼티. wkwebview allowsBackForward~ 에 대응

public init(
javaScriptEnabled: Bool = true,
allowsBackForwardNavigationGestures: Bool = true,
allowsInlineMediaPlayback: Bool = true,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

default : false. false인 경우 동영상이 있으면 전체 화면으로 재생 됨. inline으로 재생할 수 있도록 하는 프로퍼티.

javaScriptEnabled: Bool = true,
allowsBackForwardNavigationGestures: Bool = true,
allowsInlineMediaPlayback: Bool = true,
mediaTypesRequiringUserActionForPlayback: WKAudiovisualMediaTypes = [],
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용자 제스쳐가 필요한 미디어 타입. 없어도 됨

allowsBackForwardNavigationGestures: Bool = true,
allowsInlineMediaPlayback: Bool = true,
mediaTypesRequiringUserActionForPlayback: WKAudiovisualMediaTypes = [],
isScrollEnabled: Bool = true
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

웹뷰의 스크롤 가능 여부.

Copy link
Member

@lsj8706 lsj8706 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

역시 최고에요!! ⭐️👍
덕분에 웹 뷰 로그인 풀리는 문제는 막을 수 있겠네요!
WKWebView 관련 코드들 참고 많이 하겠습니다! ㅎㅎ

Comment on lines 16 to +19
class AppDelegate: UIResponder, UIApplicationDelegate {

private var appLifecycleAdapter = AppLifecycleAdapter()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dev 타겟 AppDelegate에는 일부러 토큰 재발급 로직을 추가하지 않은걸까요~~?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헤헤 아니요 추가했어요 감사합니다

Comment on lines 34 to 40
NotificationCenter.default
.publisher(for: UIApplication.willEnterForegroundNotification)
.subscribe(on: DispatchQueue.global())
.receive(on: DispatchQueue.main)
.sink(receiveValue: { [weak self] _ in
self?.reissureTokens()
}).store(in: self.cancelBag)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

willEnterForegroundNotification 로 이벤트를 받아오면 사용자가 잠깐 폰 홈을 보고 와도 토큰 재발급 로직 호출이 될 것 같은데 혹시 이 정도 수의 API 호출이 많아지는 문제는 큰 지장이 없을까 궁금합니다!!😄

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기준 시간을 재는 방법으로 보간할 수 있겠어요 요건 챙겨봅시다! (background 진입 - foreground 진입이 하루 이상인 경우에면 reassurance를 한다라던지)


import UIKit

final public class AppLifecycleAdapter {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앱 라이프사이클을 이벤트를 받아서 관련 로직을 처리하는 객체를 만들었네요!! 한 수 배워갑니다!!!👍


extension SOPTWebView: WKNavigationDelegate {
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
guard !self.barrier else { return }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

barrier는 didFinish에 구현된 내용(토큰 주입)이 1회만 발생하기 위해 플래그를 생성한 걸까요~?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

맞아요~ 리액트가 실행되는 타이밍이 제각각이고 무한 리로드가 되는 경우가 생겨서 1회만 되도록 방지해 두었어요

Comment on lines 36 to 37
.subscribe(on: DispatchQueue.global())
.receive(on: DispatchQueue.main)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

subscribe(on:)과 receive(on:)을 각각 쓰신 이유가 궁금합니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

각각 적용되는 범위가 달라서 그렇습니다~ 스트림 시작은 글로벌 큐에서 작업되기를 원하고, receiveOn 이후로는 메인스레드에서 동작하기를 의도한 것이에요

@elesahich elesahich force-pushed the featue/create-webview-and-applying-mds-on-etcs branch from 09a44ff to 3e49968 Compare December 2, 2023 07:03
@elesahich elesahich merged commit a26b62b into sopt-makers:develop Dec 3, 2023
@elesahich elesahich deleted the featue/create-webview-and-applying-mds-on-etcs branch December 3, 2023 04:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feat 새로운 기능 구현 size/L
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants