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

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

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

إذا لم يستوفِ الجهاز جميع المتطلبات التي تحدّدها، لن يتم تطبيق الوحدة الذي تم تنزيله في وقت تثبيت التطبيق ومع ذلك، قد يطلب تطبيقك لاحقًا وتنزيل الوحدة عند الطلب باستخدام Play Core SDK.

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

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

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

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

    1. حدِّد عنوان الوحدة باستخدام ما يصل إلى 50 حرفًا. النظام الأساسي هذا العنوان لتحديد الوحدة للمستخدمين، على سبيل المثال، وتأكيد ما إذا كان المستخدم يريد تنزيل الوحدة أم لا. لهذا الغرض السبب، يجب أن تتضمّن الوحدة الأساسية في تطبيقك عنوان الوحدة مورد السلسلة، والذي الترجمة. عند إنشاء الوحدة باستخدام "استوديو Android"، يتمكن بيئة التطوير المتكاملة (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 إذا حددت هذا الخيار، ابدأ في كتابة أي جزء من القيمة الثابتة لـ الميزة، مثل "البلوتوث"، في الحقل بجانب القائمة المنسدلة اختَر أحد الاقتراحات التي تظهر.
      • OpenGL ES Version: يسمح لك بتحديد إصدار OpenGL ES الذي الذي يحتاجه الجهاز لتنزيل الوحدة أثناء التثبيت. إذا كنت حدد هذا الخيار، ابدأ في كتابة الإصدار، مثل "0x00030001"، في الحقل بجوار القائمة المنسدلة، واختر أحد الاقتراحات التي موضع الإعلان.
    5. إذا كنت تريد إضافة شروط متعدّدة استنادًا إلى ميزات الجهاز المتاحة، انقر على + ميزة الجهاز لكل شرط من شروط ميزات الجهاز تريد التحديد.

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

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

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

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

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

للبدء، عليك أولاً نقل ملف البيان إلى الإصدار الجديد العنصر <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>