تغییرات رفتار: همه برنامه‌ها

پلاتفرم Android 13 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر بر همه برنامه‌ها هنگام اجرا در Android 13، صرف‌نظر از targetSdkVersion، اعمال می‌شود. باید برنامه‌تان را آزمایش کنید و سپس آن را درصورت لزوم اصلاح کنید تا از این موارد به‌درستی پشتیبانی کند (درصورت وجود).

حتماً فهرست تغییرات رفتاری را که فقط بر برنامه‌هایی که Android 13 را هدف قرار می‌دهند تأثیر می‌گذارد نیز مرور کنید.

عملکرد و باتری

مدیر وظایف

در پایین کشوی اعلان، دکمه‌ای وجود دارد که تعداد برنامه‌هایی را که درحال‌حاضر در پس‌زمینه اجرا می‌شوند نشان می‌دهد. وقتی این دکمه را فشار می‌دهید، کادر گفتگویی ظاهر می‌شود که نام برنامه‌های مختلف را فهرست می‌کند. دکمه
  «توقف» در سمت چپ هر برنامه قرار دارد
شکل ۱. گردش کار برای «مدیر وظایف» که به کاربران اجازه می‌دهد برنامه‌هایی را که سرویس‌های پیش‌زمینه‌ای جاری دارند متوقف کنند. این گردش کار فقط در دستگاه‌های دارای Android نسخه ۱۳ یا بالاتر نشان داده می‌شود.

از Android 13 (سطح API‏ ۳۳)، کاربران می‌توانند گردش کاری را از کشوی اعلان تکمیل کنند تا برنامه‌هایی را که سرویس‌های پیش‌زمینه درحال اجرا دارند متوقف کنند، همان‌طور که در شکل ۱ نشان داده شده است. این امکان با نام مدیر وظیفه شناخته می‌شود. برنامه‌ها باید بتوانند این توقف شروع‌شده توسط کاربر را مدیریت کنند.

بهبود مدیریت کار پیش‌واکشی بااستفاده از JobScheduler

JobScheduler روشی برای برنامه‌ها فراهم می‌کند تا کارهای خاصی را به‌عنوان کارهای «پیش‌واکشی» (بااستفاده از JobInfo.Builder.setPrefetch()) علامت‌گذاری کنند، به این معنی که این کارها باید در حالت ایده‌آل نزدیک به راه‌اندازی بعدی برنامه و قبل‌از آن اجرا شوند تا تجربه کاربری بهبود یابد. در گذشته، JobScheduler فقط از سیگنال استفاده می‌کرد تا به کارهای پیش‌واکشی اجازه دهد به‌طور فرصت‌طلبانه از داده‌های رایگان یا اضافی استفاده کنند.

در Android نسخه ۱۳ (سطح میانای برنامه‌سازی کاربردی ۳۳) و بالاتر، سیستم تلاش می‌کند زمان بعدی راه‌اندازی برنامه را تعیین کند و از آن تخمین برای اجرای کارهای پیش‌واکشی استفاده می‌کند. برنامه‌ها باید سعی کنند برای هر کاری که می‌خواهند قبل‌از راه‌اندازی بعدی برنامه انجام شود، از کارهای پیش‌واکشی استفاده کنند.

استفاده از منابع باتری

‫Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) روش‌های زیر را برای مدیریت بهتر عمر باتری دستگاه توسط سیستم ارائه می‌دهد:

  • قوانین به‌روزشده درباره اینکه سیستم چه زمانی برنامه شما را در «محدودشده» App Standby Bucket قرار می‌دهد.
  • محدودیت‌های جدیدی برای کارهایی که برنامه‌تان می‌تواند انجام دهد وقتی کاربر برنامه‌تان را در «وضعیت محدودشده» برای مصرف باتری در پس‌زمینه قرار می‌دهد.

هنگام آزمایش برنامه‌تان با این تغییرات، حتماً موارد زیر را بررسی کنید:

  • آزمایش کنید که وقتی سیستم برنامه‌تان را در «دسته آماده‌به‌کار برنامه محدودشده» قرار می‌دهد، برنامه‌تان چگونه پاسخ می‌دهد. از فرمان «پل اشکال‌زدایی Android»‏ (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 (سطح API‏ ۳۳) سهمیه‌های پیام‌رسانی ابری Firebase (FCM) را به‌روزرسانی می‌کند تا قابلیت اطمینان ارسال FCM با اولویت بالا را برای برنامه‌هایی که در پاسخ به FCMهای با اولویت بالا اعلان نشان می‌دهند بهبود بخشد. موارد زیر در Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) تغییر کرده است:

  • دسته‌های حالت آماده به‌کار برنامه دیگر تعیین نمی‌کنند که برنامه از چند FCM با اولویت بالا می‌تواند استفاده کند.
  • اکنون اگر سیستم تشخیص دهد که برنامه‌ای به‌طور مداوم پیام‌های با اولویت بالا ارسال می‌کند که منجر به اعلان نمی‌شود، اولویت پیام‌های با اولویت بالا را کاهش می‌دهد.

همانند نسخه‌های قبلی Android، پیام‌های FCM با اولویت بالا که از سهمیه فراتر می‌روند به اولویت عادی تنزل داده می‌شوند. هنگام شروع سرویس‌های پیش‌زمینه‌ای (FGS) در پاسخ به FCM، توصیه می‌کنیم نتیجه RemoteMessage.getPriority() را بررسی کنید و مطمئن شوید که PRIORITY_HIGH است و/یا هرگونه استثنای احتمالی ForegroundServiceStartNotAllowedException را مدیریت کنید.

اگر برنامه شما همیشه در پاسخ به «پیام‌های ابری Firebase» با اولویت بالا اعلان پست نمی‌کند، توصیه می‌کنیم اولویت این «پیام‌های ابری Firebase» را به معمولی تغییر دهید تا پیام‌هایی که منجر به اعلان می‌شوند تنزل رتبه پیدا نکنند.

حریم خصوصی

اجازه زمان اجرا برای اعلان‌ها

Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) اجازه اعلان زمان اجرا را معرفی می‌کند: POST_NOTIFICATIONS. این تغییر به کاربران کمک می‌کند روی اعلان‌هایی که برایشان مهم‌تر است تمرکز کنند.

اکیداً توصیه می‌کنیم که در اسرع وقت Android 13 یا بالاتر را هدف‌یابی کنید تا از تأثیرات کنترل و انعطاف‌پذیری بیشتر این ویژگی بهره‌مند شوید.

درباره روال‌های مطلوب اجازه‌های برنامه بیشتر بدانید.

پنهان کردن محتوای حساس از بریده‌دان

اگر برنامه‌تان به کاربران اجازه می‌دهد محتوای حساس، مثل گذرواژه یا اطلاعات کارت اعتباری، را در بریده‌دان کپی کنند، باید قبل‌از فراخوانی ClipboardManager#setPrimaryClip()، پرچمی به ClipDescription ClipData اضافه کنید. افزودن این پرچم از نمایش محتوای حساس در پیش‌نمایش محتوا جلوگیری می‌کند.

پیش‌نمایش نوشتار کپی‌شده بدون پرچم‌گذاری محتوای حساس
پیش‌نمایش نوشتار کپی‌شده بدون پرچم‌گذاری محتوای حساس.
پیش‌نمایش نوشتار کپی‌شده که محتوای حساس را پرچم‌گذاری می‌کند.
پیش‌نمایش نوشتار کپی‌شده که محتوای حساس را پرچم‌گذاری می‌کند.

برای پرچم‌گذاری محتوای حساس، یک مقدار بولی اضافی به 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 نسخه ۱۳ یا بالاتر نصب شده باشد، برنامه‌تان طوری رفتار می‌کند که انگار هرگز android:sharedUserId را تعریف نکرده‌اید. برنامه‌های به‌روزشده همچنان از شناسه کاربر هم‌رسانی‌شده موجود استفاده می‌کنند.

شناسه‌های کاربر مشترک باعث رفتار غیرقطعی در مدیر بسته می‌شود. برنامه شما باید به‌جای آن از سازوکارهای ارتباطی مناسب، مانند سرویس‌ها و ارائه‌دهندگان محتوا، برای تسهیل قابلیت همکاری بین مؤلفه‌های مشترک استفاده کند.

تجربه کاربری

اعلان‌های سرویس پیش‌زمینه‌ای قابل‌بستن

در دستگاه‌هایی که Android نسخه ۱۳ یا بالاتر دارند، کاربران می‌توانند به‌طور پیش‌فرض اعلان‌های مرتبط با سرویس‌های پیش‌زمینه‌ای را ببندند.

عملکرد اصلی

نسخه قدیمی پیاده‌سازی سرویس گفتار برداشته شد

Android 13 پیاده‌سازی SpeechService را (شامل IME صوتی، RecognitionService و میانای برنامه‌سازی کاربردی مبتنی بر هدف) از برنامه Google برمی‌دارد.

در Android 12، تغییرات زیر رخ داده است:

  • عملکردهای SpeechService به برنامه سرویس‌های گفتاری از Google منتقل شد که به ارائه‌دهنده پیش‌فرض SpeechService تبدیل شد.
  • عملکرد RecognitionService به برنامه «هوش سامانه Android» منتقل شد تا از تشخیص گفتار درون‌دستگاهی پشتیبانی کند.

برای کمک به حفظ سازگاری برنامه در Android 12، برنامه Google از ترامپولین برای منحرف کردن ترافیک به برنامه «سرویس‌های گفتاری از Google» استفاده می‌کند. در Android 13، این ترامپولین برداشته شده است.

برنامه‌ها باید از ارائه‌دهنده پیش‌فرض دستگاه برای SpeechService استفاده کنند، نه اینکه برنامه خاصی را کدگذاری ثابت کنند.