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

الشكل 1: مربّع حوار إزالة الغموض
تطوّر سلوك مربّع حوار إزالة الغموض في إصدارات Android المختلفة. على سبيل المثال، في نظام التشغيل Android 12 والإصدارات الأحدث، سيتم بشكل عام فتح روابط الويب التي لم يتم التحقّق منها على أنّها روابط تطبيقات في متصفّح ويب تلقائيًا، بينما في الإصدارات السابقة، قد يظهر مربّع حوار توضيحي إذا كان بإمكان أحد التطبيقات التعامل مع رابط الويب.
ملاحظة: بدءًا من الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات)، لا يتم تنفيذ أي غرض عام على الويب إلا إذا تمت الموافقة على تطبيقك للنطاق المحدّد الذي يتضمّنه هذا الغرض. إذا لم تتم الموافقة على تطبيقك للنطاق، سيتم بدلاً من ذلك توجيه المستخدم إلى تطبيق المتصفّح التلقائي.
أنواع الروابط لصفحات معيّنة
تتوفّر ثلاثة أنواع من الروابط لصفحات معيّنة يمكنك إتاحتها على Android:
- الروابط المخصّصة لصفحات في التطبيق: هي روابط لصفحات في التطبيق تستخدم مخطط معرّف موارد منتظم (URI) مخصّصًا (مثل
example://products/123) لنقل المستخدم مباشرةً إلى جزء معيّن من المحتوى داخل التطبيق. وهي فعّالة للتنقّل الداخلي أو الروابط من المصادر التي تتحكّم فيها، ولكنّها ليست روابط ويب عادية ويمكن أن تؤدي إلى ظهور مربّع الحوار الخاص بإزالة الغموض إذا سجّل تطبيق آخر المخطط المخصّص نفسه. - روابط الويب: هي روابط لصفحات في التطبيق تستخدم المخططَين العاديَين
httpوhttps. وهي أكثر تنوعًا لأنّها عناوين URL عادية، ولكن في نظام التشغيل Android 12 والإصدارات الأحدث، ستؤدي دائمًا تقريبًا إلى ظهور مربّع الحوار الخاص بإزالة الغموض، ما يعني أنّه من المرجّح أن يتعامل متصفّح الويب الخاص بالمستخدم معها تلقائيًا، بدلاً من توجيهها إلى تطبيقك. - روابط التطبيق: تتوفّر هذه الروابط منذ الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات)، وهي روابط ويب تم التحقّق منها. من خلال عملية ربط الموقع الإلكتروني، يمكنك إثبات ملكيتك للنطاق لنظام Android. وبعد إثبات الملكية، يوجّه النظام تلقائيًا الروابط الخاصة بهذا النطاق إلى تطبيقك مباشرةً، بدون عرض مربّع الحوار التوضيحي. يؤدي ذلك إلى توفير تجربة موثوقة وسلسة للمستخدمين.
إضافة فلاتر الأهداف للروابط الواردة
لإنشاء رابط إلى محتوى تطبيقك، أضِف فلتر أهداف يحتوي على هذه العناصر وقيم السمات في ملف البيان:
حدِّد إجراء الهدف ACTION_VIEW حتى يمكن الوصول إلى فلتر الأهداف من "بحث Google".
أضِف علامة واحدة أو أكثر من علامات <data>، ويمثّل كل منها تنسيق معرّف موارد موحّد (URI) يؤدي إلى النشاط. يجب أن تتضمّن علامة <data> السمة android:scheme على الأقل.
يمكنك إضافة المزيد من السمات لتحديد نوع معرّف الموارد المنتظم (URI) الذي يقبله النشاط. على سبيل المثال، قد يكون لديك أنشطة متعددة تقبل معرّفات URI متشابهة، ولكنها تختلف ببساطة استنادًا إلى اسم المسار. في هذه الحالة، استخدِم السمة android:path أو أحد متغيراتها pathPattern أو pathPrefix لتحديد النشاط الذي يجب أن يفتحه النظام لمسارات URI المختلفة.
يجب تضمين الفئة BROWSABLE. وهو مطلوب لكي يتمكّن متصفّح الويب من الوصول إلى فلتر الأهداف. وبدونها، لا يمكن أن يؤدي النقر على رابط في المتصفّح إلى فتح تطبيقك.
يجب أيضًا تضمين الفئة DEFAULT. يسمح هذا الإذن لتطبيقك بالرد على
رسائل Intent الضمنية. وبدون ذلك، لا يمكن بدء النشاط إلا إذا حدّد الغرض اسم مكوّن تطبيقك.
يوضّح مقتطف XML التالي كيفية تحديد فلتر أهداف في البيان الخاص بك لتفعيل الروابط لصفحات معيّنة في التطبيق. يتم تحليل كل من معرّفَي الموارد الموحّدَين "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> متعددة في الفلتر نفسه، من المهم إنشاء فلاتر منفصلة عندما يكون هدفك هو تعريف عناوين URL فريدة (مثل مجموعة معيّنة من scheme وhost)، لأنّه يتم في الواقع دمج عناصر <data> المتعددة في فلتر الأهداف نفسه معًا لاحتساب جميع أشكال سماتها المدمجة. على سبيل المثال، إليك ما يلي:
<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 تم التحقّق منه نفسه، لا يمكن ضمان النشاط الذي سيتولّى معالجة الرابط.
بعد إضافة فلاتر الأهداف التي تتضمّن معرّفات موارد منتظمة (URI) لمحتوى النشاط إلى ملف بيان التطبيق، سيتمكّن نظام التشغيل Android من توجيه أي Intent يتضمّن معرّفات موارد منتظمة مطابقة إلى تطبيقك في وقت التشغيل.
لمزيد من المعلومات حول تحديد فلاتر الأهداف، راجِع مقالة السماح للتطبيقات الأخرى ببدء نشاطك.
قراءة البيانات من الأهداف الواردة
بعد أن يبدأ النظام نشاطك من خلال فلتر الأهداف، يمكنك استخدام البيانات التي يوفّرها 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>
على سبيل المثال، يحاول الأمر التالي عرض نشاط تطبيق مستهدف مرتبط بمعرّف الموارد الموحّد المحدّد.
$ 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"