Google 致力于为黑人社区推动种族平等。查看具体举措
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

تلقي روابط ديناميكية على iOS

لتلقي روابط Firebase الديناميكية التي قمت بإنشائها ، يجب عليك تضمين Dynamic Links SDK في تطبيقك واستدعاء handleUniversalLink: و dynamicLinkFromCustomSchemeURL: أساليب عند تحميل تطبيقك للحصول على البيانات التي تم تمريرها في الرابط الديناميكي.

المتطلبات الأساسية

تتطلب روابط Firebase الديناميكية نظام iOS 8 أو أحدث. يمكنك استهداف iOS 7 في تطبيقك ، ولكن جميع مكالمات Firebase Dynamic Links SDK لن تكون عمليات تشغيل إذا كان التطبيق لا يعمل على iOS 8 أو أحدث.

  1. أضف Firebase إلى مشروع iOS الخاص بك . قم بتضمين Podfile التالية في Podfile الخاص بك:
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  2. قم بتشغيل pod install وافتح ملف .xcworkspace تم إنشاؤه.
  3. في وحدة تحكم Firebase ، افتح قسم الروابط الديناميكية . اقبل شروط الخدمة إذا طُلب منك ذلك.
  4. تأكد من تحديد معرف متجر التطبيقات الخاص بك وبادئة معرف التطبيق في إعدادات التطبيق. لعرض إعدادات تطبيقك وتعديلها ، انتقل إلى صفحة إعدادات مشروع Firebase وحدد تطبيق iOS الخاص بك.

    يمكنك التأكد من تكوين مشروع Firebase الخاص بك بشكل صحيح لاستخدام الروابط الديناميكية في تطبيق iOS الخاص بك عن طريق فتح عنوان URL التالي:

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

    إذا كان التطبيق الخاص بك متصلاً ، فإن ملف apple-app-site-association يحتوي على مرجع لبادئة معرف التطبيق ومعرف الحزمة. على سبيل المثال:

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

    إذا كان حقل details فارغًا ، فتحقق جيدًا من تحديد بادئة معرف التطبيق. لاحظ أن بادئة معرف التطبيق الخاص بك قد لا تكون هي نفسها معرف الفريق الخاص بك.

  5. اختياري : قم بتعطيل استخدام Dynamic Links SDK للوحة لصق iOS.

    بشكل افتراضي ، تستخدم حزمة SDK للروابط الديناميكية لوحة اللصق لتحسين موثوقية الروابط العميقة بعد التثبيت. باستخدام لوحة اللصق ، يمكن للروابط الديناميكية التأكد من أنه عندما يفتح المستخدم رابطًا ديناميكيًا ولكنه يحتاج إلى تثبيت تطبيقك أولاً ، يمكن للمستخدم الانتقال فورًا إلى المحتوى المرتبط الأصلي عند فتح التطبيق لأول مرة بعد التثبيت.

    الجانب السلبي لهذا هو أن استخدام لوحة اللصق يؤدي إلى ظهور إشعار على نظام التشغيل iOS 14 والإصدارات الأحدث. لذلك ، في المرة الأولى التي يفتح فيها المستخدمون تطبيقك ، إذا كانت لوحة اللصق تحتوي على عنوان URL للرابط الديناميكي ، فسيشاهدون إشعارًا بأن تطبيقك قد وصل إلى لوحة اللصق ، مما قد يسبب الارتباك.

    لتعطيل هذا السلوك ، قم بتحرير ملف Info.plist الخاص بمشروع Xcode الخاص بك وقم بتعيين مفتاح FirebaseDeepLinkPasteboardRetrievalEnabled على NO .

  1. في علامة تبويب المعلومات في مشروع Xcode الخاص بتطبيقك ، أنشئ نوع عنوان URL جديدًا لاستخدامه في الروابط الديناميكية. قم بتعيين حقل المعرف على قيمة فريدة وحقل مخطط URL ليكون معرف الحزمة الخاص بك ، وهو نظام URL الافتراضي الذي تستخدمه الروابط الديناميكية.
  2. في علامة التبويب " القدرات" في مشروع Xcode الخاص بتطبيقك ، قم بتمكين المجالات المرتبطة وأضف ما يلي إلى قائمة المجالات المرتبطة :
    applinks:your_dynamic_links_domain
  3. إذا كنت ترغب في تلقي روابط ديناميكية مع مجال مخصص بالكامل ، في ملف Info.plist الخاص بمشروع Xcode الخاص بك ، قم بإنشاء مفتاح يسمى FirebaseDynamicLinksCustomDomains وقم بتعيينه على بادئات URL للروابط الديناميكية الخاصة بالتطبيق. على سبيل المثال:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. استيراد وحدة Firebase في UIApplicationDelegate :

    سويفت

    import Firebase

    ج موضوعية

    @import Firebase;
  5. قم FirebaseApp مثيل FirebaseApp المشترك ، عادةً في تطبيق تطبيقك application:didFinishLaunchingWithOptions: method:

    سويفت

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

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. وبعد ذلك، في application:continueUserActivity:restorationHandler: طريقة، وصلات مقبض التي وردت العالمي سريعة عند تثبيت التطبيق بالفعل (على دائرة الرقابة الداخلية 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 والإصدارات application:openURL:options: ) ، والتعامل مع الروابط المستلمة من خلال مخطط URL المخصص لتطبيقك يتم استدعاء هذه الطرق عندما يتلقى تطبيقك رابطًا على نظام التشغيل iOS 8 والإصدارات الأقدم ، وعندما يتم فتح التطبيق لأول مرة بعد التثبيت على أي إصدار من نظام التشغيل iOS.

    إذا لم يتم العثور على الرابط الديناميكي في أول تشغيل لتطبيقك (على أي إصدار من iOS) ، فسيتم استدعاء هذه الطريقة مع تعيين url FIRDynamicLink على 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;
    }