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

لتلقي روابط Firebase الديناميكية التي أنشأتها، يجب تضمين حزمة SDK للروابط الديناميكية في تطبيقك وطلب طريقة FirebaseDynamicLinks.getDynamicLink() عند تحميل تطبيقك من أجل تمرير البيانات في الرابط الديناميكي.

  1. أضِف Firebase إلى مشروع Android إذا لم يسبق لك إجراء ذلك.

    عند تسجيل تطبيقك، حدِّد مفتاح توقيع SHA-1. إذا كنت تستخدم روابط التطبيقات، حدِّد أيضًا مفتاح SHA-256.

  2. في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً <project>/<app-module>/build.gradle.kts أو <project>/<app-module>/build.gradle)، أضِف الاعتمادية لمكتبة "الروابط الديناميكية" لنظام التشغيل Android. ننصح باستخدام بنود سياسة Android في Firebase للتحكّم في نُسَخ المكتبة.

    للحصول على أفضل تجربة لاستخدام الروابط الديناميكية، نقترح عليك تفعيل "إحصاءات Google" في مشروع Firebase وإضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصّة بخدمة "إحصاءات Google" إلى تطبيقك.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.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'
    }
    

    باستخدام أداة إدارة قوائم التشغيل Android في Firebase، سيستخدم تطبيقك دائمًا الإصدارات المتوافقة من مكتبات Android في Firebase.

    (بديل) إضافة ملحقات مكتبة Firebase بدون استخدام BoM

    إذا اخترت عدم استخدام قائمة العناصر في Firebase، يجب تحديد كل إصدار من مكتبة 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.0.2'
    }
    
    هل تبحث عن وحدة مكتبة خاصة بلغة Kotlin؟ اعتبارًا من تشرين الأول (أكتوبر) 2023 (الإصدار 32.5.0 من Firebase)، أصبح بإمكان مطوّري لغة Kotlin وJava الاعتماد على وحدة المكتبة الرئيسية (لمعرفة التفاصيل، يُرجى الاطّلاع على الأسئلة الشائعة حول هذه المبادرة).
  3. في وحدة تحكُّم Firebase، افتح قسم الروابط الديناميكية. اقبل بنود الخدمة إذا طُلب منك ذلك.

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

عندما يفتح المستخدمون رابطًا ديناميكيًا يحتوي على رابط لموضع معيّن في المخطط والمضيف الذي تحدّده، سيبدأ تطبيقك النشاط باستخدام فلتر الأهداف هذا لمعالجة الرابط.

للحصول على رابط الصفحة في التطبيق، يمكنك استدعاء طريقة getDynamicLink():

Kotlin+KTX

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" وعرضها في "وحدة تحكُّم Firebase".

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

لتسجيل هذه الأحداث، عليك ضبط "إحصاءات Google" قبل استرداد الرابط لصفحة في التطبيق. تحقَّق من استيفاء الشروط التالية:

  • الاتصال بـ FirebaseDynamicLinks.getDynamicLink() في نقاط الدخول الخاصة بالتطبيق:
    • أنشطة مشغّل التطبيقات، مثل: action="android.intent.action.MAIN"، category="android.intent.category.LAUNCHER".
    • نقاط دخول الأنشطة، مثل: onStart()، onCreate().
    • أنشطة الروابط لصفحات في التطبيق
  • إعداد "إحصاءات Google" واستخدامها:
    • يجب تضمين اعتمادية "إحصاءات Google". وتتم عادةً إضافة هذه البيانات تلقائيًا باستخدام مكوّن Gradle الإضافي google-services.
    • أدرِج ملف الإعداد google-services.json في تطبيقك.
    • اتصِل بالرقم FirebaseAnalytics.getInstance() قبل الاتصال بـ FirebaseDynamicLinks.getDynamicLink().

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

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

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

يجب تسجيل جميع فلاتر الأهداف autoVerify في البيان كي يتم تفعيل ميزة "روابط التطبيق". يتعامل Firebase مع هذا تلقائيًا لنطاقات الروابط الديناميكية، ولكن يمكنك التحقق من ذلك عن طريق فتح ملف assetlinks.json المستضاف على نطاق الروابط الديناميكية:

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

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

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