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

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

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

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

Task Manager

در پایین کشوی اعلان ها دکمه ای وجود دارد که تعداد برنامه هایی را که در حال حاضر در پس زمینه در حال اجرا هستند را نشان می دهد. هنگامی که این دکمه را فشار می دهید، یک گفتگو ظاهر می شود که نام برنامه های مختلف را لیست می کند. دکمه Stop در سمت راست هر برنامه قرار دارد
شکل 1. گردش کار برای Task Manager، که به کاربران اجازه می دهد برنامه هایی را که دارای خدمات پیش زمینه مداوم هستند متوقف کنند. این گردش کار فقط در دستگاه‌هایی نشان داده می‌شود که دارای Android نسخه 13 یا بالاتر هستند.

همانطور که در شکل 1 نشان داده شده است، از Android 13 (سطح API 33)، کاربران می‌توانند یک گردش کار را از کشوی اعلان برای توقف برنامه‌هایی که خدمات پیش‌زمینه دائمی دارند، تکمیل کنند. این توانایی به عنوان Task Manager شناخته می‌شود. برنامه ها باید بتوانند این توقف ایجاد شده توسط کاربر را مدیریت کنند .

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

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

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

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

Android 13 (سطح API 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 (سطح API 33) سهمیه‌های Firebase Cloud Messaging (FCM) را برای بهبود قابلیت اطمینان تحویل FCM با اولویت بالا برای برنامه‌هایی که اعلان‌ها را در پاسخ به FCM‌های با اولویت بالا نشان می‌دهند، به‌روزرسانی می‌کند. موارد زیر در Android 13 (سطح API 33) تغییر کرده است:

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

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

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

حریم خصوصی

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

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

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

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

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

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

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

برای پرچم‌گذاری محتوای حساس، یک بولی اضافی به ClipDescription اضافه کنید. همه برنامه ها باید این کار را انجام دهند، صرف نظر از سطح API مورد نظر.


// 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 اجرای SpeechService - از جمله Voice IME، RecognitionService و API مبتنی بر هدف - را از برنامه Google حذف می‌کند.

در اندروید 12 تغییرات زیر رخ داد:

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

برای کمک به حفظ سازگاری برنامه در Android 12، برنامه Google از یک ترامپولین برای هدایت ترافیک به سمت برنامه Speech Services by Google استفاده می کند. در اندروید 13 این ترامپولین حذف شده است.

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