קבלת קישורים דינמיים ב-Firebase ב-Android

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

  1. אם עדיין לא הוספתם את Firebase לפרויקט Android, אתם צריכים להוסיף אותו.

    כשרושמים את האפליקציה, צריך לציין את מפתח החתימה SHA-1. אם משתמשים בקישורים לאפליקציות, צריך לציין גם את מפתח ה-SHA-256.

  2. בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle), מוסיפים את התלות בספריית Dynamic Links ל-Android. מומלץ להשתמש ב-Firebase Android BoM כדי לשלוט בניהול גרסאות של הספרייה.

    כדי ליהנות מחוויית שימוש אופטימלית ב-Dynamic Links, מומלץ להפעיל את Google Analytics בפרויקט Firebase ולהוסיף לאפליקציה את Firebase SDK for Google Analytics.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:35.1.0"))
    
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links'
        implementation 'com.google.firebase:firebase-analytics'
    }

    כשמשתמשים ב-Firebase Android BoM, האפליקציה תמיד משתמשת בגרסאות תואמות של ספריות Firebase ל-Android.

    (אפשרות חלופית)  מוסיפים תלות של הפרויקט בספריות של Firebase בלי להשתמש ב-BoM

    אם אתם בוחרים לא להשתמש ב-Firebase BoM, אתם צריכים לציין כל גרסה של ספריית Firebase בשורת התלות שלה.

    שימו לב: אם אתם משתמשים בכמה ספריות של Firebase באפליקציה, מומלץ מאוד להשתמש ב-BoM כדי לנהל את גרסאות הספרייה, וכך לוודא שכל הגרסאות תואמות.

    dependencies {
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links:22.1.0'
        implementation 'com.google.firebase:firebase-analytics:24.0.0'
    }
  3. במסוף Firebase, פותחים את הקטע Dynamic Links. אם מוצגת בקשה לאשר את התנאים וההגבלות, מאשרים אותם.

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

כשמשתמשים פותחים Dynamic Link עם קישור עומק לסכימה ולמארח שציינת, האפליקציה תתחיל את הפעילות עם מסנן ה-Intent הזה כדי לטפל בקישור.

כדי לקבל את קישור העומק, מפעילים את ה-method‏ getDynamicLink():

Kotlin

Firebase.dynamicLinks
    .getDynamicLink(intent)
    .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
        // Get deep link from result (may be null if no link is found)
        var deepLink: Uri? = null
        if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.link
        }

        // Handle the deep link. For example, open the linked
        // content, or apply promotional credit to the user's
        // account.
        // ...
    }
    .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }


                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

צריך להפעיל את getDynamicLink() בכל פעילות שהקישור עשוי להפעיל, למרות שהקישור עשוי להיות זמין מה-Intent באמצעות getIntent().getData(). קריאה ל-getDynamicLink() מאחזרת את הקישור ומנקה את הנתונים האלה, כך שהאפליקציה מעבדת אותם רק פעם אחת.

בדרך כלל, קוראים ל-getDynamicLink() בפעילות הראשית וגם בכל פעילות שמופעלת על ידי מסנני Intent שתואמים לקישור.

ניתוח נתונים של רשומות

אפשר לעקוב באופן אוטומטי אחרי האירועים הבאים ב-Google Analytics ולהציג אותם במסוף Firebase.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

כדי לרשום את האירועים האלה, צריך להגדיר את Google Analytics לפני שאחזור של קישור העומק. צריך לוודא שהתנאים הבאים מתקיימים:

  • מפעילים את FirebaseDynamicLinks.getDynamicLink() בנקודות הכניסה של האפליקציה:
    • פעילויות במרכז האפליקציות, למשל: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • נקודות כניסה לפעילות. לדוגמה: onStart(), onCreate().
    • פעילויות של קישורי עומק.
  • הגדרה ושימוש ב-Google Analytics:
    • כוללים את התלות Google Analytics. בדרך כלל, הפלאגין google-services Gradle מוסיף את זה באופן אוטומטי.
    • כוללים את קובץ התצורה google-services.json באפליקציה.
    • צריך להפעיל את FirebaseAnalytics.getInstance() לפני שמפעילים את FirebaseDynamicLinks.getDynamicLink().

ב-Android 6.0 (רמת API‏ 23) ומעלה, אפשר להגדיר את האפליקציה כך שתטפל ב-Dynamic Links ישירות כשהאפליקציה כבר מותקנת, באמצעות Android App Links.

מוודאים שהוספתם את טביעת האצבע לאישור SHA256 של האפליקציה לפרויקט במסוף Firebase. ‫Dynamic Links יטפל בהגדרת השיוך של האתר לקישורים לאפליקציה בדומיין Dynamic Links.

מוסיפים מסנן Intent עם אימות אוטומטי ל-Activity שתטפל ב-Dynamic Link, ומגדירים את המארח לדומיין Dynamic Links של הפרויקט, כפי שמופיע במסוף Firebase. בAndroidManifest.xml:

<intent-filter android:autoVerify="true">
    <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/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

שימו לב שצריך להגדיר את android:host לדומיין של Dynamic Links, ולא לדומיין של קישור העומק.

כדי להפעיל את הקישורים לאפליקציה, צריך לרשום את כל autoVerify מסנני ה-Intent במניפסט. ‫Firebase מטפל בזה באופן אוטומטי בדומיינים של Dynamic Links, אבל אפשר לבדוק את זה על ידי פתיחת הקובץ assetlinks.json שמתארח בדומיין של Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
צריך לכלול את כל שמות החבילות של האפליקציות ב-Firebase.

‫Dynamic Links יישלח עכשיו ישירות לאפליקציה. אפשר יהיה לקבל את קישור העומק ונתונים אחרים של Dynamic Link על ידי קריאה ל-getDynamicLink() ב-Activity שהוספת לה את מסנן ה-Intent של קישורי העומק לאפליקציה (כפי שמתואר בקטע טיפול בקישורי עומק).

הערה: מכיוון שהפעלה דרך קישורים לאפליקציה מעבירה את המשתמש ישירות לאפליקציה, קישור דינמי לא יכול לעמוד בדרישה של גרסת המינימום. לכן, אחרי שהאפליקציה נפתחת, צריך להשוות בין גרסת המינימום של הקישור הדינמי (getminimumappversion) לבין PackageInfo.versionCode, ולהפנות את המשתמש לשדרוג האפליקציה אם צריך באמצעות getUpdateAppIntent.