Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

iOS에서 동적 링크 수신

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

생성 한 Firebase 동적 링크를 수신하려면 앱에 동적 링크 SDK를 포함하고 앱이 로드될 때 handleUniversalLink:dynamicLinkFromCustomSchemeURL: 메서드를 호출하여 동적 링크에서 전달된 데이터를 가져와야 합니다.

전제 조건

시작하기 전에 iOS 프로젝트에 Firebase를 추가 해야 합니다.

Swift 패키지 관리자를 사용하여 Firebase 종속 항목을 설치하고 관리합니다.

  1. Xcode에서 앱 프로젝트를 연 상태에서 파일 > 패키지 추가 로 이동합니다.
  2. 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
  3.   https://github.com/firebase/firebase-ios-sdk
  4. 동적 링크 라이브러리를 선택합니다.
  5. 최적의 동적 링크 경험을 위해 Firebase 프로젝트에서 Google 애널리틱스를 활성화 하고 앱에 Google 애널리틱스용 Firebase SDK를 추가하는 것이 좋습니다. IDFA 컬렉션이 없는 라이브러리 또는 IDFA 컬렉션이 있는 라이브러리를 선택할 수 있습니다.
  6. 완료되면 Xcode는 백그라운드에서 종속성을 자동으로 해결하고 다운로드하기 시작합니다.

이제 몇 가지 구성 단계를 수행합니다.

  1. Firebase 콘솔 에서 동적 링크 섹션을 엽니다. 메시지가 표시되면 서비스 약관에 동의합니다.
  2. 앱의 App Store ID와 App ID 접두사가 앱 설정에 지정되어 있는지 확인하십시오. 앱 설정을 보고 수정하려면 Firebase 프로젝트의 설정 페이지 로 이동하여 iOS 앱을 선택하세요.

    다음 URL을 열어 iOS 앱에서 동적 링크를 사용하도록 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와 동일하지 않을 수 있습니다.

  3. 선택 사항 : Dynamic Links SDK의 iOS 페이스트보드 사용을 비활성화합니다.

    기본적으로 Dynamic Links SDK는 대지를 사용하여 설치 후 딥 링크의 안정성을 개선합니다. 대지를 사용하여 Dynamic Links는 사용자가 Dynamic Link를 열었지만 먼저 앱을 설치해야 할 때 사용자가 설치 후 처음으로 앱을 열 때 원래 링크된 콘텐츠로 즉시 이동할 수 있는지 확인할 수 있습니다.

    이것의 단점은 대지를 사용하면 iOS 14 이상에서 알림이 트리거된다는 것입니다. 따라서 사용자가 처음으로 앱을 열 때 대지에 URL이 포함된 경우 앱이 대지에 액세스했다는 알림이 표시되어 혼동을 일으킬 수 있습니다.

    이 동작을 비활성화하려면 Xcode 프로젝트의 Info.plist 파일을 편집하고 FirebaseDeepLinkPasteboardRetrievalEnabled 키를 NO 로 설정합니다.

  1. 앱 Xcode 프로젝트의 정보 탭에서 동적 링크에 사용할 새 URL 유형을 만듭니다. 식별자 필드를 고유한 값으로 설정하고 URL 체계 필드를 동적 링크에서 사용하는 기본 URL 체계인 번들 식별자로 설정합니다.
  2. 앱 Xcode 프로젝트의 기능 탭에서 연결된 도메인을 활성화하고 연결된 도메인 목록에 다음을 추가합니다.
    applinks:your_dynamic_links_domain
  3. 완전 맞춤 도메인 이 있는 동적 링크를 수신하려면 Xcode 프로젝트의 Info.plist 파일에서 FirebaseDynamicLinksCustomDomains 라는 키를 만들고 앱의 동적 링크 URL 접두사로 설정합니다. 예:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. UIApplicationDelegate 에서 FirebaseCore 모듈과 앱 대리자가 사용하는 다른 Firebase 모듈 을 가져옵니다. 예를 들어 Cloud Firestore 및 인증을 사용하려면 다음 안내를 따르세요.

    빠른

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    오브젝티브-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. 앱 대리자의 application(_:didFinishLaunchingWithOptions:) 메서드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    빠른

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    오브젝티브-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. 다음으로 application:continueUserActivity:restorationHandler: 메서드에서 앱이 이미 설치된 경우 유니버설 링크 로 수신된 링크를 처리합니다.

    빠른

    참고: 이 제품은 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
    }
    

    오브젝티브-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;
    }
  7. 마지막으로 application:openURL:options: 앱의 사용자 지정 URL 체계를 통해 수신된 링크를 처리합니다. 이 메서드는 앱 설치 후 처음으로 앱을 열 때 호출됩니다.

    앱을 처음 실행할 때 Dynamic Link를 찾을 수 없는 경우 이 메서드는 DynamicLinkurlnil 로 설정된 상태로 호출됩니다. 이는 SDK가 일치하는 보류 중인 Dynamic Link를 찾지 못했음을 나타냅니다.

    빠른

    참고: 이 제품은 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
    }
    

    오브젝티브-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;
    }