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

الشكل 1: مربّع حوار إزالة الغموض
تطوّر سلوك مربّع حوار إزالة الغموض في إصدارات Android المختلفة. على سبيل المثال، في نظام التشغيل Android 12 والإصدارات الأحدث، سيتم بشكل عام فتح روابط الويب التي لم يتم التحقّق منها كروابط تطبيقات في متصفّح ويب تلقائيًا، بينما في الإصدارات السابقة، قد يظهر مربّع حوار توضيحي إذا كان بإمكان أحد التطبيقات التعامل مع رابط الويب.
ملاحظة: بدءًا من الإصدار 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) الذي يقبله النشاط. على سبيل المثال، قد يكون لديك أنشطة متعددة تقبل معرّفات موارد موحّدة متشابهة، ولكنها تختلف ببساطة استنادًا إلى اسم المسار. في هذه الحالة، استخدِم السمة
android:path أو أحد متغيراتها pathPattern أو pathPrefix لتحديد النشاط الذي يجب أن يفتحه النظام لمسارات URI المختلفة.
يجب تضمين الفئة BROWSABLE. وهو مطلوب لكي يتمكّن متصفّح الويب من الوصول إلى فلتر الأهداف. وبدونها، لا يمكن أن يؤدي النقر على رابط في المتصفّح إلى فتح تطبيقك.
يجب أيضًا تضمين الفئة DEFAULT. يتيح هذا الإذن لتطبيقك الاستجابة لرسائل Intent الضمنية. وبدون ذلك، لا يمكن بدء النشاط إلا إذا كان الغرض يحدّد اسم مكوّن تطبيقك.
يوضّح مقتطف XML التالي كيفية تحديد intent filter في البيان الخاص بك لتفعيل الروابط لصفحات معيّنة في التطبيق. يتم تحليل كل من معرّفَي الموارد الموحّدَين "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 تم التحقّق منه نفسه، لا يمكن ضمان النشاط الذي سيتولّى معالجة الرابط.
بعد إضافة فلاتر الأهداف التي تتضمّن معرّفات موارد منتظمة (URI) لمحتوى الأنشطة إلى ملف بيان التطبيق، سيتمكّن نظام التشغيل Android من توجيه أي Intent يتضمّن معرّفات موارد منتظمة مطابقة إلى تطبيقك في وقت التشغيل.
لمزيد من المعلومات حول تحديد فلاتر الأهداف، راجِع مقالة السماح للتطبيقات الأخرى ببدء نشاطك.
قراءة البيانات من الأهداف الواردة
بعد أن يبدأ النظام نشاطك من خلال 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>
على سبيل المثال، يحاول الأمر التالي عرض نشاط تطبيق مستهدف مرتبط بمعرّف الموارد الموحّد المحدّد.
$ 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"