يمكنك إنشاء روابط ديناميكية قصيرة أو طويلة باستخدام واجهة برمجة التطبيقات Firebase Dynamic Links Builder API. تقبل واجهة برمجة التطبيقات هذه إما رابطًا ديناميكيًا طويلاً أو كائنًا يحتوي على معلمات رابط ديناميكي، وتعرض عناوين URL مثل الأمثلة التالية:
https://example.com/link/WXYZ https://example.page.link/WXYZ
إعداد Firebase وحزمة تطوير البرامج (SDK) للروابط الديناميكية
قبل أن تتمكن من إنشاء "روابط ديناميكية" في تطبيق Android، يجب تضمين حزمة تطوير البرامج (SDK) لنظام Firebase. إذا تم إعداد تطبيقك لتلقّي "الروابط الديناميكية"، يعني ذلك أنّك أكملت هذه الخطوات ويمكنك تخطّي هذا القسم.
أضِف Firebase إلى مشروع Android الخاص بك، إذا لم يسبق لك إجراء ذلك.
عند تسجيل تطبيقك، حدِّد مفتاح توقيع SHA-1. إذا كنت تستخدم "روابط التطبيقات"، حدِّد أيضًا مفتاح SHA-256.
-
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.kts
أو<project>/<app-module>/build.gradle
)، أضِف تبعية مكتبة "الروابط الديناميكية" لنظام التشغيل Android. ننصحك باستخدام برنامج Firebase Android BoM للتحكّم في إصدارات المكتبة.للحصول على أفضل تجربة باستخدام "الروابط الديناميكية"، ننصح بتفعيل "إحصاءات 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 BoM، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات 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' }
- في وحدة تحكُّم Firebase، افتح قسم الروابط الديناميكية.
-
إذا لم تكن قد قبلت بنود الخدمة واخترت نطاقًا للروابط الديناميكية، عليك إجراء ذلك عندما يُطلب منك ذلك.
إذا كان لديك نطاق "الروابط الديناميكية" بالفعل، فقم بتدوينه. يجب توفير نطاق "الروابط الديناميكية" عند إنشاء الروابط الديناميكية آليًا.
- إجراء مقترَح: تحديد أنماط عناوين 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); // ...
معلمات الرابط الديناميكي
يمكنك استخدام واجهة برمجة التطبيقات Dynamic Link Builder 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()
يمكنك ضبط معلمات الرابط الديناميكي بالطرق التالية:
معلمات الرابط الديناميكي | |
---|---|
ضبط الرابط |
الرابط الذي سيفتحه تطبيقك حدِّد عنوان 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 عندما لا يكون التطبيق مثبتًا، مثل فتح إصدار ويب من المحتوى على الأجهزة الجوّالة، أو عرض صفحة ترويجية لتطبيقك. |
أمر setCustomScheme | مخطط عنوان URL المخصص لتطبيقك، إذا تم تحديده ليكون مختلفًا عن معرّف حزمة التطبيق |
setIpadFallbackUrl | الرابط الذي يتم فتحه على أجهزة iPad عندما يكون التطبيق غير مثبَّت. حدِّد ذلك لتنفيذ إجراء آخر غير تثبيت تطبيقك من App Store عندما لا يكون التطبيق مثبتًا، مثل فتح إصدار الويب من المحتوى أو عرض صفحة ترويجية لتطبيقك. |
معرِّف setIpadBundle | معرِّف حزمة تطبيق iOS لاستخدامه على أجهزة iPad لفتح الرابط. يجب أن يكون التطبيق مرتبطًا بمشروعك من صفحة "نظرة عامة" في وحدة تحكُّم Firebase. |
تعيين الحد الأدنى | رقم إصدار الحد الأدنى من تطبيقك الذي يمكنه فتح الرابط. يتم تمرير هذه العلامة إلى تطبيقك عند فتحه، ويجب أن يحدّد تطبيقك ما يجب فعله باستخدامها. |
تفاصيل التنقل | |
---|---|
setForcedredirectEnabled | وفي حال ضبط السياسة على "1"، يمكنك تخطي صفحة معاينة التطبيق عند فتح الرابط الديناميكي، وإعادة التوجيه إلى التطبيق أو المتجر بدلاً من ذلك. يمكن لصفحة معاينة التطبيق (المفعّلة تلقائيًا) توجيه المستخدمين إلى الوجهة الأكثر ملاءمة بشكل أكثر موثوقية عند فتح "الروابط الديناميكية" في التطبيقات، ولكن إذا كنت تتوقع أن يتم فتح الرابط الديناميكي في التطبيقات التي يمكنها فتح "الروابط الديناميكية" بشكل موثوق بدون هذه الصفحة، يمكنك إيقافه باستخدام هذه المعلَمة. ستؤثر هذه المعلمة في سلوك الرابط الديناميكي على نظام التشغيل iOS فقط. |
مَعلمات SocialMetaTag | |
---|---|
setTitle | العنوان الذي سيتم استخدامه عند مشاركة الرابط الديناميكي في مشاركة على الشبكات الاجتماعية. |
setDescription | الوصف الذي سيتم استخدامه عند مشاركة الرابط الديناميكي في مشاركة على الشبكات الاجتماعية. |
setImageUrl | تمثّل هذه السمة عنوان URL لصورة ذات صلة بهذا الرابط. يجب ألا يقل حجم الصورة عن 300×200 بكسل، وأقل من 300 كيلوبايت. |
معلَمات "إحصاءات Google" | |
---|---|
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 // ... } } });