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