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

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

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

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

  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.2"))
    
        // 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 BoM) من 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 BoM)، بإمكان مطوّري برامج Kotlin وJava تعتمد على وحدة المكتبة الرئيسية (لمزيد من التفاصيل، راجع الأسئلة الشائعة حول هذه المبادرة).
  3. في "وحدة تحكُّم Firebase"، افتح قسم الروابط الديناميكية.
  4. في حال عدم قبول بنود الخدمة وتحديد نطاق من قبل للروابط الديناميكية، عليك إجراء ذلك عندما يُطلب منك ذلك.

    إذا كان لديك نطاق "الروابط الديناميكية" من قبل، دوّنه. عليك إجراء ما يلي: توفير نطاق روابط ديناميكية عند إنشاء روابط ديناميكية آليًا.

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

استخدام "وحدة تحكُّم Firebase"

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

لإنشاء رابط ديناميكي، يمكنك إنشاء عنصر DynamicLink جديد باستخدام أداة إنشاء تُحدِّد مَعلمات الرابط الديناميكي باستخدام طرق أداة إنشاء النماذج. ثم اتصل 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.component1 and
    // com.google.firebase.dynamiclinks.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 حرفًا جعل من غير المرجح جدًا أن يتمكن أحد الأشخاص من تخمين رابط ديناميكي صالح. إذا، لـ في حالة الاستخدام، فلن يكون هناك ضرر من تخمين شخص ما بنجاح لرابط قصير، قد تفضل إنشاء لاحقات طالما كان ذلك ضروريًا فقط فريدة، والتي يمكنك تنفيذها من خلال تمرير ShortDynamicLink.Suffix.SHORT إلى طريقة buildShortDynamicLink:

Kotlin+KTX

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

Java

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

يمكنك استخدام واجهة برمجة تطبيقات أداة إنشاء الروابط الديناميكية لإنشاء روابط ديناميكية باستخدام أي من والمعلمات المدعومة. يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات للاطّلاع على التفاصيل.

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

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()

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

مَعلمات Dynamic Link
تعيين الرابط

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

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

لتقصير رابط ديناميكي طويل، حدِّد عنوان URL للرابط الديناميكي باستخدام setLongLink بدلاً من ضبط معلَمات باستخدام أداة الإنشاء الأخرى الطرق:

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.component1 and
    // com.google.firebase.dynamiclinks.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
                    // ...
                }
            }
        });