يتضمّن نظام Android 13 الأساسي تغييرات في السلوك قد تؤثر في تطبيقك. تنطبق تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على Android 13،
بغض النظر عن targetSdkVersion. يجب اختبار تطبيقك ثم تعديله حسب الحاجة ليتوافق مع هذه الميزات بشكل صحيح، حيثما ينطبق ذلك.
يُرجى أيضًا مراجعة قائمة التغييرات في السلوك التي تؤثر فقط في التطبيقات التي تستهدف Android 13.
الأداء والبطارية
إدارة المهام
بدءًا من الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات)، يمكن للمستخدمين إكمال سير العمل من لوحة الإشعارات لإيقاف التطبيقات التي تتضمّن خدمات تعمل في المقدّمة، كما هو موضّح في الشكل 1. يُعرف هذا الإجراء باسم مدير المهام. يجب أن تكون التطبيقات قادرة على التعامل مع هذا الإيقاف الذي يبدأه المستخدم.
تحسين معالجة مهام الجلب المُسبَق باستخدام JobScheduler
توفّر واجهة JobScheduler طريقة تتيح للتطبيقات وضع علامة على وظائف معيّنة باعتبارها وظائف "جلب مسبق" (باستخدام JobInfo.Builder.setPrefetch())، ما يعني أنّه من الأفضل تشغيلها قبل تشغيل التطبيق في المرة التالية وبوقت قريب منه لتحسين تجربة المستخدم.
في السابق، كان JobScheduler يستخدم الإشارة فقط للسماح لمهام الجلب المُسبق
باستخدام البيانات المجانية أو الزائدة بشكل انتهازي.
في الإصدار 13 من نظام التشغيل Android (المستوى 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) ذات الأولوية العالية
يعدّل الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) حصص مراسلة Firebase السحابية (FCM) لتحسين موثوقية تسليم رسائل FCM ذات الأولوية العالية للتطبيقات التي تعرض إشعارات استجابةً لرسائل FCM ذات الأولوية العالية. تم تغيير ما يلي في الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات):
- لم تعُد مجموعات تطبيقات وضع الاستعداد تحدّد عدد رسائل FCM ذات الأولوية العالية التي يمكن للتطبيق استخدامها.
- يخفّض النظام الآن أولوية الرسائل ذات الأولوية القصوى إذا رصد تطبيقًا يرسل باستمرار رسائل ذات أولوية قصوى لا تؤدي إلى ظهور إشعار.
كما هو الحال في الإصدارات السابقة من Android، يتم خفض أولوية رسائل FCM ذات الأولوية العالية التي تتجاوز الحصة إلى أولوية عادية. عند بدء الخدمات التي تعمل في المقدّمة (FGS) استجابةً لرسالة FCM، ننصحك بالتحقّق من نتيجة RemoteMessage.getPriority() والتأكّد من أنّها PRIORITY_HIGH و/أو معالجة أي استثناءات محتملة لـ ForegroundServiceStartNotAllowedException.
إذا كان تطبيقك لا ينشر دائمًا إشعارات استجابةً لرسائل FCM ذات الأولوية العالية، ننصحك بتغيير أولوية رسائل FCM هذه إلى عادية حتى لا يتم خفض مستوى الرسائل التي تؤدي إلى إرسال إشعار.
الخصوصية
إذن التشغيل للإشعارات
يقدّم الإصدار 13 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 33) إذن إرسال الإشعارات في وقت التشغيل:
POST_NOTIFICATIONS.
يساعد هذا التغيير المستخدمين في التركيز على الإشعارات الأكثر أهمية بالنسبة إليهم.
ننصحك بشدة باستهداف الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث في أقرب وقت ممكن للاستفادة من مزايا التحكّم الإضافي والمرونة التي توفّرها هذه الميزة.
مزيد من المعلومات حول أفضل الممارسات المتعلّقة بأذونات التطبيقات
إخفاء المحتوى الحسّاس من الحافظة
إذا كان تطبيقك يسمح للمستخدمين بنسخ محتوى حسّاس، مثل كلمات المرور أو معلومات بطاقة الائتمان، إلى الحافظة، يجب إضافة علامة إلى ClipDescription في ClipData قبل طلب ClipboardManager#setPrimaryClip(). تؤدي إضافة هذه العلامة إلى منع ظهور المحتوى الحسّاس في معاينة المحتوى.
للإبلاغ عن محتوى حسّاس، أضِف قيمة منطقية إضافية إلى 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 مطلقًا. تستمر التطبيقات المحدَّثة في استخدام
رقم تعريف المستخدم المشترَك الحالي.
تؤدي أرقام تعريف المستخدمين المشتركة إلى سلوك غير حتمي في مدير الحِزم. بدلاً من ذلك، يجب أن يستخدم تطبيقك آليات اتصال مناسبة، مثل الخدمات وأدوات توفير المحتوى، لتسهيل إمكانية التشغيل التفاعلي بين المكوّنات المشتركة.
تجربة المستخدم
إشعارات الخدمات التي تعمل في المقدّمة ويمكن إغلاقها
على الأجهزة التي تعمل بنظام التشغيل Android 13 أو الإصدارات الأحدث، يمكن للمستخدمين إغلاق الإشعارات المرتبطة بالخدمات التي تعمل في المقدّمة تلقائيًا.
الوظيفة الأساسية
تمت إزالة النسخة القديمة من تنفيذ خدمة "التعرّف على الكلام"
يزيل Android 13 تنفيذ SpeechService، بما في ذلك
"محرر أسلوب الإدخال الصوتي" وRecognitionService
وواجهة برمجة التطبيقات المستندة إلى الأهداف، من
تطبيق Google.
في Android 12، تم إجراء التغييرات التالية:
- تم نقل وظائف "
SpeechService" إلى تطبيق "خدمات تقنيات الكلام من Google"، الذي أصبح مقدّم خدمة "SpeechService" التلقائي. - تم نقل وظيفة
RecognitionServiceإلى تطبيق Android System Intelligence لإتاحة ميزة "التعرّف على الكلام" على الجهاز فقط.
للمساعدة في الحفاظ على توافق التطبيقات على Android 12، يستخدم تطبيق Google ميزة "التحويل" لإعادة توجيه الزيارات إلى تطبيق "خدمات تكنولوجيا الكلام من Google". في Android 13، تتم إزالة ميزة "التحويل".
يجب أن تستخدم التطبيقات مقدّم الخدمة التلقائي على الجهاز لـ "SpeechService"، بدلاً من استخدام بيانات غير قابلة للتغيير في البرنامج.