احصل على روابط Firebase الديناميكية على Android

لتلقي روابط Firebase الديناميكية التي قمت بإنشائها ، يجب عليك تضمين Dynamic Links SDK في تطبيقك واستدعاء طريقة FirebaseDynamicLinks.getDynamicLink() عند تحميل تطبيقك للحصول على البيانات التي تم تمريرها في الارتباط الديناميكي.

  1. إذا لم تكن قد قمت بذلك بالفعل، فأضف Firebase إلى مشروع Android الخاص بك .

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

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

    للحصول على تجربة مثالية مع الروابط الديناميكية، نوصي بتمكين Google Analytics في مشروع Firebase الخاص بك وإضافة Firebase SDK لـ Google Analytics إلى تطبيقك.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.8.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:21.2.0'
        implementation 'com.google.firebase:firebase-analytics:21.6.1'
    }
    
    هل تبحث عن وحدة مكتبة خاصة بـ Kotlin؟ بدءًا من أكتوبر 2023 (Firebase BoM 32.5.0) ، يمكن لمطوري 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 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 (مستوى واجهة برمجة التطبيقات 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() في النشاط الذي أضفت إليه مرشح أهداف روابط التطبيقات (كما هو موضح في التعامل مع الروابط العميقة ).

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