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, untuk mendapatkan data yang diteruskan dalam Dynamic Link.
Prasyarat
Sebelum memulai, pastikan untuk menambahkan Firebase ke project iOS Anda.
Menyiapkan Firebase dan Dynamic Links SDK
Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.
- Di Xcode, dengan project aplikasi Anda dalam keadaan terbuka, buka File > Add Packages.
- Saat diminta, tambahkan repositori SDK platform Apple Firebase:
- Pilih library Dynamic Links.
- Untuk mengoptimalkan penggunaan Dynamic Links, sebaiknya aktifkan Google Analytics di project Firebase dan tambahkan Firebase SDK untuk Google Analytics ke aplikasi Anda. Anda dapat memilih library tanpa atau dengan pengumpulan IDFA.
- Setelah selesai, Xcode akan otomatis mulai me-resolve dan mendownload dependensi Anda di latar belakang.
https://github.com/firebase/firebase-ios-sdk
Selanjutnya, lakukan beberapa langkah konfigurasi:
- Di Firebase console, buka bagian Dynamic Links. Setujui persyaratan layanan jika diminta.
-
Pastikan ID App Store dan awalan ID Aplikasi untuk aplikasi Anda sudah ditentukan di setelan aplikasi. Untuk melihat dan mengedit setelan aplikasi, buka halaman Settings 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":["NOT /_/*","/*"]}]}}
Jika kolom
details
kosong, pastikan Anda sudah menentukan awalan ID Aplikasi. Perlu diperhatikan bahwa awalan ID Aplikasi mungkin tidak sama dengan ID Tim Anda. -
Opsional: Nonaktifkan penggunaan pasteboard iOS oleh Dynamic Links SDK.
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, 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 kunciFirebaseDeepLinkPasteboardRetrievalEnabled
keNO
.
Membuka Dynamic Link di aplikasi Anda
- Di tab Info pada project Xcode aplikasi Anda, buat jenis URL baru yang akan digunakan untuk Dynamic Link. Tetapkan kolom Identifier ke nilai yang unik dan kolom URL scheme ke ID paket, yang merupakan skema URL default yang digunakan oleh Dynamic Links.
- Di tab Capabilities pada project Xcode aplikasi Anda, aktifkan Associated Domains lalu tambahkan hal berikut ini ke daftar Associated
Domains:
applinks:your_dynamic_links_domain
- Jika ingin menerima Dynamic Link dengan
domain yang sepenuhnya kustom, di
file
Info.plist
project Xcode Anda, buat kunci dengan namaFirebaseDynamicLinksCustomDomains
, lalu tetapkan ke awalan URL Dynamic Link aplikasi Anda. Contoh:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Impor modul
FirebaseCore
dalamUIApplicationDelegate
Anda, serta semua modul Firebase lainnya yang digunakan oleh delegasi aplikasi Anda. Misalnya, untuk menggunakan Cloud Firestore dan 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; // ...
- Konfigurasikan instance bersama
FirebaseApp
di metodeapplication(_:didFinishLaunchingWithOptions:)
delegasi aplikasi Anda: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];
- Jika menggunakan SwiftUI, Anda harus membuat delegasi aplikasi dan menambahkannya ke struct
App
melaluiUIApplicationDelegateAdaptor
atauNSApplicationDelegateAdaptor
. Anda juga harus menonaktifkan swizzling delegasi aplikasi. Untuk mengetahui informasi lebih lanjut, baca petunjuk SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- Selanjutnya, pada metode
application:continueUserActivity:restorationHandler:
, tangani link yang diterima sebagai Universal Link saat aplikasi sudah diinstal:Swift
Catatan: Produk ini tidak tersedia di target macOS, Mac Catalyst, tvOS, atau 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
Catatan: Produk ini tidak tersedia di target macOS, Mac Catalyst, tvOS, atau 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; }
- Terakhir, di
application:openURL:options:
tangani link yang diterima melalui skema URL kustom aplikasi Anda. Metode ini dipanggil ketika aplikasi dibuka untuk pertama kalinya setelah diinstal.Jika Dynamic Link tidak ditemukan saat peluncuran pertama aplikasi Anda, metode ini akan dipanggil dengan
url
DynamicLink
ditetapkan kenil
, yang menunjukkan bahwa SDK tidak dapat menemukan Dynamic Link tertunda yang cocok.Swift
Catatan: Produk ini tidak tersedia di target macOS, Mac Catalyst, tvOS, atau 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
Catatan: Produk ini tidak tersedia di target macOS, Mac Catalyst, tvOS, atau 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; }