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