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

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

  1. قم بتثبيت وتهيئة Firebase SDKs لـ 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 الخاص بك بشكل صحيح باستخدام معرف متجر التطبيقات ومعرف الفريق.

  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.

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