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

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

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

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

مدیر وظیفه

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

از اندروید ۱۳ (سطح API ۳۳)، کاربران می‌توانند از طریق کشوی اعلان‌ها، یک گردش کار را برای متوقف کردن برنامه‌هایی که سرویس‌های پیش‌زمینه‌ی مداوم دارند، تکمیل کنند، همانطور که در شکل ۱ نشان داده شده است. این قابلیت به عنوان Task Manager شناخته می‌شود. برنامه‌ها باید بتوانند این توقفِ آغاز شده توسط کاربر را مدیریت کنند .

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

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

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

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

اندروید ۱۳ (سطح API ۳۳) روش‌های زیر را برای مدیریت بهتر عمر باتری دستگاه در اختیار سیستم قرار می‌دهد:

  • قوانین مربوط به زمانی که سیستم برنامه شما را در سطل آماده به کار برنامه "محدود" قرار می‌دهد، به‌روزرسانی شد.
  • محدودیت‌های جدید در مورد کاری که برنامه شما می‌تواند انجام دهد، زمانی که کاربر برنامه شما را برای استفاده از باتری در پس‌زمینه در حالت «محدود» قرار می‌دهد.

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

  • بررسی کنید که وقتی سیستم برنامه شما را در سطل آماده به کار برنامه "محدود" قرار می‌دهد، چگونه پاسخ می‌دهد. از دستور 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
    

سهمیه‌های پیام ابری فایربیس با اولویت بالا (FCM)

اندروید ۱۳ (API سطح ۳۳) سهمیه‌های Firebase Cloud Messaging (FCM) را به‌روزرسانی می‌کند تا قابلیت اطمینان تحویل FCM با اولویت بالا را برای برنامه‌هایی که در پاسخ به FCM های با اولویت بالا اعلان نشان می‌دهند، بهبود بخشد. موارد زیر در اندروید ۱۳ (API سطح ۳۳) تغییر کرده است:

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

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

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

حریم خصوصی

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

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

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

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

مخفی کردن محتوای حساس از کلیپ‌بورد

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

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

تجربه کاربری

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

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

عملکرد اصلی

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

اندروید ۱۳ پیاده‌سازی SpeechService - شامل Voice IME، RecognitionService و یک API مبتنی بر هدف - را از برنامه گوگل حذف می‌کند.

در اندروید ۱۲، تغییرات زیر رخ داده است:

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

برای کمک به حفظ سازگاری برنامه در اندروید ۱۲، برنامه گوگل از یک ترامپولین برای هدایت ترافیک به برنامه Speech Services by Google استفاده می‌کند. در اندروید ۱۳، این ترامپولین حذف شده است.

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