קבלת קישורים דינמיים ב-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.0.1"))
    
        // 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 הזה כדי לטפל בקישור.

כדי לקבל את קישור העומק, צריך להפעיל את השיטה 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.

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

מוסיפים מסנן Intent עם אימות אוטומטי לפעילות שתטפל ב-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.