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

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

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

לפני שתתחיל, הקפד להוסיף את Firebase לפרויקט iOS שלך .

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

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

כעת, בצע כמה שלבי תצורה:

  1. במסוף Firebase , פתח את הקטע קישורים דינמיים . קבל את תנאי השירות אם תתבקש לעשות זאת.
  2. ודא שמזהה ה-App Store של האפליקציה שלך וקידומת מזהה האפליקציה שלך מצוינים בהגדרות האפליקציה שלך. כדי להציג ולערוך את הגדרות האפליקציה שלך, עבור אל דף ההגדרות של פרויקט Firebase שלך ​​ובחר באפליקציית iOS שלך.

    תוכל לאשר שפרויקט Firebase שלך ​​מוגדר כהלכה לשימוש בקישורים דינמיים באפליקציית iOS שלך על ידי פתיחת כתובת האתר הבאה:

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

    אם האפליקציה שלך מחוברת, קובץ ה- apple-app-site-association מכיל הפניה לקידומת App ID ומזהה החבילה של האפליקציה שלך. לדוגמה:

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

    אם שדה details ריק, בדוק שוב שציינת את הקידומת של מזהה האפליקציה שלך. שים לב שייתכן שהקידומת של מזהה האפליקציה שלך לא תהיה זהה לזהות הצוות שלך.

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

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

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

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

  1. בכרטיסייה מידע של פרויקט Xcode של האפליקציה שלך, צור סוג כתובת URL חדש שישמש עבור קישורים דינמיים. הגדר את שדה המזהה לערך ייחודי ואת שדה סכימת ה-URL להיות מזהה החבילה שלך, שהיא ערכת ברירת המחדל של כתובת האתר המשמשת את הקישורים הדינמיים.
  2. בלשונית היכולות של פרויקט ה-Xcode של האפליקציה שלך, הפעל את ה-Associated Domains והוסף את הדברים הבאים לרשימת ה- Associated Domains :
    applinks:your_dynamic_links_domain
  3. אם ברצונך לקבל קישורים דינמיים עם דומיין מותאם אישית מלא , בקובץ Info.plist של פרויקט Xcode שלך, צור מפתח בשם FirebaseDynamicLinksCustomDomains והגדר אותו לקידומות URL של קישורים דינמיים של האפליקציה שלך. לדוגמה:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. ייבא את מודול FirebaseCore ב- UIApplicationDelegate שלך, כמו גם כל מודולי Firebase אחרים שנציג האפליקציה שלך משתמש בו. לדוגמה, כדי להשתמש ב-Cloud Firestore ובאימות:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    מָהִיר

    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()

    מָהִיר

    // 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: טפל בקישורים שהתקבלו כקישורים אוניברסליים כאשר האפליקציה כבר מותקנת:

    מָהִיר

    הערה: מוצר זה אינו זמין ביעדי 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 של DynamicLink תהיה nil , מה שמציין שה-SDK לא הצליח למצוא קישור דינמי ממתין תואם.

    מָהִיר

    הערה: מוצר זה אינו זמין ביעדי 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;
    }