כדי לקבל את Firebase Dynamic Links ש
יצרתם, עליכם לכלול את ה-SDK של Dynamic Links באפליקציה ולקרוא לשיטות handleUniversalLink:
ו-dynamicLinkFromCustomSchemeURL:
כשהאפליקציה נטענת כדי לקבל את הנתונים שהועברו ב-Dynamic Link.
דרישות מוקדמות
לפני שמתחילים, חשוב להוסיף את Firebase לפרויקט ל-iOS.
הגדרת Firebase ו-Dynamic Links SDK
שימוש ב-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
בשיטהapplication(_: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, עליכם ליצור נציג אפליקציה ולצרף אותו למבנה
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() } } } }
- בשלב הבא, ב-method
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 לא נמצא בהפעלה הראשונה של האפליקציה, השיטה הזו תופעל עם הערך
nil
שלurl
ב-DynamicLink
, כדי לציין שה-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; }