כדי לקבל את ה-Firebase Dynamic Links
שיצרתם, צריך לכלול את ה-SDK של Dynamic Links באפליקציה ולקרוא ל-methods handleUniversalLink:
ו-dynamicLinkFromCustomSchemeURL:
כשהאפליקציה נטענת כדי לקבל את הנתונים שמועברים ב-Dynamic Link.
דרישות מוקדמות
לפני שמתחילים, חשוב לוודא שהוספתם את Firebase לפרויקט iOS.
הגדרה של Firebase ואת ה-SDK של Dynamic Links
שימוש ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.
- ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל קובץ > הוספת חבילות.
- כשמופיעה בקשה, מוסיפים את המאגר של Firebase SDK לפלטפורמות של Apple:
- בוחרים את הספרייה Dynamic Links.
- מוסיפים את הדגל
-ObjC
לקטע Other Linker Flags (דגלים אחרים של קישור) בהגדרות ה-build של היעד. - כדי ליהנות מחוויית שימוש אופטימלית ב-Dynamic Links, מומלץ להפעיל את Google Analytics בפרויקט Firebase ולהוסיף את Firebase SDK for Google Analytics לאפליקציה. אפשר לבחור בספרייה ללא איסוף של מזהי IDFA או עם איסוף של מזהי IDFA.
- בסיום, Xcode יתחיל לפתור את יחסי התלות ולהוריד אותם באופן אוטומטי ברקע.
https://github.com/firebase/firebase-ios-sdk.git
עכשיו מבצעים כמה שלבי הגדרה:
- במסוף Firebase, פותחים את הקטע Dynamic Links. אם תתבקשו לעשות זאת, יש לאשר את התנאים וההגבלות.
-
מוודאים שמזהה האפליקציה ב-App Store ותחילית מזהה האפליקציה מצוינים בהגדרות האפליקציה. כדי להציג ולערוך את ההגדרות של האפליקציה, עוברים אל דף ההגדרות של הפרויקט ב-Firebase ובוחרים באפליקציה ל-iOS.
כדי לוודא שפרויקט Firebase מוגדר כראוי לשימוש ב-Dynamic Links באפליקציה ל-iOS, פותחים את כתובת ה-URL הבאה:
https://your_dynamic_links_domain/apple-app-site-association
אם האפליקציה מחוברת, הקובץ
apple-app-site-association
מכיל הפניה למזהה החבילה ולתחילית של מזהה האפליקציה. לדוגמה:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
אם השדה
details
ריק, צריך לוודא שציינתם את הקידומת של מזהה האפליקציה. לתשומת ליבכם: התחילית של מזהה האפליקציה עשויה להיות שונה מ-Team ID. -
אופציונלי: השבתת השימוש של Dynamic Links SDK בלוח העריכה של iOS.
כברירת מחדל, Dynamic Links SDK משתמש בלוח העריכה כדי לשפר את האמינות של קישורי עומק לאחר ההתקנה. באמצעות הלוח, Dynamic Links יכול לוודא שכאשר משתמש פותח Dynamic Link אבל צריך להתקין את האפליקציה קודם, המשתמש יכול לעבור מיד לתוכן המקורי המקושר כשפותחים את האפליקציה בפעם הראשונה אחרי ההתקנה.
החיסרון של השיטה הזו הוא שהשימוש בלוח העריכה מפעיל התראה ב-iOS מגרסה 14 ואילך. לכן, בפעם הראשונה שמשתמשים יפתחו את האפליקציה, אם הלוח יכלול כתובת URL, תוצג להם התראה על כך שהאפליקציה שלכם ניגשה ללוח, וזה עלול לבלבל אותם.
כדי להשבית את ההתנהגות הזו, עורכים את הקובץ
Info.plist
של פרויקט Xcode ומגדירים את המפתחFirebaseDeepLinkPasteboardRetrievalEnabled
לערךNO
.
פתיחת Dynamic Links באפליקציה
- בכרטיסייה Info בפרויקט Xcode של האפליקציה, יוצרים כתובת URL מסוג חדש שתשמש את Dynamic Links. מגדירים את השדה Identifier לערך ייחודי, ואת השדה URL scheme למזהה החבילה. זהו פורמט כתובת ה-URL שמוגדר כברירת מחדל ב-Dynamic Links.
- בכרטיסייה Capabilities בפרויקט Xcode של האפליקציה, מפעילים את Associated Domains ומוסיפים את הפרטים הבאים לרשימת Associated Domains:
applinks:your_dynamic_links_domain
- אם רוצים לקבל Dynamic Links עם דומיין מותאם אישית לחלוטין, יוצרים מפתח בשם
FirebaseDynamicLinksCustomDomains
בקובץInfo.plist
של הפרויקט ב-Xcode ומגדירים אותו כתחילית של כתובות ה-URL מסוג Dynamic Links של האפליקציה. לדוגמה:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - מייבאים את המודול
FirebaseCore
ב-UIApplicationDelegate
, וגם את כל המודולים האחרים של 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; // ...
- מגדירים מכונה משותפת
FirebaseApp
ב-methodapplication(_:didFinishLaunchingWithOptions:)
של בעל הגישה לאפליקציה: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, עליכם ליצור נציג מורשה לאפליקציה ולצרף אותו ל-build של
App
דרךUIApplicationDelegateAdaptor
או באמצעותNSApplicationDelegateAdaptor
. צריך גם להשבית את החלפת הקוד של נציג האפליקציה. מידע נוסף זמין בהוראות ל-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 לא נמצא בהפעלה הראשונה של האפליקציה, תתבצע קריאה לשיטה הזו כאשר ה-
url
שלDynamicLink
מוגדר ל-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; }