קבלת קישורים דינמיים ב-iOS

כדי לקבל את Firebase Dynamic Links ש שיצרתם, עליכם לכלול את ה-SDK של Dynamic Links באפליקציה שלכם ולקרוא handleUniversalLink: ו-dynamicLinkFromCustomSchemeURL: שיטות כשהאפליקציה נטענת כדי לקבל את הנתונים שמועברים ב-Dynamic Link.

דרישות מוקדמות

לפני שמתחילים, חשוב להוסיף את Firebase למכשיר ה-iOS project.

שימוש ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות של Firebase.

  1. ב-Xcode, כשפרויקט האפליקציה פתוח, עוברים אל File > (קובץ >) הוספת חבילות.
  2. כשמופיעה בקשה, מוסיפים את מאגר ה-SDK של מוצרי הפלטפורמה של Firebase של Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. בוחרים את הספרייה Dynamic Links.
  5. מוסיפים את הדגל -ObjC לקטע סימונים של מקשר אחר בהגדרות ה-build של היעד.
  6. כדי ליהנות מחוויה אופטימלית עם Dynamic Links, מומלץ הפעלת Google Analytics בפרויקט Firebase והוספת ה-SDK של Firebase ל-Google Analytics לאפליקציה. אפשר בוחרים את הספרייה בלי אוסף IDFA או עם איסוף IDFA.
  7. בסיום, Xcode יתחיל לפתור את הבעיה ותוריד את של יחסי התלות ברקע.

עכשיו מבצעים כמה פעולות להגדרה:

  1. במסוף Firebase, פותחים את Dynamic Links . אם תתבקשו לעשות זאת, יש לאשר את התנאים וההגבלות.
  2. עליך לוודא שהמזהה של האפליקציה ב-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.

  3. אופציונלי: השבתת השימוש של Dynamic Links ה-SDK ב-iOS לוח הדבקה.

    כברירת מחדל, ערכת ה-SDK של Dynamic Links משתמשת בלוח העריכה כדי לשפר את של קישורי עומק לאחר ההתקנה. באמצעות הלוח, Dynamic Links יכול לוודא שכאשר משתמש פותח Dynamic Link אבל צריך להתקין את האפליקציה קודם, המשתמש יכול לעבור מיד לתוכן המקורי המקושר כשפותחים את האפליקציה בפעם הראשונה אחרי ההתקנה.

    החיסרון של זה הוא שהשימוש בלוח העריכה גורם להפעלת התראה ב-iOS 14 ואילך. לכן, בפעם הראשונה שמשתמשים יפתחו את האפליקציה, אם הלוח יכלול כתובת URL, תוצג להם התראה על כך שהאפליקציה שלכם ניגשה ללוח, וזה עלול לבלבל אותם.

    כדי להשבית את ההתנהגות הזו, צריך לערוך את פרטי פרויקט ה-Xcode Info.plist ולהגדיר את מקש FirebaseDeepLinkPasteboardRetrievalEnabled אל NO.

  1. בכרטיסייה Info (מידע) בפרויקט Xcode של האפליקציה, יוצרים קובץ חדש סוג כתובת URL לשימוש עבור Dynamic Links. מגדירים את השדה Identifier הוא ערך ייחודי והשדה URL scheme הוא יהיה מזהה החבילה שלך, שהוא סכימת ברירת המחדל של כתובת ה-URL שבה נעשה שימוש ב-Dynamic Links.
  2. בכרטיסייה Capabilities של פרויקט Xcode של האפליקציה, להפעיל את 'דומיינים משויכים' ולהוסיף את כתובות ה-URL הבאות אל Associated רשימת הדומיינים:
    applinks:your_dynamic_links_domain
  3. כדי לקבל Dynamic Links באמצעות דומיין מותאם אישית במלואו, ב- את הקובץ Info.plist של פרויקט ה-Xcode, יוצרים מפתח שנקרא FirebaseDynamicLinksCustomDomains ולהגדיר אותו Dynamic Links קידומות של כתובות URL. לדוגמה:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
  4. מייבאים את המודול 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;
    // ...
          
  5. מגדירים מכונה משותפת של 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];
  6. אם אתה משתמש ב-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()
          }
        }
      }
    }
          
  7. בשלב הבא, בשיטה 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;
    }
  8. בסוף, בקישורי הכינוי של 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;
    }