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

"روابط التطبيقات" هي روابط مؤدية إلى صفحات في التطبيق تستخدم مخطط HTTP أو HTTPS ويتأكّد نظام التشغيل Android من أنّها مرتبطة بموقعك الإلكتروني. للتسجيل لمعالجة روابط التطبيقات، اتّبِع الخطوات التالية:

  1. أضِف فلتر هدف واحدًا أو أكثر إلى بيان التطبيق لتحديد نطاق موقعك الإلكتروني أو عناوين URL.
  2. أضِف autoVerify="true"attribute إلى عناصر فلتر الأهداف. يشير ذلك إلى النظام بأنّه يجب محاولة إثبات صحة المخطط والنطاقات المضيفة استنادًا إلى إعدادات assetlinks.json في موقعك الإلكتروني.
  3. تحديد عمليات الربط بالمواقع الإلكترونية

في ما يلي مثال على بيان App Link يتضمّن المخططات والمضيفين بالإضافة إلى autoVerify="true":

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- Make sure you explicitly set android:autoVerify to "true". -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- If a user clicks on a link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

النقاط الرئيسية حول الرمز

  • AutoVerify: السمة android:autoVerify="true" مطلوبة لروابط التطبيقات. ويشير إلى النظام بأنّه يجب محاولة التحقّق من الربط بين تطبيقك والمخططات والنطاقات المحدّدة في علامات <data>. يُنصح بإضافة autoVerify="true إلى كل فلتر Intent تريد أن يكون قابلاً للتحقّق.
  • عناصر البيانات: يجب أن يتضمّن كل فلتر أهداف لروابط التطبيقات عنصرًا واحدًا أو أكثر من عناصر <data> التي تحدّد المخططات وتنسيقات المضيف التي تتطابق مع نطاق موقعك الإلكتروني القابل للإثبات.
  • المخططات: يجب أن يتضمّن فلتر intent عناصر <data> لكل من المخططَين http وhttps.
  • المضيفون: يمكنك اختياريًا إضافة عناصر <data> لتتطابق مع مضيف واحد أو أكثر. استخدِم حرف بدل (*) لمطابقة نطاقات فرعية متعددة (مثل *.example.com). سيحاول النظام التحقّق من كل مضيف باستخدام ملف assetlinks.json على موقعك الإلكتروني. يُرجى العِلم أنّه يجب أن يتولّى ملف assetlinks.json معالجة أي توجيه على مستوى المسار (راجِع قسم أفضل الممارسات أدناه).

  • مضيفات متعددة: إذا أعلنت عن نطاقات مضيفات متعددة، سيحاول النظام (على الإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث) إثبات صحة كل نطاق. إذا تم إثبات ملكية أي مضيف، سيصبح التطبيق هو المعالج التلقائي للروابط من هذا المضيف الذي تم إثبات ملكيته. في نظام التشغيل Android 11 والإصدارات الأقدم، يتعذّر إكمال عملية التحقّق إذا تعذّر التحقّق من مضيف واحد على الأقل.

  • فلاتر Intent المتعددة: من المهم إنشاء فلاتر منفصلة عندما يكون هدفك هو تعريف عناوين URL فريدة (مثل مجموعة معيّنة من المخطط والمضيف)، لأنّه يتم دمج عناصر <data> المتعددة في فلتر Intent نفسه معًا لاحتساب جميع أشكال سماتها المدمجة.

اعتبارات لقواعد فلترة البيان

إذا كنت بصدد إعداد فلاتر لاستخدامها مع "روابط التطبيق الديناميكية" في نظام التشغيل Android 15 والإصدارات الأحدث، من المهم تذكُّر أنّ القواعد الديناميكية المحدّدة في ملف assetlinks.json على الخادم لا يمكنها توسيع نطاق قواعد عناوين URL التي تحدّدها بشكل ثابت في بيان تطبيقك.

لهذا السبب، ننصحك باتّباع هذا النهج:

  • في بيان التطبيق، اضبط النطاق الأوسع قدر الإمكان، مثلاً من خلال تحديد المخطط والنطاق فقط
  • الاعتماد على قواعد ملف assetlinks.json من جهة الخادم لإجراء المزيد من التحسينات، مثل التوجيه على مستوى المسار

باستخدام هذا الإعداد المثالي، ستتمكّن من إضافة مسارات جديدة لروابط التطبيق بشكل ديناميكي في الملف assetlinks.json حسب الحاجة، مع العلم أنّها ستندرج ضمن النطاق الواسع الذي حدّدته في بيان التطبيق.

إتاحة روابط التطبيقات لمضيفين متعدّدين

يجب أن يتمكّن النظام من التحقّق من المضيف المحدّد في عناصر بيانات فلاتر intent الخاصة بعنوان URL للتطبيق، وذلك من خلال مقارنتها بملفات Digital Asset Links المستضافة على نطاقات الويب المعنية في فلتر intent هذا. وفي حال تعذُّر إثبات الملكية، سيعود النظام إلى سلوكه العادي لحلّ الغرض، كما هو موضّح في مقالة إنشاء روابط لصفحات معيّنة في محتوى التطبيق. ومع ذلك، سيظل بإمكانك إثبات ملكية التطبيق كمعالج تلقائي لأي من أنماط عناوين URL المحدّدة في فلاتر intent الأخرى الخاصة بالتطبيق.

على سبيل المثال، سيجتاز تطبيق يتضمّن فلاتر الأهداف التالية عملية التحقّق فقط بالنسبة إلى https://www.example.com إذا تم العثور على ملف assetlinks.json في https://www.example.com/.well-known/assetlinks.json وليس https://www.example.net/.well-known/assetlinks.json:

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name="SecondActivity">
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

إتاحة ربط التطبيق بنطاقات فرعية متعددة

يتعامل بروتوكول Digital Asset Links مع النطاقات الفرعية في فلاتر الأهداف على أنّها مضيفات فريدة ومنفصلة. لذلك، إذا كانت قائمة فلتر الأهداف تتضمّن مضيفين متعدّدين بنطاقات فرعية مختلفة، عليك نشر ملف assetlinks.json صالح على كل نطاق. على سبيل المثال، يتضمّن فلتر الأهداف التالي www.example.com وmobile.example.com كمضيفَين مقبولَين لعنوان URL الخاص بالأهداف. لذلك، يجب نشر assetlinks.json صالح في كل من https://www.example.com/.well-known/assetlinks.json وhttps://mobile.example.com/.well-known/assetlinks.json.

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

بدلاً من ذلك، إذا أعلنت عن اسم المضيف باستخدام حرف بدل (مثل *.example.com)، عليك نشر ملف assetlinks.json في اسم المضيف الجذر (example.com). على سبيل المثال، سيتجاوز تطبيق يتضمّن فلتر الأهداف التالي عملية التحقّق لأي اسم فرعي من example.com (مثل foo.example.com) طالما تم نشر ملف assetlinks.json في https://example.com/.well-known/assetlinks.json:

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

التحقّق من وجود تطبيقات متعدّدة مرتبطة بالنطاق نفسه

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

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