احصل على روابط Firebase الديناميكية في تطبيق Flutter

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

  1. قم بتثبيت وتهيئة Firebase SDKs for Flutter إذا لم تكن قد قمت بذلك بالفعل.

  2. من الدليل الجذر لمشروع Flutter الخاص بك، قم بتشغيل الأمر التالي لتثبيت المكون الإضافي Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. إذا كنت تقوم بإنشاء تطبيق Android، فافتح صفحة إعدادات المشروع في وحدة تحكم Firebase وتأكد من تحديد مفتاح التوقيع SHA-1 الخاص بك. إذا كنت تستخدم روابط التطبيقات، فحدد أيضًا مفتاح SHA-256 الخاص بك.

تكامل المنصة

أكمل خطوات تكامل النظام الأساسي التالية للأنظمة الأساسية التي تنشئ تطبيقك لها.

ذكري المظهر

على نظام Android، يجب عليك إضافة مرشح غرض جديد لالتقاط الروابط العميقة لنطاقك، نظرًا لأن الارتباط الديناميكي سيعيد التوجيه إلى نطاقك إذا تم تثبيت تطبيقك. يعد هذا مطلوبًا حتى يتمكن تطبيقك من تلقي بيانات الارتباط الديناميكي بعد تثبيته/تحديثه من متجر 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 الخاصة بك على صفحة مصادقة عميلك .

منصات أبل

  1. قم بإنشاء حساب مطور Apple إذا لم يكن لديك حساب بالفعل.

  2. في صفحة إعدادات المشروع في وحدة تحكم Firebase، تأكد من تكوين تطبيق iOS الخاص بك بشكل صحيح باستخدام معرف App Store ومعرف الفريق.

  3. على موقع Apple Developer، قم بإنشاء ملف تعريف توفير لتطبيقك مع تمكين إمكانية المجال المرتبط.

  4. في Xcode، قم بما يلي:

    1. افتح تطبيقك تحت عنوان TARGETS .

    2. في صفحة التوقيع والإمكانات، تأكد من تسجيل فريقك وتعيين ملف تعريف التزويد الخاص بك.

    3. في صفحة التوقيع والإمكانيات، قم بتمكين المجالات المرتبطة وأضف ما يلي إلى قائمة المجالات المرتبطة (استبدل المثال بالمجال الخاص بك):

      applinks:example.page.link
      
    4. في صفحة المعلومات، أضف نوع URL إلى مشروعك. قم بتعيين حقل أنظمة URL على معرف حزمة تطبيقك. (يمكن أن يكون المعرف هو Bundle ID أو أي شيء تريده.)

    5. إذا قمت بإعداد مجال مخصص لمشروع 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>
      
    6. اختياري: قم بتعطيل استخدام Dynamic Links SDK للوحة اللصق لنظام التشغيل iOS.

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

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

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

للتعامل مع الارتباط الديناميكي في التطبيق الخاص بك، هناك سيناريوهان يتطلبان التنفيذ.

الدولة المنتهية

قم بإعداد الطرق التالية:

  1. FirebaseDynamicLinks.getInitialLink - يُرجع Future<PendingDynamicLinkData?>
  2. 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، يلزمك استخدام جهاز فعلي. ستحتاج أيضًا إلى تشغيل التطبيق في وضع الإصدار (على سبيل المثال، flutter run --release .)، في حالة اختبار رابط ديناميكي من حالة التطبيق المنتهية (أي تم إغلاق التطبيق).