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

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

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

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

مدير المهام

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

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

تحسين معالجة مهام التحميل المُسبَق باستخدام JobScheduler

يوفّر JobScheduler طريقة للتطبيقات لتمييز مهام معيّنة على أنّها مهام "التحميل المُسبَق" (باستخدام JobInfo.Builder.setPrefetch())، ما يعني أنّه من الأفضل تشغيلها بالقرب من وقت تشغيل التطبيق التالي وقبله لتحسين تجربة المستخدم. في السابق، لم يستخدم JobScheduler الإشارة إلا للسماح لمهام التحميل المُسبَق باستخدام البيانات المجانية أو الزائدة بشكلٍ انتهازي.

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

استخدام موارد البطارية

يوفّر الإصدار 13 من نظام التشغيل Android (المستوى 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 ذات الأولوية العالية

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

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

كما هو الحال في الإصدارات السابقة من 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 أو إصدار أحدث، يمكن للمستخدمين إغلاق الإشعارات المرتبطة بالخدمات التي تعمل في المقدّمة تلقائيًا.

الوظيفة الأساسية

تمت إزالة نسخة قديمة من تنفيذ خدمة الكلام

يزيل الإصدار 13 من نظام التشغيل Android عملية تنفيذ SpeechService، بما في ذلك Voice IME وRecognitionService وواجهة برمجة التطبيقات المستندة إلى النية، من تطبيق Google.

في Android 12، حدثت التغييرات التالية:

  • تم نقل وظائف SpeechService إلى تطبيق "خدمات تقنيات الكلام من Google"، والذي أصبح موفِّر SpeechService التلقائي.
  • تم نقل وظائف RecognitionService إلى تطبيق "ذكاء نظام Android" لإتاحة ميزة "التعرّف على الكلام" على الجهاز فقط.

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

يجب أن تستخدم التطبيقات مقدّم الخدمة التلقائي للجهاز في ما يتعلّق بـ SpeechService، بدلاً من ترميز تطبيق معيّن بشكل ثابت.