لتلقّي روابط Firebase الديناميكية التي أنشأتها، عليك تضمين حزمة تطوير البرامج (SDK) لـ "الروابط الديناميكية" في تطبيقك واستدعاء الطريقة FirebaseDynamicLinks.getDynamicLink()
عند تحميل تطبيقك للحصول على البيانات التي تم تمريرها في الرابط الديناميكي.
إعداد Firebase وDynamic Links SDK
ثبِّت حِزم تطوير البرامج (SDK) لمنصة Firebase الخاصة بـ Flutter وابدأ إعدادها إذا لم يسبق لك إجراء ذلك.
من الدليل الجذر لمشروع Flutter، شغِّل الأمر التالي لتثبيت المكوّن الإضافي "روابط ديناميكية":
flutter pub add firebase_dynamic_links
إذا كنت بصدد إنشاء تطبيق Android، افتح صفحة إعدادات المشروع في وحدة تحكّم Firebase وتأكَّد من أنّك حدّدت مفتاح التوقيع SHA-1. إذا كنت تستخدم روابط التطبيقات، عليك أيضًا تحديد مفتاح SHA-256.
شريك التكامل
أكمِل خطوات دمج المنصات التالية للمنصات التي تنوي إنشاء تطبيقك عليها.
Android
على نظام التشغيل Android، عليك إضافة فلتر أهداف جديد لتلقّي الروابط المؤدية إلى صفحات معيّنة في نطاقك، لأنّ الرابط الديناميكي سيعيد التوجيه إلى نطاقك إذا كان تطبيقك مثبّتًا. ويجب توفُّر هذا الإعداد لكي يتلقّى تطبيقك بيانات Dynamic Link بعد تثبيته أو تحديثه من "متجر 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>
عندما يفتح المستخدمون رابطًا ديناميكيًا يتضمّن رابطًا لصفحة في التطبيق يؤدي إلى المخطط والمضيف اللذين تحدّدهما، سيبدأ تطبيقك النشاط باستخدام فلتر الأهداف هذا للتعامل مع الرابط.
الخطوة التالية هي التأكّد من تسجيل الملف المرجعي لشهادة التوقيع SHA-256 في وحدة تحكّم Firebase للتطبيق. يمكنك العثور على مزيد من التفاصيل حول كيفية استرداد الملف المرجعي لشهادة SHA-256 في صفحة مصادقة العميل.
منصات Apple
أنشئ حسابًا كمطوِّر على Apple إذا لم يسبق لك إجراء ذلك.
في صفحة إعدادات المشروع ضمن وحدة تحكّم Firebase، تأكَّد من إعداد تطبيقك على iOS بشكل صحيح باستخدام رقم تعريف App Store ورقم تعريف الفريق.
على موقع Apple Developer الإلكتروني، أنشئ ملفًا تعريفيًا للتزويد لتطبيقك مع تفعيل إمكانية "النطاقات المرتبطة".
في Xcode، اتّبِع الخطوات التالية:
افتح تطبيقك ضمن العنوان الاستهدافات.
في صفحة "التوقيع والقدرات" (Signing & Capabilities)، تأكَّد من تسجيل فريقك وضبط ملف الإعداد (Provisioning Profile).
في صفحة Signing & Capabilities، فعِّل Associated Domains وأضِف ما يلي إلى قائمة Associated Domains (استبدِل example بنطاقك):
applinks:example.page.link
في صفحة "المعلومات"، أضِف نوع عنوان URL إلى مشروعك. اضبط حقل "مخططات عناوين URL" (URL Schemes) على معرّف حزمة تطبيقك. (يمكن أن يكون المعرّف
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) للروابط الديناميكية في لوحة النسخ واللصق على أجهزة iOS.
تستخدِم حزمة تطوير البرامج (SDK) لـ Dynamic Links الحافظة تلقائيًا لتحسين موثوقية الروابط لصفحات معيّنة في التطبيق بعد التثبيت. باستخدام الحافظة، يمكن للروابط الديناميكية التأكّد من أنّه عندما يفتح أحد المستخدمين رابطًا ديناميكيًا ولكن يحتاج إلى تثبيت تطبيقك أولاً، يمكن للمستخدم الانتقال مباشرةً إلى المحتوى الأصلي المرتبط عند فتح التطبيق لأول مرة بعد التثبيت.
أما الجانب السلبي لذلك، فهو أنّ استخدام الحافظة يؤدي إلى ظهور إشعار على نظام التشغيل 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
getter:
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
.)،
إذا كنت تختبر رابطًا ديناميكيًا من حالة تطبيق تم إنهاؤها (أي تم إغلاق التطبيق عن طريق التمرير السريع).