تلقّي "روابط Firebase الديناميكية" على نظام التشغيل Android

لتلقّي Firebase Dynamic Links التي أنشأتها، عليك تضمين حزمة تطوير البرامج (SDK) الخاصة بميزة Dynamic Links في تطبيقك واستدعاء طريقة 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 لخدمة "إحصاءات Google" إلى تطبيقك.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.12.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:23.2.0'
    }
  3. في وحدة تحكّم Firebase، افتح قسم Dynamic Links اقبَل بنود الخدمة إذا طُلب منك ذلك.

كما هو الحال مع الروابط لصفحات معيّنة العادية، عليك إضافة تعبير intent filter جديد إلى النشاط الذي يعالج الروابط لصفحات معيّنة في تطبيقك. يجب أن يرصد تعبير intent filter الروابط لصفحات معيّنة في نطاقك، لأنّ 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 filter هذا لمعالجة الرابط.

لتلقّي الرابط لصفحة معيّنة، استدعِ طريقة 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() في كل نشاط قد يتم تشغيله من خلال الرابط، حتى إذا كان الرابط متاحًا من الهدف باستخدام getIntent().getData(). يؤدي استدعاء طريقة getDynamicLink() إلى استرداد الرابط ومحو هذه البيانات حتى تتم معالجتها مرة واحدة فقط من قِبل تطبيقك.

عادةً ما تستدعي طريقة getDynamicLink() في النشاط الرئيسي بالإضافة إلى أي أنشطة يتم تشغيلها من خلال تعبيرات intent filter التي تتطابق مع الرابط.

تسجيل الإحصاءات

يمكن تتبُّع الأحداث التالية تلقائيًا في 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().

على الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأحدث، يمكنك إعداد تطبيقك لمعالجة Dynamic Links مباشرةً عندما يكون تطبيقك مثبّتًا باستخدام روابط تطبيقات Android.

تأكَّد من إضافة الملف المرجعي لشهادة SHA256 لتطبيقك إلى مشروعك في وحدة Firebase التحكّم. ستتولّى Dynamic Links إعداد ربط الموقع الإلكتروني بروابط التطبيقات لنطاق Dynamic Links الخاص بك.

أضِف تعبير intent filter تم التحقّق منه تلقائيًا إلى النشاط الذي سيتولّى معالجة 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، وليس على نطاق الرابط لصفحة معيّنة.

يجب تسجيل جميع تعبيرات intent filter التي تتضمّن autoVerify في البيان لكي تعمل روابط التطبيقات. يتولّى Firebase هذه العملية تلقائيًا لنطاقات Dynamic Links، ولكن يمكنك التحقّق من ذلك من خلال فتح ملف assetlinks.json المستضاف على نطاق Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
يجب تضمين أسماء حزم جميع تطبيقاتك على Firebase.

Dynamic Links سيتم الآن إرسالها مباشرةً إلى تطبيقك. وستتمكّن من الحصول على الرابط لصفحة معيّنة وبيانات Dynamic Link الأخرى من خلال استدعاء طريقة getDynamicLink() في النشاط الذي أضفت إليه تعبير intent filter لروابط التطبيقات (كما هو موضّح في معالجة الروابط لصفحات معيّنة).

ملاحظة: بما أنّ الاستدعاء من خلال روابط التطبيقات ينقل المستخدم مباشرةً إلى التطبيق، لا يمكن أن يلتزم "الرابط الديناميكي" بالحد الأدنى المطلوب للإصدار. لذلك، بعد فتح التطبيق، عليك مقارنة الحد الأدنى للإصدار في "الرابط الديناميكي" ( getminimumappversion) مع PackageInfo.versionCode وإعادة توجيه المستخدم لترقية التطبيق إذا لزم الأمر باستخدام getUpdateAppIntent.