تلقّي "روابط Firebase الديناميكية" في تطبيق Flutter

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

  1. تثبيت حِزم تطوير البرامج (SDK) لمنصة Firebase وإعدادها من أجل Flutter في حال: لم تفعل ذلك بالفعل.

  2. من الدليل الجذري لمشروع Flutter، شغِّل ما يلي: لتثبيت المكوّن الإضافي للروابط الديناميكية:

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

دمج المنصة

أكمِل الخطوات التالية لدمج المنصات التي تستخدمها إنشاء تطبيقك من أجله.

Android

على نظام التشغيل 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 على مصادقة البرنامج.

منصات Apple

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

  2. في إعدادات المشروع في وحدة تحكُّم Firebase، عليك التأكُّد من أنّ تطبيق iOS يعمل بشكل صحيح. تم إعداده برقم تعريف متجر التطبيقات ورقم تعريف الفريق.

  3. في الموقع الإلكتروني لمطوّري تطبيقات Apple، أنشئ ملفًا شخصيًا لتوفير المتطلبات اللازمة لتطبيقك. مع تفعيل إمكانية "النطاق المرتبط".

  4. في Xcode، نفِّذ ما يلي:

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

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

    3. في توقيع المستند يمكنك تفعيل Associated Domains (النطاقات المرتبطة) و أضِف ما يلي إلى قائمة "النطاقات المرتبطة" (استبدِل المثال بنطاقك):

      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. اختياري: أوقِف استخدام "حزمة تطوير البرامج للروابط الديناميكية" للوحة اللصق لنظام التشغيل 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). في حال اختبار رابط ديناميكي من حالة تطبيق تم إنهاؤه (أي تم إغلاق التطبيق بسرعة).