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

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

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.7.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:22.1.2'
    }
    هل تبحث عن وحدة مكتبة خاصة بلغة Kotlin؟ اعتبارًا من تشرين الأول (أكتوبر) 2023 (Firebase BoM 32.5.0)، يمكن لمطوّري Kotlin وJava الاعتماد على وحدة المكتبة الرئيسية (للاطّلاع على التفاصيل، راجِع الأسئلة الشائعة حول هذه المبادرة).
  3. في وحدة تحكّم Firebase، افتح قسم Dynamic Links. اقبل بنود الخدمة إذا طُلب منك ذلك.

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

لتلقّي الرابط لصفحة في التطبيق، يمكنك استدعاء طريقة 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() في النشاط الرئيسي، بالإضافة إلى أي أنشطة يتم تشغيلها بواسطة فلاتر الأهداف التي تتطابق مع الرابط.

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

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

أضِف فلتر أهداف تم إثبات ملكيته تلقائيًا إلى "النشاط" الذي سيعالج 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 في بيان التطبيق لكي تعمل روابط التطبيقات. تعالج Firebase هذا الأمر تلقائيًا لنطاقات Dynamic Links، ولكن يمكنك التحقّق من ذلك من خلال فتح ملف assetlinks.json المستضاف على نطاق Dynamic Links:

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

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

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