يتضمّن نظام Android 13 الأساسي تغييرات على السلوك قد تؤثر في تطبيقك. وتنطبق التغييرات التالية على السلوك على جميع التطبيقات عند تشغيلها على Android 13،
بغض النظر عن targetSdkVersion
. يجب اختبار تطبيقك ثم تعديله حسب الحاجة لإتاحة هذه التعديلات بشكل صحيح، حيثما أمكن.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر فقط في التطبيقات التي تستهدف الإصدار 13 من نظام التشغيل Android.
الأداء والبطارية
مدير المهام
بدءًا من نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات)، يمكن للمستخدمين إكمال سير العمل من درج الإشعارات لإيقاف التطبيقات التي تتضمن خدمات تعمل في المقدّمة، كما هو موضّح في الشكل 1. يُعرف هذا العنصر باسم إدارة المهام. يجب أن تتمكن التطبيقات من معالجة عملية الإيقاف هذه التي يجريها المستخدم.
تحسين معالجة المهام التي يتم جلبها مُسبقًا باستخدام أداة JobScheduler
توفّر أداة JobScheduler للتطبيقات طريقة لتصنيف وظائف محددة على أنها مهام "جلب مسبق"
(باستخدام JobInfo.Builder.setPrefetch()
)، مما يعني أنه من المفترض أن يتم تشغيلها بالقرب من عملية إطلاق التطبيق التالية وقبلها لتحسين تجربة المستخدم.
في السابق، كانت JobScheduler قد استخدمت الإشارة فقط للسماح للمهام الجلب المُسبَق
باستخدام بيانات مجانية أو زائدة في أحسن الأحوال.
في نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يحاول النظام تحديد المرة التالية التي سيتم فيها تشغيل التطبيق، ويستخدم هذا التقدير لتنفيذ مهام الجلب المسبق. يجب أن تحاول التطبيقات استخدام مهام الجلب المسبق لأي عمل يريدون تنفيذه قبل الإطلاق التالي للتطبيق.
استخدام موارد البطارية
يوفّر Android 13 (المستوى 33 لواجهة برمجة التطبيقات) الطرق التالية التي تتيح للنظام إدارة عمر بطارية الجهاز بشكل أفضل:
- تم تعديل القواعد المنطبقة على الحالات التي يضع فيها النظام تطبيقك في مجموعة بيانات وضع الاستعداد للتطبيقات"المحدودة".
- يتم فرض قيود جديدة على العمل الذي يمكن لتطبيقك تنفيذه عندما يضع المستخدم تطبيقك في حالة"تقييد" لاستخدام البطارية في الخلفية.
أثناء اختبار تطبيقك بعد إجراء هذه التغييرات، احرص على التحقق من العناصر التالية:
يمكنك اختبار استجابة تطبيقك عندما يضعه النظام في مجموعة بيانات وضع الاستعداد للتطبيقات"المحدودة". استخدِم الأمر التالي Android Debug Bridge (ADB) لتعيين تطبيقك لهذه الحزمة:
adb shell am set-standby-bucket PACKAGE_NAME restricted
اختبِر كيفية استجابة تطبيقك للقيود التالية التي تنطبق عادةً على التطبيقات التي لديها حالة"محدودة" لاستخدام البطارية في الخلفية:
- تعذُّر تشغيل الخدمات التي تعمل في المقدّمة
- تتم إزالة الخدمات الحالية التي تعمل في المقدّمة من المقدّمة.
- المنبّهات لا تعمل
- لا يتم تنفيذ المهام
استخدِم أمر ADB التالي لوضع تطبيقك في الحالة "المشروطة" هذه:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
حصص الرسائل السحابية ذات الأولوية العالية من Firebase (FCM)
يعدِّل نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات) حصص المراسلة عبر السحابة الإلكترونية من Firebase (FCM) لتحسين موثوقية إرسال "المراسلة عبر السحابة الإلكترونية من Firebase" ذي الأولوية العالية للتطبيقات التي تعرض إشعارات استجابةً للمراسلة عبر السحابة الإلكترونية من Firebase ذات الأولوية العالية. تم تغيير ما يلي في Android 13 (المستوى 33 لواجهة برمجة التطبيقات):
- لم تعُد حِزم وضع الاستعداد للتطبيقات تحدِّد عدد الرسائل ذات الأولوية العالية التي يمكن تلقّيها من التطبيق باستخدام ميزة "المراسلة عبر السحابة الإلكترونية من Firebase".
- يتم قياس حصص "المراسلة عبر السحابة الإلكترونية من Firebase" ذات الأولوية العالية بما يتناسب مع عدد الإشعارات المعروضة للمستخدم استجابةً للمراسلة عبر السحابة الإلكترونية من Firebase ذات الأولوية العالية.
وكما في الإصدارات السابقة من نظام التشغيل Android، يتم خفض مستوى الأولوية العادية للمراسلة عبر السحابة الإلكترونية من Firebase ذات الأولوية العالية التي تتجاوز الحصة المحددة. عند بدء استخدام الخدمات التي تعمل في المقدّمة (FGS) استجابةً لـ "المراسلة عبر السحابة الإلكترونية من Firebase"، ننصحك بالاطّلاع على نتيجة RemoteMessage.getPriority()
والتأكّد من أنّها PRIORITY_HIGH
و/أو التعامل مع أي استثناءات ForegroundServiceStartNotAllowedException
محتمَلة.
إذا كان تطبيقك لا يرسل إشعارات تلقّي رسائل استجابة من "المراسلة عبر السحابة الإلكترونية من Firebase" ذات الأولوية العالية، نقترح تغيير أولوية FCM إلى عادية حتى لا يتم إرجاع الرسائل التي ينتج عنها إشعار إلى إصدار سابق.
الخصوصية
إذن وقت التشغيل للإشعارات
يقدّم Android 13 (المستوى 33 لواجهة برمجة التطبيقات) إذن إرسال الإشعارات في وقت التشغيل:
POST_NOTIFICATIONS
.
يساعد هذا التغيير المستخدمين في التركيز على الإشعارات
الأكثر أهمية بالنسبة لهم.
ننصحك بشدة باستهداف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث في أقرب وقت ممكن للاستفادة من مزيد من التحكّم والمرونة لهذه الميزة.
مزيد من المعلومات حول أفضل الممارسات المتعلّقة بأذونات التطبيقات
إخفاء المحتوى الحسّاس من الحافظة
إذا كان تطبيقك يسمح للمستخدمين بنسخ المحتوى الحسّاس إلى الحافظة، مثل كلمات المرور أو معلومات بطاقة
الائتمان، عليك إضافة علامة إلى علامة ClipDescription
الخاصة بأداة ClipData قبل الاتصال على ClipboardManager#setPrimaryClip()
. تؤدي إضافة هذه العلامة إلى منع ظهور المحتوى الحسّاس في معاينة المحتوى.
![معاينة النص المنسوخ بدون الإبلاغ عن المحتوى الحسّاس](https://developer.android.com/static/images/about/versions/13/sensitive-content-before.png?authuser=7&hl=ar)
![معاينة النص المنسوخ تشير إلى المحتوى الحسّاس](https://developer.android.com/static/images/about/versions/13/sensitive-content-after.png?authuser=7&hl=ar)
للإبلاغ عن محتوى حسّاس، أضِف قيمة منطقية إضافية إلى ClipDescription
. ومن المفترض أن تنفّذ جميع التطبيقات هذا الإجراء، بغض النظر عن مستوى واجهة برمجة التطبيقات المستهدَف.
// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
لمزيد من المعلومات حول واجهة المستخدم الجديدة للحافظة، يمكنك الانتقال إلى صفحة ميزة النسخ واللصق.
الأمان
نقل البيانات بعيدًا عن رقم تعريف المستخدم المشترك
إذا كان تطبيقك يستخدم السمة المتوقّفة نهائيًا
android:sharedUserId
ولم يعُد يعتمد على وظائف السمة، يمكنك ضبط السمة android:sharedUserMaxSdkVersion
على 32
، كما هو موضّح في مقتطف الرمز التالي:
<manifest ...> <!-- To maintain backward compatibility, continue to use "android:sharedUserId" if you already added it to your manifest. --> android:sharedUserId="SHARED_PACKAGE_NAME" android:sharedUserMaxSdkVersion="32" ... </manifest>
تخبر هذه السمة النظام أن تطبيقك لم يعد يعتمد على معرّف مستخدم مشترك. إذا كان تطبيقك يعلن عن android:sharedUserMaxSdkVersion
وقد تم تثبيته مؤخرًا على أجهزة تعمل بإصدار Android 13 أو بإصدار أحدث، سيتصرف تطبيقك كما لو لم تحدّد android:sharedUserId
أبدًا. لا تزال التطبيقات المحدثة تستخدم
رقم تعريف المستخدم المشترك الحالي.
تتسبب أرقام تعريف المستخدمين المشتركة في سلوك غير حاسم داخل مدير الحِزم. وبدلاً من ذلك، يجب أن يستخدم تطبيقك آليات تواصل مناسبة، مثل مقدّمي الخدمات والمحتوى، لتسهيل إمكانية التشغيل التفاعلي بين المكونات المشتركة.
تجربة المستخدم
إشعارات الخدمات التي تعمل في المقدّمة يمكن إغلاقها
على الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو إصدار أحدث، يمكن للمستخدمين إغلاق الإشعارات المرتبطة بالخدمات التي تعمل في المقدّمة تلقائيًا.
الوظيفة الأساسية
تمت إزالة النسخة القديمة من خدمة التعرّف على الكلام.
يزيل نظام التشغيل Android 13 عملية تنفيذ SpeechService
، بما في ذلك
أداة Voice IME وRecognitionService
وواجهة برمجة التطبيقات المستندة إلى
النية، من
تطبيق Google.
في نظام التشغيل Android 12، حدثت التغييرات التالية:
- تم نقل وظائف
SpeechService
إلى تطبيق "خدمات تقنيات الكلام من Google"، الذي أصبح مزوّد خدمةSpeechService
التلقائي. - تم نقل وظيفة
RecognitionService
إلى تطبيق Android System Intelligence لتوفير ميزة التعرّف على الكلام على الجهاز
للمساعدة في الحفاظ على توافق التطبيق على نظام التشغيل Android 12، يستخدم تطبيق Google ترامبولين لتحويل حركة الزيارات إلى تطبيق "خدمات تقنيات الكلام من Google". في Android 13، تتم إزالة هذا الترامبولين.
يجب أن تستخدم التطبيقات موفِّر الجهاز التلقائي لـ SpeechService
بدلاً من ترميز تطبيق معيّن.