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

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

  1. התקן ואתחל את ערכות ה-SDK של Firebase עבור Flutter אם עדיין לא עשית זאת.

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

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

אינטגרציה של פלטפורמה

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

דְמוּי אָדָם

באנדרואיד, עליך להוסיף מסנן כוונות חדש לתפוס קישורים עמוקים של הדומיין שלך, מכיוון שהקישור הדינמי יפנה מחדש לדומיין שלך אם האפליקציה שלך מותקנת. זה נדרש כדי שהאפליקציה שלך תקבל את נתוני הקישור הדינמי לאחר התקנתה/עדכון מחנות 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, צור פרופיל אספקה ​​עבור האפליקציה שלך עם יכולת ה-Associated Domain מופעלת.

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

    1. פתח את האפליקציה שלך מתחת לכותרת TARGETS .

    2. בדף חתימה ויכולות, ודא שהצוות שלך רשום ושפרופיל ההקצאה שלך מוגדר.

    3. בדף 'חתימה ויכולות', הפעל דומיינים משויכים והוסף את הדברים הבאים לרשימת הדומיינים המשויכים (החלף את הדוגמה בדומיין שלך):

      applinks:example.page.link
      
    4. בדף המידע, הוסף סוג כתובת URL לפרויקט שלך. הגדר את השדה 'סכימות URL' למזהה החבילה של האפליקציה שלך. (המזהה יכול להיות Bundle ID או מה שתרצה.)

    5. אם הגדרת תחום מותאם אישית עבור פרויקט Firebase שלך, הוסף את קידומת כתובת האתר של קישור דינמי לקובץ 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 של Dynamic Links משתמש בלוח ההדבקה כדי לשפר את האמינות של קישורי עומק לאחר ההתקנה. על ידי שימוש בלוח ההדבקה, Dynamic Links יכולים לוודא שכאשר משתמש פותח קישור דינמי אך צריך להתקין תחילה את האפליקציה שלך, המשתמש יכול לעבור מיד לתוכן המקושר המקורי בעת פתיחת האפליקציה בפעם הראשונה לאחר ההתקנה.

      החיסרון של זה הוא שהשימוש בלוח הדבק מפעיל התראה ב-iOS 14 ואילך. לכן, בפעם הראשונה שמשתמשים פותחים את האפליקציה שלך, אם הלוח מכיל כתובת אתר של קישור דינמי, הם יראו הודעה שהאפליקציה שלך ניגשה ללוח, מה שעלול לגרום לבלבול.

      כדי להשבית התנהגות זו, ערוך את הקובץ Info.plist של פרויקט Xcode שלך ​​והגדר את מקש FirebaseDeepLinkPasteboardRetrievalEnabled למצב NO .

כדי לטפל בקישור דינמי באפליקציה שלך, שני תרחישים דורשים יישום.

מדינה שהופסקה

הגדר את השיטות הבאות:

  1. FirebaseDynamicLinks.getInitialLink - מחזיר Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink - מטפל באירועים שמחזיר Stream המכיל PendingDynamicLinkData?

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