لتلقّي Firebase Dynamic Links التي
أنشأتها، عليك تضمين حزمة تطوير البرامج (SDK) Dynamic Links في تطبيقك واستدعاء الطريقتَين
handleUniversalLink:
وdynamicLinkFromCustomSchemeURL:
عند تحميل تطبيقك للحصول على البيانات التي يتم تمريرها في Dynamic Link.
المتطلبات الأساسية
قبل البدء، تأكَّد من إضافة Firebase إلى مشروعك على iOS .
إعداد Firebase وحزمة تطوير البرامج (SDK) لمنصّة Dynamic Links
استخدِم أداة Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.
- في Xcode، مع فتح مشروع تطبيقك، انتقِل إلى ملف > إضافة حِزم.
- أضِف مستودع حزمة تطوير البرامج (SDK) لمنصّات Firebase Apple عندما يُطلب منك ذلك:
- اختَر مكتبة "Dynamic Links".
- أضِف العلامة
-ObjC
إلى قسم رموز ربط أخرى في إعدادات الإنشاء الخاصة بالهدف. - للحصول على أفضل تجربة مع Dynamic Links، ننصحك بتفعيل Google Analytics في مشروعك على Firebase وإضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصة بخدمة "إحصاءات Google" إلى تطبيقك. يمكنك اختيار المكتبة التي لا تتضمّن جمع معرّف المعلِنين (IDFA) أو من خلال جمع معرّف المعلِنين (IDFA).
- عند الانتهاء، ستبدأ خدمة Xcode تلقائيًا في حلّ المشاكل المتعلّقة بالعناصر التي تعتمد عليها وتنزيلها في الخلفية.
https://github.com/firebase/firebase-ios-sdk.git
والآن، نفِّذ بعض خطوات الضبط:
- في وحدة تحكّم Firebase، افتح قسم Dynamic Links . اقبل بنود الخدمة إذا طُلب منك ذلك.
-
تأكَّد من تحديد رقم تعريف تطبيقك على App Store وبادئة معرّف التطبيق في إعدادات تطبيقك. لعرض إعدادات تطبيقك وتعديلها، انتقِل إلى صفحة الإعدادات في مشروعك على Firebase واختَر تطبيقك المتوافق مع نظام التشغيل iOS.
يمكنك التأكّد من ضبط إعدادات مشروعك على Firebase بشكلٍ صحيح لاستخدام Dynamic Links في تطبيقك المتوافق مع نظام التشغيل 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
فارغًا، تحقّق من تحديد بادئة معرّف التطبيق. يُرجى العِلم أنّ بادئة رقم تعريف التطبيق قد لا تكون مطابقة لرقم تعريف الفريق. -
اختياري: أوقِف استخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Dynamic Links لصق Dynamic Links في نظام التشغيل iOS.
تستخدم حزمة تطوير البرامج (SDK) Dynamic Links تلقائيًا لوحة اللصق لتحسين موثوقية الروابط لصفحات في التطبيق بعد التثبيت. باستخدام لوحة اللصق، يمكن Dynamic Links التأكّد من أنّه عندما يفتح أحد المستخدمين Dynamic Link ولكن يحتاج إلى تثبيت تطبيقك أولاً، يمكن للمستخدم الانتقال فورًا إلى المحتوى الأصلي المرتبط عند فتح التطبيق لأول مرة بعد التثبيت.
ويتمثل الجانب السلبي في ذلك في أنّ استخدام لوحة اللصق يؤدي إلى عرض إشعار على نظام التشغيل iOS 14 والإصدارات الأحدث. ولذلك، عندما يفتح المستخدمون تطبيقك لأول مرة، إذا كانت لوحة اللصق تحتوي على عنوان URL، سيظهر لهم إشعار يفيد بأنّ تطبيقك قد وصل إلى اللوح الصغير، ما قد يتسبب في حدوث التباس.
لإيقاف هذا السلوك، عدِّل ملف
Info.plist
في مشروع Xcode واضبط مفتاحFirebaseDeepLinkPasteboardRetrievalEnabled
علىNO
.
فتح Dynamic Links في تطبيقك
- في علامة التبويب المعلومات ضمن مشروع Xcode لتطبيقك، أنشئ نوعًا جديدًا من عناوين URL ليتم استخدامه مع Dynamic Links. اضبط الحقل المعرّف على قيمة فريدة، واضبط الحقل مخطّط عنوان URL على أن يكون معرّف الحِزمة، وهو مخطّط عنوان URL التلقائي المستخدَم في Dynamic Links.
- في علامة التبويب الإمكانات ضمن مشروع Xcode لتطبيقك،
فعِّل ميزة "النطاقات المرتبطة" وأضِف ما يلي إلى قائمة النطاقات
المرتبطة:
applinks:your_dynamic_links_domain
- إذا كنت تريد تلقّي Dynamic Links باستخدام
نطاق مخصّص بالكامل، يمكنك فيملف
Info.plist
الخاص بمشروعك على Xcode إنشاء مفتاح باسمFirebaseDynamicLinksCustomDomains
وضبطه على بادئات عناوين URL الخاصة بتطبيقك في Dynamic Links. على سبيل المثال:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - استورِد وحدة
FirebaseCore
فيUIApplicationDelegate
، بالإضافة إلى أي وحدات Firebase أخرى يستخدمها مفوّض تطبيقك. على سبيل المثال، لاستخدام Cloud Firestore وAuthentication:واجهة المستخدم
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- يمكنك ضبط المثيل المشترك ضمن
FirebaseApp
في طريقةapplication(_:didFinishLaunchingWithOptions:)
الخاصة بمفوَّض تطبيقك:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- إذا كنت تستخدم 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() } } } }
- بعد ذلك، في الطريقة
application:continueUserActivity:restorationHandler:
، يمكنك معالجة الروابط التي تمّ تلقّيها على أنّها روابط عامة عندما يكون التطبيق مثبّتًا:Swift
ملاحظة: لا يتوفّر هذا المنتج على أجهزة 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; }
- أخيرًا، في
application:openURL:options:
، يمكنك استخدام روابط الأسماء التي تمّ تلقّيها من خلال مخطّط عناوين URL المخصّص لتطبيقك. يتمّ استدعاء هذه الطريقة عند فتح تطبيقك للمرّة الأولى بعد التثبيت.إذا لم يتم العثور على Dynamic Link عند تشغيل تطبيقك لأول مرة، سيتم استدعاء هذه الطريقة مع ضبط
url
فيDynamicLink
علىnil
، ما يشير إلى أنّ حزمة SDK لم تعثر على Dynamic Link مطابقة في انتظار المراجعة.Swift
ملاحظة: لا يتوفّر هذا المنتج على أجهزة 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; }