Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

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

قبل أن تبدأ ، تأكد من إضافة Firebase إلى مشروع iOS الخاص بك .

استخدم Swift Package Manager لتثبيت وإدارة تبعيات Firebase.

  1. في Xcode ، مع فتح مشروع التطبيق الخاص بك ، انتقل إلى ملف> إضافة حزم .
  2. عند المطالبة ، قم بإضافة مستودع SDK لأنظمة Firebase Apple الأساسية:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. اختر مكتبة الروابط الديناميكية.
  5. للحصول على تجربة مثالية مع الروابط الديناميكية ، نوصي بتمكين Google Analytics في مشروع Firebase وإضافة Firebase SDK لـ Google Analytics إلى تطبيقك. يمكنك تحديد المكتبة بدون مجموعة IDFA أو مع مجموعة IDFA.
  6. عند الانتهاء ، سيبدأ Xcode تلقائيًا في حل وتنزيل التبعيات الخاصة بك في الخلفية.

الآن ، قم بتنفيذ بعض خطوات التكوين:

  1. في وحدة تحكم Firebase ، افتح قسم الروابط الديناميكية . اقبل شروط الخدمة إذا طُلب منك ذلك.
  2. تأكد من تحديد معرف متجر التطبيقات الخاص بك وبادئة معرف التطبيق في إعدادات التطبيق. لعرض إعدادات تطبيقك وتعديلها ، انتقل إلى صفحة إعدادات مشروع 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":["NOT /_/*","/*"]}]}}

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

  3. اختياري : قم بتعطيل استخدام 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. قم باستيراد وحدة FirebaseCore في مندوب UIApplicationDelegate ، بالإضافة إلى أي وحدات Firebase أخرى يستخدمها مفوض التطبيق. على سبيل المثال ، لاستخدام Cloud Firestore والمصادقة:

    سويفت

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    ج موضوعية

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. قم بتهيئة مثيل FirebaseApp المشترك ، عادةً في مُهيئ App أو تطبيق مفوض application(_:didFinishLaunchingWithOptions:) :

    سويفت

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

    ج موضوعية

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. بعد ذلك ، في application:continueUserActivity:restorationHandler: method ، تعامل مع الروابط المستلمة كروابط عامة عندما يكون التطبيق مثبتًا بالفعل:

    سويفت

    ملاحظة: هذا المنتج غير متوفر على أهداف 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
    }
    

    ج موضوعية

    ملاحظة: هذا المنتج غير متوفر على أهداف 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:options: التعامل مع الروابط المستلمة من خلال مخطط URL المخصص لتطبيقك. يتم استدعاء هذه الطريقة عند فتح التطبيق الخاص بك لأول مرة بعد التثبيت.

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

    ج موضوعية

    ملاحظة: هذا المنتج غير متوفر على أهداف 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;
    }