Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menerima Dynamic Links di iOS

Untuk menerima Firebase Dynamic Links yang Anda buat, Anda harus menyertakan Dynamic Links SDK di aplikasi dan memanggil metode handleUniversalLink: dan dynamicLinkFromCustomSchemeURL: saat aplikasi dimuat, agar data diteruskan dalam Dynamic Link.

Prasyarat

Firebase Dynamic Links memerlukan iOS 8 atau yang lebih baru. Anda dapat menargetkan iOS 7 di aplikasi, tetapi semua panggilan Firebase Dynamic Links SDK tidak akan berfungsi jika aplikasi tidak berjalan pada iOS 8 atau yang lebih baru.

  1. Tambahkan Firebase ke project iOS. Sertakan pod berikut dalam Podfile Anda:
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  2. Jalankan pod install, lalu buka file .xcworkspace yang dibuat.
  3. Di Firebase console, buka bagian Dynamic Links. Terima persyaratan layanan jika diminta.
  4. Pastikan ID App Store dan awalan ID Aplikasi untuk aplikasi Anda sudah ditentukan di setelan aplikasi. Untuk melihat dan mengedit setelan aplikasi, buka halaman Setelan project Firebase, lalu pilih aplikasi iOS Anda.

    Konfirmasikan bahwa project Firebase Anda sudah dikonfigurasi dengan tepat untuk menggunakan Dynamic Links di aplikasi iOS, dengan membuka URL berikut:

    https://your_dynamic_links_domain/apple-app-site-association

    Jika aplikasi Anda sudah terhubung, file apple-app-site-association berisi referensi ke awalan ID Aplikasi dan ID paket aplikasi Anda. Contoh:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    Jika kolom details kosong, pastikan Anda sudah menentukan awalan ID Aplikasi. Perlu diperhatikan bahwa awalan ID Aplikasi tidak boleh sama dengan ID Tim Anda.

  5. Opsional: Nonaktifkan penggunaan Dynamic Links SDK pada pasteboard iOS.

    Secara default, Dynamic Links SDK menggunakan pasteboard untuk meningkatkan keandalan deep link setelah penginstalan. Dengan menggunakan pasteboard, Dynamic Links dapat memastikan bahwa saat pengguna membuka Dynamic Link tetapi perlu menginstal aplikasi Anda terlebih dahulu, pengguna dapat langsung membuka konten asli yang tertaut saat membuka aplikasi untuk pertama kali setelah penginstalan.

    Kekurangannya adalah penggunaan pasteboard memicu notifikasi pada iOS 14 dan versi yang lebih baru. Jadi, saat pengguna membuka aplikasi Anda untuk pertama kalinya, jika pasteboard berisi URL Dynamic Link, mereka akan melihat notifikasi bahwa aplikasi Anda telah mengakses pasteboard, yang dapat menyebabkan kebingungan.

    Untuk menonaktifkan perilaku ini, edit file Info.plist pada project Xcode Anda dan setel kunci FirebaseDeepLinkPasteboardRetrievalEnabled ke NO.

  1. Di tab Info pada project Xcode aplikasi Anda, buat jenis URL baru yang akan digunakan dengan Dynamic Links. Tetapkan kolom Identifier ke nilai yang unik dan kolom URL scheme ke ID paket, yang merupakan skema URL default yang digunakan oleh Dynamic Links.
  2. Di tab Capabilities pada project Xcode aplikasi Anda, aktifkan Domain Terkait lalu tambahkan hal berikut ini ke daftar Associated Domains:
    applinks:your_dynamic_links_domain
  3. Jika ingin menerima Dynamic Links dengan domain kustom lengkap, di file Info.plist project Xcode Anda, buat kunci dengan nama FirebaseDynamicLinksCustomDomains, lalu tetapkan ke awalan URL Dynamic Links aplikasi Anda. Contoh:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Impor modul Firebase di UIApplicationDelegate Anda:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  5. Konfigurasikan instance bersama FirebaseApp, yang biasanya ada dalam metode application:didFinishLaunchingWithOptions: aplikasi Anda:

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Selanjutnya, pada metode application:continueUserActivity:restorationHandler: , tangani link yang diterima sebagai Universal Links saat aplikasi sudah diinstal (di iOS 9 dan versi yang lebih baru):

    Swift

    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

    - (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. Terakhir, pada metode application:openURL:sourceApplication:annotation: (iOS 8 dan versi yang lebih lama) dan application:openURL:options: (iOS 9 dan versi yang lebih baru), tangani link yang diterima melalui skema URL kustom aplikasi Anda. Metode ini dipanggil ketika aplikasi menerima link pada iOS 8 dan versi yang lebih lama, serta ketika aplikasi dibuka untuk pertama kalinya setelah diinstal pada versi iOS mana pun.

    Jika Dynamic Link tidak ditemukan di peluncuran pertama aplikasi Anda (pada versi iOS apa pun), metode ini akan dipanggil dengan url FIRDynamicLink ditetapkan ke nil, yang menunjukkan bahwa SDK tidak dapat menemukan Dynamic Link tertunda yang cocok.

    Swift

    @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

    - (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;
    }