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

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

תנאים מוקדמים

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

  1. להוסיף Firebase לפרויקט iOS שלך .
  2. כלול את התרמיל הבא שלך Podfile :
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  3. הפעלת pod install ולפתוח את יצר .xcworkspace הקובץ.
  4. בשנות ה קונסולת Firebase , פתח את הקטע קישורים דינמיים. קבל את תנאי השירות אם תתבקש לעשות זאת.
  5. ודא שמזהה היישום שלך ב- 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 בשטח ריק, בדוק שציינת קידומת מזהה האפליקציה שלך. שים לב שקידומת מזהה היישום שלך עשויה שלא להיות זהה לזה של הצוות שלך.

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

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

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

    כדי לבטל את ההתנהגות הזו, לערוך 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

    מטרה-ג

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

    מָהִיר

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

    מטרה-ג

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

    מָהִיר

    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks()
        .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in
          // ...
        }
    
      return handled
    }
    

    מטרה-ג

    - (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 הצליח למצוא התאמה ממתינה קישור דינמי.

    מָהִיר

    @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
    }
    

    מטרה-ג

    - (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;
    }