تتيح لك الروابط لصفحات معيّنة نقل المستخدمين إلى تطبيقك مباشرةً من متصفّحات الويب والإشعارات ووسائل التواصل الاجتماعي والإعلانات والمصادر الأخرى. توفّر الروابط لصفحات معيّنة عمليات انتقال مباشرة من تطبيق إلى آخر ومن الويب إلى التطبيق، ما يمكن أن يساعدك في زيادة التفاعل من خلال محتوى سياقي ومستهدَف.
يوضّح هذا الدليل طريقة عمل الروابط لصفحات معيّنة وكيفية إنشائها واختبارها للانتقال إلى المحتوى الخاص بك.
بالنسبة إلى الروابط لصفحات معيّنة التي تشير إلى موقعك الإلكتروني أو نطاقاتك، ننصحك باستخدام روابط التطبيقات التي توفّر تجربة سلسة وموثوق بها للمستخدمين.
طريقة عمل الروابط لصفحات معيّنة
الربط بصفحة معيّنة هو إمكانية عامة في نظام Android، وهي متاحة في جميع الإصدارات وجميع الأجهزة. تستفيد هذه الإمكانية من نظام الأهداف في Android لتوجيه الروابط لصفحات معيّنة إلى التطبيقات المعنيّة. تعلن التطبيقات التي تريد التعامل مع معرّف موارد منتظم (URI) معيّن لصفحة معيّنة عن intent filter مطابق في ملفات بيان التطبيق.
أثناء وقت التشغيل، عندما ينقر المستخدم على رابط، يفعِّل Android هدفًا ويحاول توجيهه إلى تطبيق. بما أنّ تطبيقات متعدّدة يمكنها الإعلان عن فلاتر أهداف تطابق معرّف موارد منتظم (URI) معيّنًا، يتّخذ Android الإجراءات التالية بهذا الترتيب لتوجيه الهدف:
- فتح التطبيق التلقائي للمستخدم الذي يمكنه التعامل مع معرّف الموارد المنتظم (URI)، إذا تم تحديد تطبيق.
- فتح التطبيق الوحيد المتاح الذي يمكنه التعامل مع معرّف الموارد المنتظم (URI).
- السماح للمستخدم باختيار تطبيق من مربّع حوار توضيحي.
يعني ذلك أنّه حتى إذا كانت فلاتر الأهداف تطابق معرّف موارد منتظم (URI) معيّنًا، ليس هناك ما يضمن أن يوجّه النظام هدف الرابط لصفحة معيّنة إلى تطبيقك. يؤدي المستخدم دورًا رئيسيًا في إدارة التطبيق الذي يتعامل مع الهدف، ما يمنحه التحكّم ويوفر له خيارات. للحصول على مزيد من التحكّم في الروابط لصفحات معيّنة التي تؤدي إلى موقعك الإلكتروني ونطاقاتك، جرِّب استخدام روابط التطبيقات.
يتيح مربّع الحوار التوضيحي في Android للمستخدم الاطّلاع على جميع التطبيقات المثبّتة التي تم تسجيلها للتعامل مع هدف رابط لصفحة معيّنة. يمكن للمستخدم أيضًا اختيار تطبيق كإعداد تلقائي لهذا النوع من الروابط. بعد أن يضبط المستخدم إعدادًا تلقائيًا، لن يعُد النظام يعرض مربّع الحوار لهذا الهدف المحدّد، وسيتم فتح التطبيق الذي تم اختياره تلقائيًا.

الشكل 1: مربّع الحوار التوضيحي
تطوّر سلوك مربّع الحوار التوضيحي في إصدارات Android المختلفة. على سبيل المثال، في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، ستفتح روابط الويب التي لم يتم التحقّق منها كروابط تطبيقات بشكلٍ عام في متصفّح ويب تلقائيًا، بينما في الإصدارات السابقة، قد يظهر مربّع حوار توضيحي إذا كان بإمكان أحد التطبيقات التعامل مع رابط الويب.
ملاحظة: بدءًا من الإصدار 12 من نظام التشغيل Android (المستوى 31 من واجهة برمجة التطبيقات)، لا يتم حلّ هدف ويب عام إلا إذا كان تطبيقك معتمَدًا للنطاق المحدّد الذي يتضمّنه هدف الويب هذا. إذا لم يكن تطبيقك معتمَدًا للنطاق، يتم حلّ هدف الويب إلى تطبيق المتصفّح التلقائي للمستخدم بدلاً من ذلك.
أنواع الروابط لصفحات معيّنة
هناك ثلاثة أنواع من الروابط لصفحات معيّنة يمكنك إتاحتها على Android:
- الروابط العميقة المخصّصة: هي روابط عميقة تستخدم نظام معرّف موارد منتظم (URI) مخصّصًا (مثل
example://products/123) لنقل المستخدم مباشرةً إلى جزء معيّن من المحتوى داخل تطبيق. وتكون هذه الروابط فعّالة للتنقّل الداخلي أو الروابط من المصادر التي تتحكّم فيها، ولكنّها ليست روابط ويب عادية ويمكن أن تؤدي إلى ظهور مربّع الحوار التوضيحي إذا سجّل تطبيق آخر نظامًا مخصّصًا نفسه. - روابط الويب: هي روابط لصفحات معيّنة تستخدم نظامَي
httpوhttpsالعاديَين. تكون هذه الروابط أكثر تنوّعًا لأنّها عناوين URL عادية، ولكنّها ستؤدي دائمًا تقريبًا إلى ظهور مربّع الحوار التوضيحي في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، ما يعني أنّه من المرجّح أن يتعامل معها متصفّح الويب الخاص بالمستخدم تلقائيًا بدلاً من توجيهها إلى تطبيقك. - روابط التطبيقات: هي روابط ويب تم التحقّق منها، وهي متاحة منذ الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات). من خلال عملية ربط الموقع الإلكتروني، يمكنك إثبات ملكية النطاق لنظام Android. بعد التحقّق من ذلك، يوجّه النظام تلقائيًا الروابط لهذا النطاق إلى تطبيقك مباشرةً، ويتخطّى مربّع الحوار التوضيحي بالكامل. يؤدي ذلك إلى توفير تجربة موثوق بها وسلسة للمستخدمين.
إضافة فلاتر أهداف للروابط الواردة
لإنشاء رابط يؤدي إلى محتوى تطبيقك، أضِف intent filter يحتوي على هذه العناصر وقيم السمات في البيان:
حدِّد إجراء الهدف ACTION_VIEW حتى يمكن الوصول إلى فلتر الأهداف من
"بحث Google".
أضِف علامة <data> واحدة أو أكثر، تمثّل كل منها تنسيق معرّف موارد منتظم (URI) يؤدي إلى النشاط. يجب أن تتضمّن علامة <data> على الأقل السمة
android:scheme.
يمكنك إضافة المزيد من السمات لزيادة تحسين نوع معرّف الموارد المنتظم (URI) الذي يقبله النشاط. على سبيل المثال، قد يكون لديك أنشطة متعدّدة تقبل معرّفات موارد منتظمة (URI) مشابهة، ولكنّها تختلف ببساطة استنادًا إلى اسم المسار. في هذه الحالة، استخدِم السمة
android:path أو صيغتَيها pathPattern أو pathPrefix للتمييز بين النشاط الذي يجب أن يفتحه النظام لمسارات معرّف الموارد المنتظم (URI) المختلفة.
أدرِج الفئة BROWSABLE. هذه الفئة مطلوبة حتى يمكن الوصول إلى فلتر الأهداف من متصفّح ويب. بدون هذه الفئة، لا يمكن أن يؤدي النقر على رابط في متصفّح إلى فتح تطبيقك.
أدرِج أيضًا الفئة DEFAULT. يسمح ذلك لتطبيقك بالردّ على الأهداف الضمنية. بدون هذه الفئة، لا يمكن بدء النشاط إلا إذا كان الهدف يحدّد اسم مكوّن تطبيقك.
يوضّح مقتطف XML التالي كيفية تحديد intent filter في البيان للربط بصفحة معيّنة. يؤدي كلٌّ من معرّفَي الموارد المنتظمَين (URI) "example://gizmos" و
"http://www.example.com/gizmos" إلى هذا النشاط.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
لاحظ أنّ فلترَي الأهداف يختلفان فقط في عنصر <data>. على الرغم من أنّه من الممكن تضمين عناصر <data> متعدّدة في intent filter نفسه، من المهم إنشاء intent filters منفصلة عندما يكون هدفك هو التعريف عن عناوين URL فريدة (مثل مجموعة محدّدة من scheme وhost)، لأنّه يتم دمج عناصر <data> المتعدّدة في intent filter نفسه معًا لمراعاة جميع الاختلافات في سماتها المدمَجة. على سبيل المثال، يمكنك إجراء ما يلي:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
قد يبدو أنّ هذا الإجراء لا يتيح سوى https://www.example.com وapp://open.my.app. ومع ذلك، فهو يتيح هذين العنوانَين، بالإضافة إلى ما يلي: app://www.example.com وhttps://open.my.app.
تنبيه: إذا كانت أنشطة متعدّدة تحتوي على فلاتر أهداف تؤدي إلى رابط Android App Link نفسه الذي تم التحقّق منه، ليس هناك ما يضمن النشاط الذي سيتعامل مع الرابط.
بعد إضافة فلاتر أهداف تتضمّن معرّفات موارد منتظمة (URI) لمحتوى النشاط إلى بيان تطبيقك
، سيتمكّن Android من توجيه أي Intent يحتوي على معرّفات موارد منتظمة (URI) مطابقة إلى
تطبيقك أثناء وقت التشغيل.
لمزيد من المعلومات عن تحديد فلاتر الأهداف، يُرجى الاطّلاع على مقالة السماح للتطبيقات الأخرى ببدء نشاطك.
قراءة البيانات من الأهداف الواردة
بعد أن يبدأ النظام نشاطك من خلال intent filter، يمكنك استخدام البيانات التي يقدّمها Intent لتحديد ما عليك عرضه. استخدِم الطريقتَين
getData() وgetAction() لاسترداد البيانات و
الإجراء المرتبطَين بـ Intent الوارد. يمكنك استخدام هاتَين الطريقتَين
في أي وقت خلال دورة حياة النشاط، ولكن عليك بشكلٍ عام استخدامها
أثناء عمليات معاودة الاتصال المبكرة، مثل onCreate() أو onStart.
في ما يلي مقتطف يوضّح كيفية استرداد البيانات من Intent:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
اتّبِع أفضل الممارسات التالية لتحسين تجربة المستخدم:
- يجب أن ينقل الرابط لصفحة معيّنة المستخدمين إلى المحتوى مباشرةً، بدون أي طلبات أو صفحات بينية أو عمليات تسجيل دخول. تأكَّد من أنّ المستخدمين يمكنهم الاطّلاع على محتوى التطبيق حتى إذا لم يسبق لهم فتحه. لا بأس في مطالبة المستخدمين بإجراءات لاحقة أو عندما يفتحون التطبيق من مشغّل التطبيقات.
- اتّبِع إرشادات التصميم الموضّحة في مقالة التنقّل باستخدام الزرَّين "رجوع" و"أعلى" لكي يتطابق تطبيقك مع توقّعات المستخدمين بشأن التنقّل للخلف بعد الدخول إلى تطبيقك من خلال رابط لصفحة معيّنة.
اختبار الروابط لصفحات معيّنة
يمكنك استخدام Android Debug Bridge مع أداة مدير الأنشطة (am) لاختبار ما إذا كانت معرّفات الموارد المنتظمة (URI) لفلتر الأهداف التي حدّدتها للربط العميق تؤدي إلى نشاط التطبيق الصحيح. يمكنك تنفيذ أمر adb على جهاز أو محاكي.
بشكلٍ عام، يكون البناء الأساسي لاختبار معرّف موارد منتظم (URI) لفلتر الأهداف باستخدام Adb على النحو التالي:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
على سبيل المثال، يحاول الأمر التالي عرض نشاط تطبيق مستهدَف مرتبط بمعرّف الموارد المنتظم (URI) المحدّد.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
ملاحظة: عند تحديد مجموعة من الأنواع الأساسية في مسار، مثل
**@Serializable data class Product(val colors: List)**، يكون تنسيق عنوان URL للرابط لصفحة معيّنة الذي يتم إنشاؤه تلقائيًا هو **basePath?colors={value**}. إذا حاولت
تحديد معرّف موارد منتظم (URI) يتضمّن مَعلمات طلب بحث متعدّدة (على سبيل المثال،
**basepath?colors=red&colors=blue**)، عليك إلغاء تأثير رمز العطف اللاتيني
(على سبيل المثال، **basepath?colors=red\&colors=blue**).
يحدّد بيان التطبيق ومعالج الأهداف اللذان تضبطهما العلاقة بين تطبيقك وموقع إلكتروني وما يجب فعله بالروابط الواردة. ومع ذلك، لكي يعامل النظام تطبيقك كمعالج تلقائي لمجموعة من معرّفات الموارد المنتظمة (URI)، عليك أيضًا أن تطلب من النظام التحقّق من هذا الربط. توثيق روابط التطبيقات يوضح كيفية تنفيذ هذا التحقق.
لمزيد من المعلومات عن الأهداف وروابط التطبيقات، يُرجى الاطّلاع على المراجع التالية:
- الأهداف وفلاتر الأهداف
- السماح للتطبيقات الأخرى ببدء نشاطك
- إضافة روابط Android App Links باستخدام "استوديو Android"