קבלת קישורים דינמיים של Firebase באפליקציית Flutter

כדי לקבל את הקישורים הדינמיים ב-Firebase שיצרתם, צריך לכלול את ה-SDK של קישורים דינמיים באפליקציה ולקרוא השיטה FirebaseDynamicLinks.getDynamicLink() כשהאפליקציה נטענת ל- לקבל את הנתונים שהועברו בקישור הדינמי.

  1. מתקינים ומפעילים את Firebase SDKs for Flutter, אם עוד לא עשיתם זאת.

  2. בתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפלאגין של Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. אם אתם מפתחים אפליקציה ל-Android, פותחים את הדף Project settings במסוף Firebase ומוודאים שציינתם את מפתח החתימה מסוג SHA-1. אם משתמשים בקישורים לאפליקציות, צריך לציין גם את מפתח SHA-256.

שילוב פלטפורמה

מבצעים את השלבים הבאים לשילוב הפלטפורמות עבור הפלטפורמות שבהן אתם מפתחים את האפליקציה.

Android

ב-Android, צריך להוסיף מסנן חדש של כוונה (intent) כדי לזהות קישורי עומק של הדומיין, כי הקישור הדינמי יפנה לדומיין שלכם אם האפליקציה מותקנת. הפעולה הזו נדרשת כדי שהאפליקציה שלך תוכל לקבל את נתוני הקישור הדינמי אחרי שהם מתקינים או מעודכנים מחנות 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 הזה כדי לטפל בקישור.

השלב הבא הוא לוודא שטביעת האצבע SHA-256 של אישור החתימה רשומה במסוף Firebase לאפליקציה. מידע נוסף על אחזור טביעת האצבע מסוג SHA-256 זמין הדף אימות הלקוח.

פלטפורמות של Apple

  1. יצירת חשבון פיתוח ב-Apple אם עדיין אין לך חשבון.

  2. בקטע הגדרות הפרויקט במסוף Firebase, מוודאים שהאפליקציה ל-iOS תקינה שהוגדר באמצעות המזהה שלך ב-App Store ומזהה הצוות.

  3. באתר המפתחים של Apple, יוצרים פרופיל של ניהול הקצאות לאפליקציה. כשהאפשרות Associated Domain מופעלת.

  4. ב-Xcode, מבצעים את הפעולות הבאות:

    1. פותחים את האפליקציה בקטע TARGETS (יעדים).

    2. בדף Signing & Capabilities (חתימה ויכולות), מוודאים שהצוות רשום ושהפרופיל לניהול הקצאות הוגדר.

    3. בדף Signing & Capabilities, מפעילים את האפשרות Associated Domains ומוסיפים את הפרטים הבאים לרשימת 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. אופציונלי: משביתים את השימוש של ה-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);
}

רקע / מצב חזית

כשהאפליקציה פתוחה או פועלת ברקע, משתמשים ב-getter של 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.), אם בודקים קישור דינמי ממצב של אפליקציה שנסגרה (למשל, הוחלפה לגביה החלקה).