تغييرات السلوك: جميع التطبيقات

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

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

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

إدارة المهام

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

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

تحسين التعامل مع مهام الجلب المسبق باستخدام Job Scheduler

توفِّر أداة Jobscheduler طريقة للتطبيقات لوضع علامة على وظائف معيّنة باعتبارها مهام "الجلب المسبق" (باستخدام JobInfo.Builder.setPrefetch())، ما يعني أنّه من المفترض أن يتم تشغيلها بالقرب من إطلاق التطبيق التالي وبعده لتحسين تجربة المستخدم. في السابق، كانت Job Scheduler تستخدم الإشارة فقط للسماح للمهام التي يتم جلبها مسبقًا باستخدام البيانات المجانية أو الزائدة عن الوقت المناسب.

في 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 ذات الأولوية العالية

يعدّل Android 13 (المستوى 33 من واجهة برمجة التطبيقات) حصص المراسلة عبر السحابة الإلكترونية من Firebase (FCM) لتحسين موثوقية التسليم عبر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" ذي الأولوية العالية للتطبيقات التي تعرض إشعارات استجابةً للمراسلة عبر السحابة الإلكترونية من Firebase ذات الأولوية العالية. تم تغيير ما يلي في Android 13 (المستوى 33):

  • لم تعد حزم تطبيقات وضع الاستعداد تحدِّد عدد حزم "المراسلة عبر السحابة الإلكترونية من Firebase" ذات الأولوية العالية التي يمكن لأحد التطبيقات استخدامها.
  • يتم تغيير حصص "المراسلة عبر السحابة الإلكترونية من Firebase" ذات الأولوية العالية بما يتناسب مع عدد الإشعارات المعروضة للمستخدم استجابةً للمراسلة "المراسلة عبر السحابة الإلكترونية من Firebase" ذات الأولوية العالية.

كما في إصدارات Android السابقة، يتم إرجاع مراسلة عبر السحابة الإلكترونية من Firebase ذات الأولوية العالية التي تتجاوز الحصة إلى الأولوية العادية. عند بدء الخدمات التي تعمل في المقدّمة (FGS) استجابةً لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase"، ننصحك بالتحقق من نتيجة RemoteMessage.getPriority() و/أو التأكّد من أنها PRIORITY_HIGH و/أو التعامل مع أي استثناءات ForegroundServiceStartNotAllowedException محتملة.

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

الخصوصية

إذن التشغيل للإشعارات

يقدّم نظام 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 System Intelligence لإتاحة التعرّف على الكلام على الجهاز فقط

للمساعدة في الحفاظ على توافق التطبيقات على نظام التشغيل Android 12، يستخدم تطبيق Google ترامبولين لتحويل الزيارات إلى تطبيق "خدمات تقنيات الكلام من Google". وفي نظام التشغيل Android 13، تتم إزالة الترامبولين.

يجب أن تستخدم التطبيقات الموفّر التلقائي للجهاز لتطبيق SpeechService بدلاً من الترميز الثابت.