-
Notifications
You must be signed in to change notification settings - Fork 0
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
[PI-36] Firebase, Kakao sdk를 추가하고 카톡으로 공유할 수 있도록 합니다. #53
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현재 FireAndForget 이펙트가 다수 발생하는 거 같은데, 실행시켜버리고 마는 거 같습니다.
이를 조금 더 저희가 이해하기 쉽도록 분리해주셨으면 좋겠습니다.
또한 리듀서 내부에서 이펙트를 핸들링하는 함수를 만드는게 아닌, kakao, firebase를 리듀서 내부에서 바로 사용하지말고, 레이어를 하나 만들어주셨으면 좋겠습니다.
@main | ||
struct PlanzApp: App { | ||
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate | ||
|
||
let store: StoreOf<AppCore> = .init( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
스토어의 위치를 AppDelegate로 옮겨 주시겠어요?
import SwiftUI | ||
|
||
class AppDelegate: NSObject, UIApplicationDelegate { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
따로 파일을 분리시켰으면 좋겠습니다.
func getDeepLink(id: String?) -> URL? { | ||
if let id { | ||
return URL(string: "\(Secrets.Firebase.domain.value)/?plandId=\(id)") | ||
} else { | ||
return URL(string: Secrets.Firebase.domain.value) | ||
} | ||
} | ||
|
||
func getDynamicLink(id _: String?) -> URL? { | ||
guard let link = getDeepLink(id: nil) else { return nil } | ||
let dynamicLinksDomainURIPrefix = Secrets.Firebase.prefix.value | ||
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPrefix) | ||
linkBuilder?.iOSParameters = DynamicLinkIOSParameters(bundleID: Secrets.App.iosBundleId.value) | ||
linkBuilder?.androidParameters = DynamicLinkAndroidParameters(packageName: Secrets.App.androidBundleId.value) | ||
return linkBuilder?.url | ||
} | ||
|
||
func shareViaKakao(url _: String) { | ||
if ShareApi.isKakaoTalkSharingAvailable() { | ||
// TODO: 이전 화면에서 전달해주는 id 값에 맞춰서 공유 링크의 파라미터로 추가하도록 수정 필요 | ||
ShareApi.shared.shareCustom(templateId: Int64(Secrets.Kakao.templateId.value)!, templateArgs: ["": ""]) { linkResult, error in | ||
if let error = error { | ||
print("error : \(error)") | ||
} else { | ||
print("defaultLink(templateObject:templateJsonObject) success.") | ||
guard let linkResult = linkResult else { return } | ||
UIApplication.shared.open(linkResult.url, options: [:], completionHandler: nil) | ||
} | ||
} | ||
|
||
} else {} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 작업을 실행하는 객체로 분리시켜주실 수 있을까요?
해당 객체를 Dependency로 받아오면 좋을 거 같습니다.
추가적으로 강제 언래핑도 제거 부탁드리겠습니다.
func shareViaKakao(url _: String) { | ||
if ShareApi.isKakaoTalkSharingAvailable() { | ||
// TODO: 이전 화면에서 전달해주는 id 값에 맞춰서 공유 링크의 파라미터로 추가하도록 수정 필요 | ||
ShareApi.shared.shareCustom(templateId: Int64(Secrets.Kakao.templateId.value)!, templateArgs: ["": ""]) { linkResult, error in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
escaping closure의 경우 swift concurrency로 변경해주시겠어요?
// TODO: 이전 화면에서 전달해주는 id 값에 맞춰서 공유 링크의 파라미터로 추가하도록 수정 필요 | ||
ShareApi.shared.shareCustom(templateId: Int64(Secrets.Kakao.templateId.value)!, templateArgs: ["": ""]) { linkResult, error in | ||
if let error = error { | ||
print("error : \(error)") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
에러가 발생하는 케이스에 대해서 다루는 정해진 규칙은 없을까요
} | ||
return .none | ||
case .copyLinkTapped: | ||
UIPasteboard.general.string = state.linkForShare |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 부분도 디펜던시로 분리시켜주시면 감사하겠습니다.
UIPasteboard.general.string = state.linkForShare | ||
return .none | ||
case .shareAsKakaoTapped: | ||
shareViaKakao(url: state.linkForShare) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이펙트가 발생할 것 처럼 보입니다. 맞을까요?
ISSUE
작업 내용
실행 화면
Check List
[ISSUE-{N}] PR 제목
으로 작성