כדי לקבל את הקישורים הדינמיים של Firebase שיצרתם, אתם צריכים לכלול את Dynamic Links SDK באפליקציה שלכם ולהפעיל את השיטה FirebaseDynamicLinks.getDynamicLink()
כשהאפליקציה נטענת כדי לקבל את הנתונים שמועברים בקישור הדינמי.
הגדרה של Firebase ושל ה-SDK של הקישורים הדינמיים
מתקינים ומפעילים את Firebase SDKs for Flutter, אם עוד לא עשיתם זאת.
מתיקיית השורש של פרויקט Flutter, מריצים את הפקודה הבאה כדי להתקין את הפלאגין Dynamic Links:
flutter pub add firebase_dynamic_links
אם אתם מפתחים אפליקציית 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>
כשהמשתמשים פותחים קישור דינמי עם קישור עומק לסכימה ולמארח שציינתם, האפליקציה שלכם תתחיל את הפעילות עם מסנן הכוונות הזה כדי לטפל בקישור.
השלב הבא הוא לוודא שטביעת האצבע מסוג SHA-256 של אישור החתימה רשומה במסוף Firebase עבור האפליקציה. פרטים נוספים על אחזור טביעת האצבע מסוג SHA-256 זמינים בדף אימות הלקוח.
פלטפורמות של אפל
אם עדיין אין לכם חשבון, יוצרים חשבון מפתח של אפל.
בדף Project settings (הגדרות הפרויקט) במסוף Firebase, מוודאים שהאפליקציה ל-iOS מוגדרת בצורה נכונה עם מזהה App Store ומזהה צוות.
באתר Apple Developer, יוצרים פרופיל הקצאת הרשאות לאפליקציה עם יכולת Associated Domain מופעלת.
ב-Xcode, מבצעים את הפעולות הבאות:
פותחים את האפליקציה בכותרת TARGETS (יעדים).
בדף 'חתימה ויכולות', מוודאים שהצוות רשום ושהוגדר פרופיל הקצאת ההרשאות.
בדף Signing & Capabilities (חתימה ויכולות), מפעילים את Associated Domains (דומיינים משויכים) ומוסיפים את הדומיין שלכם לרשימת הדומיינים המשויכים (מחליפים את הדוגמה בדומיין שלכם):
applinks:example.page.link
בדף המידע, מוסיפים סוג כתובת URL לפרויקט. מגדירים את השדה URL Schemes (סכימות של כתובות URL) למזהה החבילה של האפליקציה. (המזהה יכול להיות
Bundle ID
או כל דבר אחר שרוצים).אם הגדרתם דומיין בהתאמה אישית לפרויקט 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>
אופציונלי: השבתה של השימוש בלוח ההדבקה של iOS ב-Dynamic Links SDK.
כברירת מחדל, Dynamic Links SDK משתמש בלוח ההדבקה כדי לשפר את המהימנות של קישורי עומק אחרי התקנה. באמצעות לוח ההדבקה, קישורים דינמיים יכולים לוודא שכאשר משתמש פותח קישור דינמי אבל צריך להתקין קודם את האפליקציה שלכם, הוא יוכל לעבור מיד לתוכן המקושר המקורי כשהוא יפתח את האפליקציה בפעם הראשונה אחרי ההתקנה.
החיסרון הוא שהשימוש בלוח ההדבקה מפעיל התראה ב-iOS מגרסה 14 ואילך. לכן, בפעם הראשונה שמשתמשים פותחים את האפליקציה, אם לוח ההדבקה מכיל כתובת URL של קישור דינמי, הם יראו הודעה שהאפליקציה ניגשה ללוח ההדבקה, וזה עלול לגרום לבלבול.
כדי להשבית את ההתנהגות הזו, צריך לערוך את הקובץ
Info.plist
של פרויקט Xcode ולהגדיר את המפתחFirebaseDeepLinkPasteboardRetrievalEnabled
לערךNO
.
טיפול בקישורי עומק
כדי לטפל בקישור דינמי באפליקציה, צריך להטמיע שני תרחישים.
מצב סיום
מגדירים את השיטות הבאות:
-
FirebaseDynamicLinks.getInitialLink
– מחזירהFuture<PendingDynamicLinkData?>
-
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
כדי לבדוק קישור דינמי ב-iOS, צריך להשתמש במכשיר אמיתי. בנוסף, אם בודקים קישור דינמי ממצב אפליקציה שהופסק (כלומר, האפליקציה נסגרה על ידי החלקה), צריך להריץ את האפליקציה במצב הפצה (כלומר, flutter run --release
.).