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