لتلقّي "روابط Firebase الديناميكية" التي أنشأتها،
عليك تضمين حزمة تطوير البرامج (SDK) لخدمة "روابط Firebase الديناميكية" في تطبيقك واستدعاء طريقة
FirebaseDynamicLinks.getDynamicLink() عند تحميل تطبيقك لـ
الحصول على البيانات التي تم تمريرها في الرابط الديناميكي.
إعداد Firebase وحزمة تطوير البرامج (SDK) لخدمة "روابط Firebase الديناميكية"
ثبِّت حِزم تطوير البرامج (SDK) لمنصة Firebase في Flutter وابدأها إذا لم يسبق لك إجراء ذلك.
من دليل جذر مشروع Flutter، نفِّذ الأمر التالي لتثبيت مكوّن Dynamic Links الإضافي:
flutter pub add firebase_dynamic_linksإذا كنت تنشئ تطبيق Android، افتح صفحة إعدادات المشروع في "وحدة تحكّم Firebase" وتأكَّد من تحديد مفتاح توقيع SHA-1. إذا كنت تستخدم روابط التطبيقات، حدِّد أيضًا مفتاح SHA-256.
شريك التكامل
أكمِل خطوات شريك التكامل التالية للمنصات التي تنشئ تطبيقك من أجلها.
Android
على Android، عليك إضافة intent filter جديد لتلقّي الروابط لصفحات معيّنة في التطبيق ضمن نطاقك، لأنّ الرابط الديناميكي سيعيد التوجيه إلى نطاقك إذا كان تطبيقك مثبَّتًا. هذا الإجراء مطلوب لكي يتلقّى تطبيقك بيانات الرابط الديناميكي بعد تثبيته أو تحديثه من "متجر Play" والنقر على الزر "متابعة". في AndroidManifest.xml:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="example.com"
android:scheme="https"/>
</intent-filter>
عندما يفتح المستخدمون رابطًا ديناميكيًا يتضمّن رابطًا عميقًا للمخطط والمضيف اللذين تحدّدهما، سيبدأ تطبيقك النشاط باستخدام intent filter هذا للتعامل مع الرابط.
الخطوة التالية هي التأكّد من تسجيل الملف المرجعي لمعيار SHA-256 لشهادة التوقيع في "وحدة تحكّم Firebase" للتطبيق. يمكنك الاطّلاع على مزيد من التفاصيل حول كيفية استرداد الملف المرجعي لمعيار SHA-256 في صفحة المصادقة على العميل.
منصات Apple
أنشِئ حساب مطوِّر على Apple إذا لم يكن لديك حساب حاليًا.
في صفحة إعدادات المشروع في "وحدة تحكّم Firebase"، تأكَّد من ضبط تطبيق iOS بشكلٍ صحيح باستخدام رقم تعريف متجر التطبيقات ورقم تعريف الفريق.
على موقع Apple للمطوّرين، أنشِئ ملفًا شخصيًا للتزويد لتطبيقك مع تفعيل إمكانية "النطاقات المرتبطة".
في Xcode، نفِّذ ما يلي:
افتح تطبيقك ضِمن العنوان الأهداف.
في صفحة "التوقيع والإمكانات"، تأكَّد من تسجيل فريقك وضبط ملفك الشخصي للتزويد.
في صفحة "التوقيع والإمكانات"، فعِّل النطاقات المرتبطة وأضِف ما يلي إلى قائمة "النطاقات المرتبطة" (استبدِل المثال بنطاقك):
applinks:example.page.linkفي صفحة "معلومات"، أضِف نوع عنوان URL إلى مشروعك. اضبط حقل "مخططات عناوين URL" على رقم تعريف حزمة تطبيقك. (يمكن أن يكون المعرّف
Bundle IDأو أي قيمة أخرى تريدها.)إذا كنت قد أعددت نطاقًا مخصّصًا لمشروعك على Firebase، أضِف بادئة عنوان URL للرابط الديناميكي إلى ملف
Info.plistفي مشروع iOS باستخدام المفتاحFirebaseDynamicLinksCustomDomains.<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://custom.domain.io/path1</string> <string>https://custom.domain.io/path2</string> </array> ...other settings </dict> </plist>اختياري: أوقِف استخدام حزمة تطوير البرامج (SDK) لخدمة "روابط Firebase الديناميكية" للوحة اللصق على iOS.
تستخدم حزمة تطوير البرامج (SDK) للروابط الديناميكية لوحة اللصق بشكلٍ تلقائي لتحسين موثوقية الروابط لصفحات معيّنة في التطبيق بعد التثبيت. باستخدام لوحة اللصق، يمكن أن تتأكّد "روابط Firebase الديناميكية" من أنّ المستخدم يمكنه الانتقال فورًا إلى المحتوى المرتبط الأصلي عند فتح التطبيق لأول مرة بعد التثبيت، وذلك عندما يفتح رابطًا ديناميكيًا ولكن يحتاج إلى تثبيت تطبيقك أولاً.
من عيوب هذه الميزة أنّ استخدام لوحة اللصق يؤدي إلى ظهور إشعار على نظام التشغيل iOS 14 والإصدارات الأحدث. لذلك، في المرة الأولى التي يفتح فيها المستخدمون تطبيقك، إذا كانت لوحة اللصق تحتوي على عنوان URL لرابط ديناميكي، سيظهر لهم إشعار بأنّ تطبيقك قد وصل إلى لوحة اللصق، ما قد يؤدي إلى حدوث ارتباك.
لإيقاف هذا السلوك، عدِّل ملف
Info.plistفي مشروع Xcode واضبط المفتاحFirebaseDeepLinkPasteboardRetrievalEnabledعلىNO.
التعامل مع الروابط لصفحات معيّنة في التطبيق
للتعامل مع رابط ديناميكي في تطبيقك، يجب تنفيذ سيناريوهَين.
حالة "تم إيقاف التطبيق"
اضبط الطريقتَين التاليتَين:
FirebaseDynamicLinks.getInitialLink: تعرضFuture<PendingDynamicLinkData?>FirebaseDynamicLinks.onLink: معالج أحداث يعرضStreamيحتوي علىPendingDynamicLinkData?
سيتلقّى Android الرابط دائمًا من خلال FirebaseDynamicLinks.getInitialLink من حالة "تم إيقاف التطبيق"، ولكن لا يتم ضمان ذلك على iOS. لذلك، من المفيد إعداد كلتا الطريقتَين بالترتيب التالي لضمان تلقّي تطبيقك للرابط:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);
// Check if you received the link via `getInitialLink` first
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
if (initialLink != null) {
final Uri deepLink = initialLink.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
FirebaseDynamicLinks.instance.onLink.listen(
(pendingDynamicLinkData) {
// Set up the `onLink` event listener next as it may be received here
if (pendingDynamicLinkData != null) {
final Uri deepLink = pendingDynamicLinkData.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
},
);
runApp(MyApp(initialLink));
}
ضِمن منطق تطبيقك، يمكنك بعد ذلك التحقّق مما إذا تم التعامل مع رابط وتنفيذ إجراء، على سبيل المثال:
if (initialLink != null) {
final Uri deepLink = initialLink.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
حالة "التطبيق في الخلفية" أو "التطبيق في المقدّمة"
أثناء فتح التطبيق أو عندما يكون في الخلفية، استخدِم أداة الجلب FirebaseDynamicLinks.onLink:
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
بدلاً من ذلك، إذا أردت تحديد ما إذا تم استخدام رابط ديناميكي معيّن لفتح التطبيق، مرِّره إلى طريقة getDynamicLink بدلاً من ذلك:
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
اختبار رابط ديناميكي على منصة iOS
لاختبار رابط ديناميكي على iOS، يجب استخدام جهاز فعلي. عليك أيضًا تشغيل التطبيق في وضع الإصدار (على سبيل المثال، flutter run --release)، إذا كنت تختبر رابطًا ديناميكيًا من حالة "تم إيقاف التطبيق" (أي تم إغلاق التطبيق عن طريق التمرير سريعًا).