了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

قم بإنشاء روابط ديناميكية على Android

يمكنك إنشاء روابط ديناميكية قصيرة أو طويلة باستخدام Firebase Dynamic Links Builder API. تقبل واجهة برمجة التطبيقات هذه إما ارتباطًا ديناميكيًا طويلاً أو كائنًا يحتوي على معلمات الارتباط الديناميكي ، وتعرض عناوين URL مثل الأمثلة التالية:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

قبل أن تتمكن من إنشاء روابط ديناميكية في تطبيق Android ، يجب عليك تضمين Firebase SDK. إذا تم إعداد التطبيق الخاص بك لتلقي الروابط الديناميكية ، فقد أكملت بالفعل هذه الخطوات ويمكنك تخطي هذا القسم.

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

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

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

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

    Kotlin+KTX

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

    باستخدام 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-ktx:21.1.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0'
    }
    

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:32.1.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.1.0'
        implementation 'com.google.firebase:firebase-analytics:21.3.0'
    }
    
  3. في وحدة تحكم Firebase ، افتح قسم الروابط الديناميكية .
  4. إذا لم تكن قد وافقت بالفعل على شروط الخدمة وقمت بتعيين مجال للروابط الديناميكية الخاصة بك ، فافعل ذلك عندما يُطلب منك ذلك.

    إذا كان لديك بالفعل مجال روابط ديناميكية ، فقم بتدوين ذلك. تحتاج إلى توفير مجال ارتباطات ديناميكية عند إنشاء روابط ديناميكية برمجيًا.

  5. موصى به : حدد أنماط عناوين URL المسموح بها في روابطك الداخلية والروابط الاحتياطية. من خلال القيام بذلك ، فإنك تمنع الأطراف غير المصرح لها من إنشاء روابط ديناميكية تعيد التوجيه من نطاقك إلى مواقع لا تتحكم فيها. راجع السماح بأنماط URL معينة .

استخدم وحدة تحكم Firebase

إذا كنت ترغب في إنشاء رابط ديناميكي واحد ، إما لأغراض الاختبار ، أو لفريق التسويق الخاص بك لإنشاء رابط يمكن استخدامه بسهولة في شيء مثل منشور على وسائل التواصل الاجتماعي ، فإن أبسط طريقة هي زيارة وحدة تحكم Firebase وإنشاء واحد يدويًا باتباع النموذج خطوة بخطوة.

لإنشاء ارتباط ديناميكي ، قم بإنشاء كائن DynamicLink جديد باستخدام منشئه ، مع تحديد معلمات الارتباط الديناميكي باستخدام أساليب Builder. ثم قم باستدعاء buildDynamicLink أو buildShortDynamicLink .

يُنشئ المثال الأدنى التالي رابطًا ديناميكيًا طويلاً إلى https://www.example.com/ يفتح مع تطبيق Android على Android والتطبيق com.example.ios على iOS:

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Open links with this app on Android
    androidParameters { }
    // Open links with com.example.ios on iOS
    iosParameters("com.example.ios") { }
}

val dynamicLinkUri = dynamicLink.uri

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Open links with this app on Android
        .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
        // Open links with com.example.ios on iOS
        .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build())
        .buildDynamicLink();

Uri dynamicLinkUri = dynamicLink.getUri();

لإنشاء ارتباط ديناميكي قصير ، قم ببناء DynamicLink بنفس الطريقة ، ثم قم باستدعاء buildShortDynamicLink . يتطلب إنشاء ارتباط قصير اتصالاً بالشبكة ، لذا بدلاً من إرجاع الارتباط مباشرةً ، يقوم buildShortDynamicLink بإرجاع Task ، مما يجعل الارتباط القصير متاحًا عند اكتمال الطلب. على سبيل المثال:

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Set parameters
    // ...
}.addOnSuccessListener { (shortLink, flowchartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

    // Short link created
    processShortLink(shortLink, flowchartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Set parameters
        // ...
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });

بشكل افتراضي ، يتم إنشاء روابط ديناميكية قصيرة مع لواحق ارتباط مكونة من 17 حرفًا مما يجعل من غير المحتمل للغاية أن يتمكن أي شخص من تخمين ارتباط ديناميكي صالح. إذا لم يكن هناك ضرر ، بالنسبة لحالة الاستخدام الخاصة بك ، في قيام شخص ما بتخمين ارتباط قصير بنجاح ، فقد تفضل إنشاء لاحقات طالما كانت ضرورية لتكون فريدة ، وهو ما يمكنك القيام به عن طريق buildShortDynamicLink ShortDynamicLink.Suffix.SHORT . :

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
    // Set parameters
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        // ...
        .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
        // ...

يمكنك استخدام Dynamic Link Builder API لإنشاء روابط ديناميكية مع أي من المعلمات المدعومة. راجع مرجع API للحصول على التفاصيل.

ينشئ المثال التالي ارتباطًا ديناميكيًا مع مجموعة معلمات شائعة متعددة:

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink { // or Firebase.dynamicLinks.shortLinkAsync
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    androidParameters("com.example.android") {
        minimumVersion = 125
    }
    iosParameters("com.example.ios") {
        appStoreId = "123456789"
        minimumVersion = "1.0.1"
    }
    googleAnalyticsParameters {
        source = "orkut"
        medium = "social"
        campaign = "example-promo"
    }
    itunesConnectAnalyticsParameters {
        providerToken = "123456"
        campaignToken = "example-promo"
    }
    socialMetaTagParameters {
        title = "Example of a Dynamic Link"
        description = "This link works whether the app is installed or not!"
    }
}

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        .setAndroidParameters(
                new DynamicLink.AndroidParameters.Builder("com.example.android")
                        .setMinimumVersion(125)
                        .build())
        .setIosParameters(
                new DynamicLink.IosParameters.Builder("com.example.ios")
                        .setAppStoreId("123456789")
                        .setMinimumVersion("1.0.1")
                        .build())
        .setGoogleAnalyticsParameters(
                new DynamicLink.GoogleAnalyticsParameters.Builder()
                        .setSource("orkut")
                        .setMedium("social")
                        .setCampaign("example-promo")
                        .build())
        .setItunesConnectAnalyticsParameters(
                new DynamicLink.ItunesConnectAnalyticsParameters.Builder()
                        .setProviderToken("123456")
                        .setCampaignToken("example-promo")
                        .build())
        .setSocialMetaTagParameters(
                new DynamicLink.SocialMetaTagParameters.Builder()
                        .setTitle("Example of a Dynamic Link")
                        .setDescription("This link works whether the app is installed or not!")
                        .build())
        .buildDynamicLink();  // Or buildShortDynamicLink()

يمكنك تعيين معلمات الارتباط الديناميكي بالطرق التالية:

معلمات DynamicLink
setLink

الرابط الذي سيفتحه تطبيقك. حدد عنوان URL يمكن لتطبيقك التعامل معه ، عادةً ما يكون محتوى التطبيق أو حمولته ، والذي يبدأ منطقًا خاصًا بالتطبيق (مثل منح المستخدم قسيمة أو عرض شاشة ترحيب). يجب أن يكون هذا الارتباط عبارة عن عنوان URL جيد التنسيق ، وأن يكون مشفرًا بعنوان URL بشكل صحيح ، ويستخدم إما HTTP أو HTTPS ، ولا يمكن أن يكون رابطًا ديناميكيًا آخر.

setDomainUriPrefix بادئة عنوان URL للرابط الديناميكي ، والتي يمكنك العثور عليها في وحدة تحكم Firebase. يشبه مجال الارتباط الديناميكي الأمثلة التالية:
https://example.com/link
https://example.page.link
Android المعلمات
setFallbackUrl الرابط الذي سيتم فتحه عند عدم تثبيت التطبيق. حدد هذا للقيام بشيء آخر غير تثبيت التطبيق الخاص بك من متجر Play عندما لا يتم تثبيت التطبيق ، مثل فتح إصدار الويب للجوال من المحتوى ، أو عرض صفحة ترويجية لتطبيقك.
setMinimumVersion versionCode لأدنى إصدار من تطبيقك يمكنه فتح الرابط. إذا كان التطبيق المثبت إصدارًا أقدم ، فسيتم نقل المستخدم إلى متجر Play لترقية التطبيق.
IosParameters
setAppStoreId معرّف App Store لتطبيقك ، يُستخدم لإرسال المستخدمين إلى App Store عندما لا يكون التطبيق مثبتًا
setFallbackUrl الرابط الذي سيتم فتحه عند عدم تثبيت التطبيق. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا ، مثل فتح إصدار الويب للجوال من المحتوى ، أو عرض صفحة ترويجية لتطبيقك.
setCustomScheme مخطط عنوان URL المخصص لتطبيقك ، إذا تم تعريفه على أنه شيء آخر غير معرّف حزمة تطبيقك
setIpadFallbackUrl الرابط الذي سيتم فتحه على أجهزة iPad في حالة عدم تثبيت التطبيق. حدد هذا للقيام بشيء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا ، مثل فتح إصدار الويب للمحتوى ، أو عرض صفحة ترويجية لتطبيقك.
setIpadBundleId معرّف حزمة تطبيق iOS المراد استخدامه على أجهزة iPad لفتح الرابط. يجب أن يكون التطبيق متصلاً بمشروعك من صفحة "نظرة عامة" بوحدة تحكم Firebase.
setMinimumVersion رقم إصدار أقل إصدار لتطبيقك يمكنه فتح الرابط. يتم تمرير هذه العلامة إلى تطبيقك عند فتحه ، ويجب أن يقرر التطبيق ما يجب فعله به.
NavigationInfoParameters
setForcedRedirectEnabled إذا تم التعيين على "1" ، فتخط صفحة معاينة التطبيق عند فتح الرابط الديناميكي ، وبدلاً من ذلك أعد التوجيه إلى التطبيق أو المتجر. يمكن لصفحة معاينة التطبيق (التي يتم تمكينها افتراضيًا) إرسال المستخدمين بشكل أكثر موثوقية إلى الوجهة الأكثر ملاءمة عند فتح الروابط الديناميكية في التطبيقات ؛ ومع ذلك ، إذا كنت تتوقع أن يتم فتح الرابط الديناميكي فقط في التطبيقات التي يمكنها فتح الروابط الديناميكية بشكل موثوق بدون هذه الصفحة ، فيمكنك تعطيله باستخدام هذه المعلمة. ستؤثر هذه المعلمة على سلوك الرابط الديناميكي فقط على نظام iOS.
SocialMetaTagParameters
تعيين العنوان العنوان المراد استخدامه عند مشاركة الرابط الديناميكي في منشور اجتماعي.
وصف المجموعة الوصف المطلوب استخدامه عند مشاركة الرابط الديناميكي في منشور اجتماعي.
setImageUrl عنوان URL لصورة مرتبطة بهذا الارتباط. يجب أن تكون الصورة 300 × 200 بكسل على الأقل ، وأقل من 300 كيلوبايت.
GoogleAnalyticsParameters
setSource
تعيينمتوسط
setCampaign
setTerm
setContent
معلمات تحليلات Google Play. يتم تمرير هذه المعلمات ( utm_source ، utm_medium ، utm_campaign ، utm_term ، utm_content ) إلى متجر Play بالإضافة إلى إلحاقها بحمولة الرابط.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
معلمات تحليلات iTunes Connect. يتم تمرير هذه المعلمات ( pt ، at ، ct ) إلى متجر التطبيقات.

لتقصير ارتباط ديناميكي طويل ، حدد عنوان URL للرابط الديناميكي باستخدام setLongLink بدلاً من تعيين المعلمات باستخدام طرق Builder الأخرى:

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    longLink = Uri.parse(
        "https://example.page.link/?link=" +
            "https://www.example.com/&apn=com.example.android&ibn=com.example.ios",
    )
}.addOnSuccessListener { (shortLink, flowChartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

    // Short link created
    processShortLink(shortLink, flowChartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });