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

[PI-36] Firebase, Kakao sdk를 추가하고 카톡으로 공유할 수 있도록 합니다. #53

Open
wants to merge 16 commits into
base: main
Choose a base branch
from

Conversation

escapeanaemia
Copy link
Contributor

ISSUE


작업 내용

  • Firebase를 추가합니다
  • KakaoSDK를 추가합니다
  • 다이나믹 링크를 생성하고 생성된 링크를 카톡으로 공유, 클립보드에 복사할 수 있도록 합니다.

실행 화면

Screen Shot Screen Shot

Check List

  • PR 제목은 [ISSUE-{N}] PR 제목으로 작성
  • CI/CD 통과 여부
  • 1명 이상의 Approve 확인 후 Merge
  • 관련 이슈 연결

@escapeanaemia escapeanaemia added the enhancement New feature or request label Apr 7, 2023
@escapeanaemia escapeanaemia self-assigned this Apr 7, 2023
Copy link
Contributor

@GangWoon GangWoon left a 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(
Copy link
Contributor

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 {
Copy link
Contributor

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 65
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 {}
}
Copy link
Contributor

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
Copy link
Contributor

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)")
Copy link
Contributor

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
Copy link
Contributor

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)
Copy link
Contributor

Choose a reason for hiding this comment

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

이펙트가 발생할 것 처럼 보입니다. 맞을까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants