ضبط التسليم المشروط

يتيح لك "التسليم المشروط" تحديد متطلبات معينة لإعداد الجهاز لتنزيل وحدات الميزات تلقائيًا أثناء تثبيت التطبيق. على سبيل المثال، يمكنك ضبط وحدة من الميزات تتضمّن وظائف للواقع المعزّز (AR) لتكون متاحة عند تثبيت التطبيق للأجهزة التي تتوافق مع الواقع المعزّز فقط.

وتتيح آلية التسليم هذه حاليًا التحكم في تنزيل إحدى الوحدات أثناء تثبيت التطبيق استنادًا إلى إعدادات الجهاز التالية:

وإذا لم يستوفي الجهاز جميع المتطلبات التي تحدّدها، لن يتم تنزيل الوحدة عند تثبيت التطبيق. ومع ذلك، قد يطلب تطبيقك في وقت لاحق تنزيل الوحدة عند الطلب باستخدام حزمة تطوير البرامج (SDK) الأساسية لـ Play.

قبل البدء، تأكَّد من استخدام الإصدار 3.5 من "استوديو Android" أو إصدار أحدث. توضّح لك الأقسام التالية كيفية إضافة إتاحة التسليم المشروط إلى وحدات الميزات.

إضافة وحدة جديدة بخيارات التسليم المشروط

تتمثل أسهل طريقة لإنشاء وحدة ميزة جديدة مع التسليم المشروط في استخدام معالج وحدة جديدة على النحو التالي:

  1. لفتح مربّع الحوار وحدة جديدة، اختَر ملف > جديد > وحدة جديدة من شريط القوائم.
  2. في مربّع الحوار "وحدة جديدة"، اختَر وحدة الميزات الديناميكية، ثمّ انقر على التالي.
  3. اضبط الوحدة كما تفعل عادةً وانقر على التالي.
  4. في قسم خيارات تنزيل الوحدة، أكمل ما يلي:

    1. حدِّد عنوان الوحدة باستخدام ما يصل إلى 50 حرفًا. تستخدم المنصة هذا العنوان لتحديد الوحدة للمستخدمين عند تأكيد ما إذا كان المستخدم يريد تنزيل الوحدة، على سبيل المثال. لهذا السبب، يجب أن تتضمن الوحدة الأساسية في تطبيقك عنوان الوحدة باعتباره مورد سلسلة يمكنك ترجمته. عند إنشاء الوحدة باستخدام Android Studio، يضيف بيئة التطوير المتكاملة (IDE) مورد السلسلة إلى الوحدة الأساسية من أجلك وتُدخل الإدخال التالي في بيان وحدة الميزة:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. في القائمة المنسدلة ضمن التضمين في وقت التثبيت، اختَر تضمين وحدة عند تثبيت التطبيق فقط للأجهزة ذات الميزات المحدَّدة، ما يؤدي إلى إنشاء وحدة مضمّنة مع تطبيقك وقت تثبيت التطبيق على الأجهزة فقط التي لها إعدادات معيَّنة يمكنك تحديدها، مثل ميزات الجهاز أو البلد. يضيف Android Studio ما يلي في بيان الوحدة ليعكس اختيارك:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. إذا أردت حصر التنزيل التلقائي للوحدة في بلدان معيّنة أو بالحد الأدنى من مستوى واجهة برمجة التطبيقات، انقر على إنهاء لإكمال إنشاء الوحدة، ثم اقرأ القسم حول طريقة تحديد الشروط بناءً على البلد أو الحد الأدنى لمستوى واجهة برمجة التطبيقات. أو انقر على + ميزة الجهاز لإضافة ميزة يتطلبها الجهاز لتنزيل الوحدة عند التثبيت.

    4. بجانب device-feature (ميزة الجهاز)، حدِّد أحد الخيارات التالية من القائمة المنسدلة وحدِّد قيمته:

      • الاسم: يتيح لك هذا الإعداد تحديد ميزة من أجهزة أو برامج يحتاجها الجهاز من أجل تنزيل الوحدة وقت التثبيت. الميزات التي يتيحها التسليم المشروط هي نفسها الميزات الواردة كثوابت FEATURE_* في PackageManager. إذا حددت هذا الخيار، ابدأ بكتابة أي جزء من القيمة الثابتة للميزة، مثل "Bluetooth"، في الحقل بجوار القائمة المنسدلة، واختَر أحد الاقتراحات التي تظهر لك.
      • إصدار OpenGL ES: يتيح لك تحديد إصدار OpenGL ES الذي يحتاجه الجهاز من أجل تنزيل الوحدة وقت التثبيت. إذا حدّدت هذا الخيار، ابدأ بكتابة الإصدار، مثل "0x00030001"، في الحقل بجانب القائمة المنسدلة، واختَر أحد الاقتراحات التي تظهر.
    5. إذا كنت تريد إضافة شروط متعددة استنادًا إلى ميزات الجهاز المتاحة، فانقر على + ميزة الجهاز لكل شرط من حالات ميزات الجهاز التي تريد تحديدها.

    6. ضع علامة في المربّع بجانب Fusing إذا أردت إتاحة هذه الوحدة على الأجهزة التي تعمل بالإصدار Android 4.4 (المستوى 20 لواجهة برمجة التطبيقات) والإصدارات الأقدم وتضمينها في حِزم APK المتعددة. وهذا يعني أنه يمكنك تفعيل السلوك عند الطلب لهذه الوحدة وإيقاف الدمج لحذفه من الأجهزة التي لا تتيح تنزيل وتثبيت حِزم APK المقسّمة. يدرج Android Studio ما يلي في بيان الوحدة ليعكس اختيارك:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. عند الانتهاء من ضبط خيارات تنزيل الوحدة، انقر على إنهاء.

تجدر الإشارة إلى أنّ مكوّن Gradle الإضافي لنظام التشغيل Android لا يتوافق مع تشغيل lint من وحدات الميزات الديناميكية. سيؤدي تشغيل Lint من وحدة التطبيق المقابلة إلى تشغيل Lint على وحدات الميزات الديناميكية وتضمين جميع المشكلات في تقرير Lit التابع للتطبيق.

إضافة خيارات التسليم المشروط إلى وحدة ميزة موجودة

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

للبدء، عليك أولاً نقل ملف البيان إلى عنصر <dist:delivery> الجديد. يوضح مقتطف الرمز أدناه مثالاً للبنية القديمة:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

تم تحديد خيارات التسليم أعلاه على النحو التالي.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

يمكنك بعد ذلك تضمين خيارات التسليم المشروط بناءً على ميزات الجهاز على النحو التالي.

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

تناقش الأقسام أدناه خيارات أخرى للتسليم المشروط، مثلاً حسب البلد أو الحد الأدنى لمستوى واجهة برمجة التطبيقات.

التوافق مع خيارات تنزيل الوحدات الأخرى

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

خيار تنزيل الوحدة التوافق مع التسليم المشروط
مصهر (<dist:fusing dist:include="true"/>) في حال ضبط وحدة على "صحيح"، لا يلتزم Google Play بخيارات التسليم المشروط التي تحدِّدها عند نشر تطبيقك على الأجهزة التي تعمل بالمستوى 19 من واجهة برمجة التطبيقات أو أقل. وهذا يعني أنّه يتم دائمًا تضمين وحدات الميزات التي تفعِّل الدمج أثناء التثبيت للأجهزة التي تعمل بالمستوى 19 من واجهة برمجة التطبيقات أو أقل.
التطبيقات الفورية (<dist:module dist:instant="true"/>) لا تتوفّر خيارات العرض المشروط لوحدات الميزات التي يتم تفعيل ميزة التطبيقات الفورية فيها.
محتوى مسجّل (<dist:on-demand/>) إذا حددت خيارات التسليم المشروط، ستكون الوحدة متاحة أيضًا عند الطلب بشكل تلقائي.

تحديد الشروط استنادًا إلى البلد

ويتيح لك العرض المشروط أيضًا تحديد البلدان التي تريد استبعادها (أو تضمينها) من تنزيل الوحدة عند تثبيت التطبيق. قد يكون تحديد هذا الشرط مفيدًا إذا كانت وحدتك تطبّق مثلاً طريقة دفع غير متاحة في مناطق معيّنة.

في هذا السياق، يتم عادةً تحديد بلد الجهاز استنادًا إلى عنوان إرسال الفواتير الخاص بالمستخدم المسجّل في حسابه على Google Play.

لتحديد البلدان في الوحدة، يمكنك تضمين ما يلي في بيان وحدة الميزات.

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

تحديد شروط مستوى واجهة برمجة التطبيقات

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

ولتحديد شرط استنادًا إلى الحد الأدنى أو الأقصى لمستوى واجهة برمجة التطبيقات للجهاز، يُرجى تضمين ما يلي في بيان وحدة الميزات.

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>