تتيح لك الروابط لمواضع معيّنة توجيه المستخدمين إلى تطبيقك مباشرةً من متصفّحات الويب والإشعارات ووسائل التواصل الاجتماعي والإعلانات والمصادر الأخرى. توفّر الروابط لمواضع معيّنة عمليات انتقال مباشرة من تطبيق إلى آخر ومن الويب إلى التطبيق، ما يمكن أن يساعدك في زيادة التفاعل من خلال محتوى سياقي ومستهدَف.
يوضّح هذا الدليل طريقة عمل الروابط لمواضع معيّنة وكيفية إنشائها واختبارها لتوجيه المستخدمين إلى المحتوى الخاص بك.
بالنسبة إلى الروابط لمواضع معيّنة التي تشير إلى موقعك الإلكتروني أو نطاقاتك، ننصحك باستخدام روابط التطبيقات التي توفّر تجربة سلسة وموثوق بها للمستخدمين.
طريقة عمل الروابط لمواضع معيّنة
الربط بموضع معيّن هو إمكانية عامة في نظام Android، وهي متاحة على جميع الإصدارات وجميع الأجهزة. تستفيد هذه الإمكانية من نظام الأهداف في Android لتوجيه الروابط لمواضع معيّنة إلى التطبيقات المهتمة. تعلن التطبيقات التي تريد التعامل مع معرّف موارد منتظم (URI) معيّن لرابط عميق عن intent filter مطابق في ملفات بيان التطبيق.
أثناء وقت التشغيل، عندما ينقر المستخدم على رابط، يفعِّل Android هدفًا ويحاول توجيهه إلى تطبيق. بما أنّ تطبيقات متعدّدة يمكنها الإعلان عن فلاتر أهداف تطابق معرّف موارد منتظم (URI) معيّنًا، يتّخذ Android الإجراءات التالية بهذا الترتيب لتوجيه الهدف:
- فتح التطبيق التلقائي للمستخدم الذي يمكنه التعامل مع معرّف الموارد المنتظم (URI)، إذا تم تحديد تطبيق.
- فتح التطبيق الوحيد المتاح الذي يمكنه التعامل مع معرّف الموارد المنتظم (URI).
- السماح للمستخدم باختيار تطبيق من مربّع حوار توضيحي.
يعني ذلك أنّه حتى إذا كانت فلاتر الأهداف تطابق معرّف موارد منتظم (URI) معيّنًا، ليس هناك ما يضمن أن يوجّه النظام هدف الرابط لموضع معيّن إلى تطبيقك. يؤدي المستخدم دورًا رئيسيًا في إدارة التطبيق الذي يتعامل مع الهدف، ما يمنحه التحكّم ويوفر له خيارات. لمزيد من التحكّم في الروابط لمواضع معيّنة التي تؤدي إلى موقعك الإلكتروني ونطاقاتك، جرِّب استخدام روابط التطبيقات.
يتيح مربّع الحوار التوضيحي في Android للمستخدم الاطّلاع على جميع التطبيقات المثبّتة التي تم تسجيلها للتعامل مع هدف رابط لموضع معيّن. يمكن للمستخدم أيضًا اختيار تطبيق كإعداد تلقائي لهذا النوع من الروابط. بعد أن يضبط المستخدم إعدادًا تلقائيًا، لن يعرِض النظام مربّع الحوار لهذا الهدف المحدّد، وسيتم فتح التطبيق الذي تم اختياره تلقائيًا.
تطوّر سلوك مربّع الحوار التوضيحي في إصدارات Android المختلفة. على سبيل المثال، في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، ستفتح روابط الويب التي لم يتم التحقّق منها كروابط تطبيقات بشكلٍ عام في متصفّح ويب تلقائيًا، بينما في الإصدارات السابقة، قد يظهر مربّع حوار توضيحي إذا كان بإمكان أحد التطبيقات التعامل مع رابط الويب.
أنواع الروابط لموضع معيّن
تتوفّر ثلاثة أنواع من الروابط لموضع معيّن يمكنك إتاحتها على 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> متعدّدة في الفلتر نفسه، من المهم إنشاء فلاتر منفصلة عندما يكون هدفك هو الإعلان عن عناوين 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.
بعد إضافة فلاتر أهداف تحتوي على معرّفات موارد منتظمة (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) لـ intent filter التي حدّدتها للربط العميق تؤدي إلى نشاط التطبيق الصحيح. يمكنك تنفيذ أمر 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
بدءًا من الإصدار 17 من نظام التشغيل Android، يمكنك أيضًا استخدام العلامة --debug-link مع am start لتشخيص كيفية حلّ النظام عنوان URL وفحص فلاتر الأهداف المطابقة أو قواعد روابط التطبيقات الديناميكية. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة
تشخيص عملية حلّ الروابط باستخدام العلامة debug-link.
يحدّد بيان التطبيق ومعالج الأهداف اللذان تضبطهما العلاقة بين تطبيقك وموقع إلكتروني وما يجب فعله بالروابط الواردة. ومع ذلك، لكي يعامل النظام تطبيقك كمعالج تلقائي لمجموعة من معرّفات الموارد المنتظمة (URI)، عليك أيضًا أن تطلب من النظام التحقّق من هذه العلاقة. توثيق روابط التطبيقات يوضح كيفية تنفيذ هذا التحقق.
لمزيد من المعلومات عن الأهداف وروابط التطبيقات، يُرجى الاطّلاع على المراجع التالية:
- الأهداف وفلاتر الأهداف
- السماح للتطبيقات الأخرى ببدء نشاطك
- إضافة روابط Android App Links باستخدام "استوديو Android"