إنشاء روابط لصفحات معيّنة

يتيح لك الربط بصفحات معيّنة توجيه المستخدمين مباشرةً إلى تطبيقك من متصفّحات الويب والإشعارات ووسائل التواصل الاجتماعي والإعلانات والمصادر الأخرى. توفّر الروابط لصفحات معيّنة عمليات انتقال مباشرة من تطبيق إلى آخر ومن الويب إلى التطبيق، ما يساعدك في زيادة التفاعل من خلال المحتوى السياقي المستهدَف.

يوضّح هذا الدليل آلية عمل الربط العميق وكيفية إنشاء روابط عميقة في المحتوى الخاص بك واختبارها.

بالنسبة إلى الروابط لصفحات معيّنة التي تشير إلى موقعك الإلكتروني أو نطاقاتك، ننصحك باستخدام "روابط التطبيقات" التي توفّر تجربة سلسة وموثوقة للمستخدمين.

طريقة عمل الربط العميق

الربط العميق هو إمكانية عامة في نظام التشغيل Android، وهو متاح في جميع الإصدارات على جميع الأجهزة. ويستفيد من نظام Intents في Android لتوجيه الروابط لصفحات معيّنة إلى التطبيقات المعنيّة. تُعلن التطبيقات التي تريد معالجة معرّف موارد منتظم (URI) لرابط عميق معيّن عن فلتر Intent مطابق في ملفات بيان التطبيق.

عندما ينقر المستخدم على رابط أثناء وقت التشغيل، يشغّل Android intent ويحاول توجيهها إلى تطبيق. وبما أنّ تطبيقات متعددة يمكنها التعريف عن intent filters تتطابق مع معرّف موارد منتظم (URI) معيّن، يتّخذ Android هذه الإجراءات، بهذا الترتيب، لتوجيه الـ intent:

  1. فتح التطبيق التلقائي للمستخدم الذي يمكنه معالجة معرّف الموارد المنتظم (URI)، إذا تم تحديد تطبيق.
  2. فتح التطبيق الوحيد المتاح الذي يمكنه التعامل مع معرّف الموارد المنتظم (URI)
  3. السماح للمستخدم باختيار تطبيق من مربّع حوار توضيحي

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

يتيح مربّع حوار إزالة الغموض في Android للمستخدم الاطّلاع على جميع التطبيقات المثبّتة التي تم تسجيلها للتعامل مع رابط لصفحة معيّنة. يمكن للمستخدم أيضًا اختيار تطبيق كالتطبيق التلقائي لهذا النوع من الروابط. بعد أن يضبط المستخدم تطبيقًا تلقائيًا، لن يعرض النظام مربّع الحوار لهذا الغرض المحدّد، وسيتم فتح التطبيق الذي تم اختياره تلقائيًا.

مربّع حوار توضيحي في نظام Android يعرض خيارات التطبيقات لفتح رابط معيّن
الشكل 1. مربّع حوار إزالة الغموض

تغيّر سلوك مربّع حوار إزالة الغموض في إصدارات Android المختلفة. على سبيل المثال، في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، يتم فتح روابط الويب التي لم يتم التحقّق من صحتها في متصفّح الويب تلقائيًا، بينما في الإصدارات السابقة، قد يظهر مربّع حوار توضيحي إذا كان بإمكان التطبيق التعامل مع رابط الويب.

أنواع الروابط العميقة

هناك ثلاثة أنواع من الروابط العميقة التي يمكنك إتاحتها على Android:

  • الروابط العميقة المخصّصة: هي روابط عميقة تستخدم مخطّط URI مخصّصًا (مثل example://products/123) لنقل المستخدم مباشرةً إلى جزء معيّن من المحتوى داخل التطبيق. وهي فعّالة للتنقّل الداخلي أو الروابط من مصادر تتحكّم فيها، ولكنّها ليست روابط ويب عادية ويمكن أن تؤدي إلى ظهور مربّع حوار إزالة الغموض إذا سجّل تطبيق آخر المخطّط المخصّص نفسه.
  • روابط الويب: هي روابط لصفحات معيّنة تستخدم المخطّطَين العاديَين http وhttps. وهي أكثر تنوعًا لأنّها عناوين URL عادية، ولكن في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، ستؤدي دائمًا إلى ظهور مربّع حوار إزالة الغموض، ما يعني أنّه من المرجّح أن تتم معالجتها من خلال متصفّح الويب الخاص بالمستخدم تلقائيًا، بدلاً من توجيهها إلى تطبيقك.
  • روابط التطبيقات: تتوفّر منذ الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات)، وهي روابط ويب تم التحقّق منها. من خلال عملية ربط الموقع الإلكتروني، يمكنك إثبات لنظام Android أنّك تملك النطاق. بعد إثبات الملكية، يوجّه النظام تلقائيًا الروابط الخاصة بهذا النطاق إلى تطبيقك مباشرةً، ويتخطّى مربّع الحوار التوضيحي بالكامل. يوفّر ذلك تجربة موثوقة وسلسة للمستخدمين.

إضافة intent filters للروابط الواردة

لإنشاء رابط يؤدي إلى محتوى تطبيقك، أضِف intent filter يحتوي على هذه العناصر وقيم السمات في ملف البيان:

<action>

حدِّد الإجراء المطلوب من الهدف ACTION_VIEW لكي يتمكّن &quot;بحث Google&quot; من الوصول إلى فلتر الأهداف.

<data>

أضِف علامة <data> واحدة أو أكثر، بحيث تمثّل كل علامة تنسيق معرّف موارد منتظم (URI) يؤدي إلى النشاط. يجب أن تتضمّن العلامة <data> السمة android:scheme كحدّ أدنى.

يمكنك إضافة المزيد من السمات لتحسين نوع معرّف الموارد المنتظم (URI) الذي يقبله النشاط. على سبيل المثال، قد يكون لديك أنشطة متعددة تقبل معرّفات موارد منتظمة (URI) متشابهة، ولكنّها تختلف استنادًا إلى المسار. في هذه الحالة، استخدِم السمة android:path أو صيغها pathPattern أو pathPrefix للتمييز بين النشاط الذي يجب أن يفتحه النظام لمسارات معرّفات الموارد المنتظمة (URI) المختلفة.

<category>

يجب تضمين الفئة 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 نفسه، من المهم إنشاء فلاتر منفصلة عندما يكون هدفك هو الإعلان عن عناوين 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 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 على جهاز أو محاكي.

في ما يلي البنية العامة لاختبار intent filter 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)، يجب أيضًا أن تطلب من النظام التحقّق من هذا الربط. توضّح صفحة التحقّق من روابط التطبيقات كيفية تنفيذ عملية التحقّق هذه.

لمزيد من المعلومات عن الأهداف وروابط التطبيقات، يُرجى الاطّلاع على المراجع التالية: