생성한 Firebase Dynamic Links를 수신하려면 앱에 Dynamic Links SDK를 포함하고 앱이 로드될 때 handleUniversalLink:
및 dynamicLinkFromCustomSchemeURL:
메서드를 호출하여 Dynamic Link로 전달된 데이터를 가져와야 합니다.
기본 요건
시작하기 전에 iOS 프로젝트에 Firebase를 추가해야 합니다.
Firebase 및 Dynamic Links SDK 설정
Swift Package Manager를 사용해 Firebase 종속 항목을 설치하고 관리하세요.
- 앱 프로젝트를 연 상태로 Xcode에서 File(파일) > Add Packages(패키지 추가)로 이동합니다.
- 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
- Dynamic Links 라이브러리를 선택합니다.
- 타겟 빌드 설정의 Other Linker Flags(기타 링커 플래그) 섹션에
-ObjC
플래그를 추가합니다. - Dynamic Links 사용 환경을 최적화하려면 Firebase 프로젝트에서 Google Analytics를 사용 설정하고 Google 애널리틱스용 Firebase SDK를 앱에 추가하는 것이 좋습니다. IDFA 수집이 없는 라이브러리 또는 IDFA 수집이 있는 라이브러리를 선택할 수 있습니다.
- 완료되면 Xcode가 백그라운드에서 자동으로 종속 항목을 확인하고 다운로드하기 시작합니다.
https://github.com/firebase/firebase-ios-sdk.git
이제 몇 가지 구성 단계를 수행합니다.
- Firebase 콘솔에서 Dynamic Links 섹션을 엽니다. 서비스 약관에 동의하라는 메시지가 표시되면 약관에 동의합니다.
-
앱 설정에서 앱의 App Store ID 및 앱 ID 프리픽스를 지정합니다. 앱 설정을 확인하고 수정하려면 Firebase 프로젝트의 설정 페이지로 이동하고 iOS 앱을 선택합니다.
다음 URL을 열면 iOS 앱에서 Dynamic Links를 사용할 수 있도록 Firebase 프로젝트가 올바르게 구성되었는지 확인할 수 있습니다.
https://your_dynamic_links_domain/apple-app-site-association
앱이 연결되면
apple-app-site-association
파일에 앱의 앱 ID 프리픽스 및 번들 ID에 대한 참조가 포함됩니다. 예를 들면 다음과 같습니다.{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
details
필드가 비어 있는 경우 앱 ID 프리픽스를 지정했는지 확인해 보세요. 앱 ID 프리픽스와 팀 ID가 같지 않을 수도 있습니다. -
선택사항: Dynamic Links SDK의 iOS 페이스트보드 사용을 중지합니다.
기본적으로 Dynamic Links SDK는 페이스트보드를 사용하여 설치 후 딥 링크의 안정성을 개선합니다. Dynamic Links는 사용자가 Dynamic Link를 열었는데 앱을 먼저 설치해야 하는 경우에 페이스트보드를 사용하면 사용자가 설치 후 처음으로 앱을 열 때 원래 링크된 콘텐츠로 바로 이동할 수 있습니다.
단점은 iOS 14 이상에서 페이스트보드를 사용하면 알림을 트리거한다는 것입니다. 따라서 사용자가 앱을 처음 열 때 페이스트보드에 URL이 포함되어 있으면 앱이 페이스트보드에 액세스했다는 알림이 표시되어 혼란을 일으킬 수 있습니다.
이 동작을 사용 중지하려면 Xcode 프로젝트의
Info.plist
파일을 수정하고FirebaseDeepLinkPasteboardRetrievalEnabled
키를NO
로 설정합니다.
앱에서 Dynamic Links 열기
- 앱의 Xcode 프로젝트의 정보 탭에서 Dynamic Links에 사용할 새 URL 유형을 만듭니다. 식별자 필드는 고유한 값으로, URL 스키마 필드는 Dynamic Links에서 사용하는 기본 URL 스키마인 번들 식별자로 설정합니다.
- 앱의 Xcode 프로젝트의 기능 탭에서 관련 도메인을 사용 설정하고 관련 도메인 목록에 다음을 추가합니다.
applinks:your_dynamic_links_domain
- 완전 커스텀 도메인이 있는 Dynamic Links를 수신하려면 Xcode 프로젝트의
Info.plist
파일에서FirebaseDynamicLinksCustomDomains
키를 만들어 앱의 Dynamic Links URL 프리픽스로 설정합니다. 예를 들면 다음과 같습니다.FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share UIApplicationDelegate
의FirebaseCore
모듈과 앱 대리자가 사용하는 다른 Firebase 모듈을 가져옵니다. 예를 들어 Cloud Firestore와 Authentication을 사용하려면 다음을 따르세요.SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- 앱 대리자의
application(_:didFinishLaunchingWithOptions:)
메서드에서FirebaseApp
공유 인스턴스를 구성합니다.SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- SwiftUI를 사용하는 경우 앱 대리자를 만들고
UIApplicationDelegateAdaptor
또는NSApplicationDelegateAdaptor
를 통해App
구조체에 연결해야 합니다. 앱 대리자 재구성도 중지해야 합니다. 자세한 내용은 SwiftUI 안내를 참조하세요.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- 다음으로 앱을 이미 설치했으면
application:continueUserActivity:restorationHandler:
메서드에서 범용 링크로 수신된 링크를 처리합니다.Swift
참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { let handled = DynamicLinks.dynamicLinks() .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in // ... } return handled }
Objective-C
참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler: #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0) (nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler { #else (nonnull void (^)(NSArray *_Nullable))restorationHandler { #endif // __IPHONE_12_0 BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { // ... }]; return handled; }
- 마지막으로
application:openURL:options:
에서 앱의 커스텀 URL 스킴을 통해 수신된 링크를 처리합니다. 이 메서드는 설치 후 앱이 처음으로 열릴 때 호출됩니다.앱이 처음 실행될 때 Dynamic Link가 발견되지 않으면
DynamicLink
의url
이nil
로 설정된 상태로 이 메서드가 호출되어 SDK가 일치하는 대기 중인 Dynamic Link를 찾지 못했음을 나타냅니다.Swift
참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.@available(iOS 9.0, *) func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool { return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey .sourceApplication] as? String, annotation: "") } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) { // Handle the deep link. For example, show the deep-linked content or // apply a promotional offer to the user's account. // ... return true } return false }
Objective-C
참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)options { return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; if (dynamicLink) { if (dynamicLink.url) { // Handle the deep link. For example, show the deep-linked content, // apply a promotional offer to the user's account or show customized onboarding view. // ... } else { // Dynamic link has empty deep link. This situation will happens if // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link, // but pending link is not available for this device/App combination. // At this point you may display default onboarding view. } return YES; } return NO; }