التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث

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

احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر في جميع التطبيقات التي تعمل على نظام التشغيل Android 13.

الخصوصية

يؤثر إذن إرسال الإشعارات في مظهر الخدمة التي تعمل في المقدّمة.

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

إذن تشغيل جديد لأجهزة Wi-Fi المجاورة

في الإصدارات السابقة من نظام التشغيل Android، يجب أن يمنح المستخدم تطبيقك إذن ACCESS_FINE_LOCATION لإكمال العديد من حالات استخدام Wi-Fi الشائعة.

بسبب صعوبة ربط المستخدمين بأذونات تحديد الموقع الجغرافي ووظيفة شبكة Wi-Fi، يقدّم Android 13 (مستوى واجهة برمجة التطبيقات 33) إذن التشغيل في مجموعة الأذونات NEARBY_DEVICES للتطبيقات التي تدير اتصالات الجهاز بنقاط وصول قريبة عبر شبكة Wi-Fi. يفي هذا الإذن NEARBY_WIFI_DEVICES بحالات استخدام Wi-Fi، مثل ما يلي:

  • يمكنك العثور على الأجهزة المجاورة أو الربط بها، مثل الطابعات أو أجهزة بث الوسائط. يسمح سير العمل هذا لتطبيقك بإنجاز الأنواع التالية من المهام:
    • تلقّي معلومات نقطة الاتصال خارج النطاق، مثلاً من خلال تقنية البلوتوث المنخفض الطاقة (BLE).
    • يمكنك استكشاف الأجهزة والاتصال بها عبر Wi-Fi Aware والاتصال بها باستخدام نقطة اتصال محلية فقط.
    • يمكنك اكتشاف الأجهزة والاتصال بها عبر اتصال Wi-Fi مباشر.
  • ابدأ الاتصال بمعرِّف SSID معروف، مثل سيارة أو جهاز منزلي ذكي.
  • يجب تفعيل نقطة اتصال محلية فقط.
  • النطاق إلى أجهزة Wi-Fi Aware القريبة

طالما أنّ تطبيقك لا يستمِد معلومات الموقع الجغرافي الفعلي من واجهات برمجة تطبيقات Wi-Fi، يمكنك طلب NEARBY_WIFI_DEVICES بدلاً من ACCESS_FINE_LOCATION عند استهداف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث واستخدام واجهات برمجة تطبيقات Wi-Fi. عند تقديم بيان الإذن NEARBY_WIFI_DEVICES، نؤكّد أنّ تطبيقك لا يستمِد مطلقًا معلومات عن الموقع الجغرافي الفعلي من واجهات برمجة تطبيقات Wi-Fi. لإجراء ذلك، اضبط السمة android:usesPermissionFlags على neverForLocation. هذه العملية مشابهة لتلك التي تنفّذها في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث عندما تؤكّد أنّ معلومات الجهاز الذي يتضمّن بلوتوث لا يتم استخدامها أبدًا لتحديد الموقع الجغرافي.

يمكنك الاطّلاع على مزيد من المعلومات حول كيفية طلب إذن الوصول إلى أجهزة Wi-Fi المجاورة.

أذونات الوسائط الدقيقة

الزران لمربّع الحوار، من أعلى إلى أسفل، هما "السماح" و"عدم السماح"
الشكل 1. مربّع حوار أذونات النظام الذي يظهر للمستخدم عندما تطلب إذن READ_MEDIA_AUDIO.

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

نوع الوسائط إذن للطلب
الصور READ_MEDIA_IMAGES
الفيديوهات الطويلة READ_MEDIA_VIDEO
الملفات الصوتية READ_MEDIA_AUDIO

قبل أن تصل إلى ملفات الوسائط في تطبيق آخر، تأكّد من أنّ المستخدم قد منح أذونات الوسائط الدقيقة المناسبة لتطبيقك.

يعرض الشكل 1 تطبيقًا يطلب إذن READ_MEDIA_AUDIO.

إذا طلبت كلّ من الإذن READ_MEDIA_IMAGES وإذن READ_MEDIA_VIDEO في الوقت نفسه، سيظهر مربّع حوار واحد فقط لأذونات النظام.

وإذا سبق وتم منح تطبيقك إذن READ_EXTERNAL_STORAGE، سيتم تلقائيًا منح أي أذونات READ_MEDIA_* مطلوبة عند الترقية. يمكنك استخدام أمر ADB التالي لمراجعة الأذونات التي تمت ترقيتها:

adb shell cmd appops get --uid PACKAGE_NAME

يجب الحصول على إذن جديد لاستخدام أجهزة استشعار الجسم في الخلفية.

يقدّم Android 13 مفهوم الوصول "أثناء الاستخدام" لأجهزة استشعار الجسم، مثل معدّل نبضات القلب ودرجة الحرارة ونسبة الأكسجين في الدم. ويشبه نموذج الوصول هذا إلى حد كبير النموذج الذي قدمه النظام للموقع الجغرافي في Android 10 (مستوى واجهة برمجة التطبيقات 29).

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

الأداء والبطارية

استخدام موارد البطارية

إذا وضع المستخدم تطبيقك في حالة "تقييد" لاستخدام البطارية في الخلفية بينما يستهدف تطبيقك الإصدار Android 13، لن يرسل النظام BOOT_COMPLETED بث أو إعلان LOCKED_BOOT_COMPLETED إلى أن يتم بدء تشغيل التطبيق لأسباب أخرى.

تجربة المستخدم

عناصر التحكّم في الوسائط مشتقة من PlaybackState

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

ويوضح الشكل 2 مثالاً على الشكل الذي يبدو عليه هذا على هاتف وجهاز لوحي على التوالي.

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

قبل الإصدار 13 من Android، كان النظام يعرض ما يصل إلى خمسة إجراءات من إشعار MediaStyle بالترتيب الذي تمت إضافتها به. في الوضع المكثف، على سبيل المثال، في الإعدادات السريعة المصغَّرة، تم عرض ما يصل إلى ثلاثة إجراءات محدّدة باستخدام setShowActionsInCompactView().

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

الشريحة الإعلانية الإجراء المعايير
1 تشغيل الحالة الحالية لـ PlaybackState هي إحدى الحالات التالية:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
مؤشر سريان العمل الخاص بالتحميل الحالة الحالية لـ PlaybackState هي إحدى الحالات التالية:
  • STATE_CONNECTING
  • STATE_BUFFERING
إيقاف مؤقت الحالة الحالية لـ PlaybackState لا تشمل ما سبق.
2 الصفحة السابقة PlaybackState الإجراءات تشمل ACTION_SKIP_TO_PREVIOUS.
قرض مخصص PlaybackState الإجراءات لا تشمل ACTION_SKIP_TO_PREVIOUS، وPlaybackState الإجراءات المخصصة تتضمن إجراءً مخصّصًا لم يتم وضعه بعد.
ما مِن لاعبين تتضمن PlaybackState الإضافات قيمة منطقية true للمفتاح SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV.
3 التالي PlaybackState الإجراءات تشمل ACTION_SKIP_TO_NEXT.
قرض مخصص PlaybackState الإجراءات لا تشمل ACTION_SKIP_TO_NEXT، وPlaybackState الإجراءات المخصصة تتضمن إجراءً مخصّصًا لم يتم وضعه بعد.
ما مِن لاعبين تتضمن PlaybackState الإضافات قيمة منطقية true للمفتاح SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT.
4 قرض مخصص PlaybackState الإجراءات المخصّصة تشمل إجراءً مخصّصًا لم يتم وضعه بعد.
5 قرض مخصص PlaybackState الإجراءات المخصّصة تشمل إجراءً مخصّصًا لم يتم وضعه بعد.

يتم وضع الإجراءات المخصّصة بالترتيب الذي تمت إضافتها به إلى PlaybackState.

تم تطبيق مظهر لون التطبيق تلقائيًا على محتوى WebView

بالنسبة إلى التطبيقات التي تستهدف Android 13 (مستوى واجهة برمجة التطبيقات 33) أو الإصدارات الأحدث، يتم إيقاف طريقة setForceDark() التلقائية، ما يؤدي إلى حظر التشغيل في حال استدعاء هذه الطريقة.

بدلاً من ذلك، تضبط ميزة WebView الآن دائمًا الاستعلام عن الوسائط prefers-color-scheme وفقًا لسمة مظهر التطبيق، isLightTheme. وبعبارة أخرى، إذا كانت السمة isLightTheme هي true أو لم يتم تحديدها، تكون السمة prefers-color-scheme هي light، وبخلاف ذلك، تكون القيمة dark. يعني هذا السلوك أنه يتم تطبيق النمط الفاتح أو الداكن لمحتوى الويب تلقائيًا لمطابقة مظهر التطبيق إذا كان المحتوى يتيح ذلك.

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

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

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

خدمات Google Play

الإذن مطلوب لإنشاء المعرِّف الإعلاني

على التطبيقات التي تستخدم المعرّف الإعلاني لـ "خدمات Google Play" والتطبيقات التي تستهدف Android 13 (مستوى واجهة برمجة التطبيقات 33) والإصدارات الأحدث أن تقدّم بيانًا عن الإذن AD_ID العادي في ملف البيان الخاص بها، على النحو التالي:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

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

وإذا كان تطبيقك يستخدم حِزم تطوير برامج (SDK) تقدِّم معلومات عن إذن "AD_ID" في بيان المكتبة، يتم تلقائيًا دمج هذا الإذن مع ملف بيان التطبيق. وفي هذه الحالة، ليس عليك تقديم بيان الإذن في ملف صورة تطبيقك.

لمزيد من المعلومات، اطّلع على المعرِّف الإعلاني في مركز مساعدة Play Console.

القيود المعدّلة غير المرتبطة بحزمة تطوير البرامج (SDK)

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

إذا لم يكن تطبيقك يستهدف نظام التشغيل Android 13، قد لا تؤثر بعض هذه التغييرات في تطبيقك على الفور. ومع ذلك، يمكنك حاليًا استخدام بعض الواجهات غير المستندة إلى SDK (بناءً على مستوى واجهة برمجة التطبيقات المستهدف في تطبيقك)، إلا أنّ استخدام أي حقل أو طريقة غير SDK يؤدي دائمًا إلى كسر تطبيقك.

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

لمعرفة المزيد من المعلومات عن التغييرات في هذا الإصدار من نظام التشغيل Android، يمكنك الاطّلاع على تعديلات على قيود الواجهة غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 13. لمعرفة المزيد من المعلومات عن الواجهات غير المتوفرة في حزمة SDK بوجه عام، يُرجى الاطّلاع على القيود المفروضة على الواجهات التي لا تتضمن حزمة SDK.