Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. אופציונלי: השבת את השימוש של Dynamic קישורים SDK של קרטון iOS.

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

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

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

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

    מָהִיר

    import Firebase

    Objective-C

    @import Firebase;
  5. & Nbsp הגדר FirebaseApp משותף למשל, בדרך כלל של האפליקציה שלך application:didFinishLaunchingWithOptions: השיטה:

    מָהִיר

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. הבא, ב application:continueUserActivity:restorationHandler: שיטה, קישורי ידית קבלו כמו קישורי יוניברסל כאשר לאחר התקנת האפליקציה כבר (על iOS 9 ומעלה):

    מָהִיר

    הערה: מוצר זה אינו זמין 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;
    }
  7. לבסוף, ב application:openURL:sourceApplication:annotation: (iOS 8 ומעלה) וכן application:openURL:options: (iOS 9 ומעלה) שיטות, קישורי ידית שהתקבלו דרך ערכת האתר המותאם אישית של האפליקציה שלך. שיטות אלו נקראות כאשר האפליקציה שלך מקבלת קישור ב-iOS 8 ומעלה, וכאשר האפליקציה שלך נפתחת בפעם הראשונה לאחר ההתקנה בכל גרסה של iOS.

    אם הקישור הדינמי לא נמצא על ההשקה הראשונה של האפליקציה (על כול גרסה של iOS), שיטה זו תיקרא עם FIRDynamicLink של url סט כדי 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;
    }