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

عندما يستدعي رابط تم النقر عليه أو طلب آلي هدف معرف موارد منتظم (URI) للويب، فسيعمل نظام Android محاولة تنفيذ كل إجراء من الإجراءات التالية بترتيب تسلسلي، إلى أن يتم نجاح الطلب:

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

اتّبِع الخطوات التالية لإنشاء روابط مؤدية إلى المحتوى الخاص بك واختبارها. يمكنك أيضًا استخدام صفحة مساعد روابط التطبيقات في "استوديو Android" لإضافة عناصر جديدة روابط تطبيقات Android.

ملاحظة: بدءًا من Android 12 (المستوى 31)، ستظهر لا يتم التعامل مع Web intent في نشاط في تطبيقك إلا إذا تمت الموافقة على تطبيقك النطاق المحدد الوارد في هدف الويب هذا. إذا لم تتم الموافقة على تطبيقك للنطاق، سيتم تحويل نية الويب إلى تطبيق المتصفّح التلقائي للمستخدم بدلاً من ذلك.

إضافة فلاتر الأهداف للروابط الواردة

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

<action>
حدِّد الإجراء المطلوب من الهدف ACTION_VIEW لكي تتمكّن من الوصول إلى فلتر الأهداف من "بحث Google".
<data>
أضِف علامة <data> واحدة أو أكثر، يمثّل كلّ منها تنسيق عنوان URL يؤدي إلى النشاط. على الأقل، يجب أن تتضمّن علامة <data> android:scheme .

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

<category>
تضمين BROWSABLE . وهذا الإجراء مطلوب لإتاحة الوصول إلى فلتر الأهداف من أحد المواقع الإلكترونية. المتصفح. بدونها، لا يمكن أن يؤدي النقر على رابط في متصفّح إلى توجيهك إلى تطبيقك.

يجب أيضًا تضمين فئة DEFAULT. يسمح ذلك لتطبيقك بالاستجابة للأغراض الضمنية. بدون ذلك، لا يمكن بدء النشاط إلا إذا كان العنصر intent يحدّد اسم مكوّن تطبيقك.

يوضِّح مقتطف XML التالي كيفية تحديد فلتر أهداف. في ملف البيان للربط بصفحة معيّنة. يُحيل كلا عنوانَي URL “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 الذي تم التحقّق منه نفسه، لا يمكن ضمان النشاط الذي يعالج الرابط.

بعد إضافة فلاتر الأهداف التي تحتوي على معرّفات الموارد المنتظمة لمحتوى النشاط إلى ملف манифест تطبيقك، يمكن لنظام التشغيل 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 الربط بأداة مدير النشاط (am) لاختبار فلتر الأهداف إنّ معرّفات الموارد المنتظمة (URI) التي حدّدتها للربط بصفحات معيّنة تتحوّل إلى النشاط الصحيح على التطبيق. يمكنك تنفيذ الأمر adb على جهاز أو محاكي.

بناء الجملة العام لاختبار عنوان URL الخاص بفلتر الأهداف باستخدام adb هو:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

على سبيل المثال، يحاول الأمر أدناه عرض نشاط تطبيق مستهدَف يكون مرتبطًا بعنوان URL المحدّد.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

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

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