แพลตฟอร์ม Android 13 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ
การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปทั้งหมดเมื่อทำงานใน Android 13
โดยไม่คำนึงถึง targetSdkVersion
คุณควรทดสอบแอปแล้วแก้ไขเป็น
ที่จำเป็นต่อการสนับสนุนอย่างเหมาะสม ในกรณีที่เกี่ยวข้อง
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลต่อแอปเท่านั้นด้วย ที่กำหนดเป้าหมายเป็น Android 13
ประสิทธิภาพและแบตเตอรี่
ตัวจัดการงาน
เริ่มตั้งแต่ Android 13 (API ระดับ 33) เป็นต้นไป ผู้ใช้จะทำเวิร์กโฟลว์ให้เสร็จได้จาก ลิ้นชักการแจ้งเตือนเพื่อหยุดแอปที่กำลังให้บริการที่ทำงานอยู่เบื้องหน้า ดังที่แสดง ในรูปที่ 1 ค่าตอบแทนนี้เรียกว่า ตัวจัดการงาน แอปต้องจัดการกับ เริ่มโดยผู้ใช้ การหยุด
ปรับปรุงการจัดการการดึงข้อมูลงานล่วงหน้าโดยใช้ JobScheduler
JobScheduler จะช่วยให้แอปทำเครื่องหมายงานที่เฉพาะเจาะจงเป็น "ดึงข้อมูลล่วงหน้า"
งาน (โดยใช้ JobInfo.Builder.setPrefetch()
) หมายความว่างานเหล่านั้นควรจะทำงาน
และก่อนที่จะเปิดตัวแอปครั้งต่อไป เพื่อปรับปรุงประสบการณ์ของผู้ใช้
ก่อนหน้านี้ JobScheduler จะใช้สัญญาณเพื่อดึงข้อมูลงานล่วงหน้าเท่านั้น
ใช้ข้อมูลที่ฟรีหรือข้อมูลส่วนเกินตามโอกาส
ใน Android 13 (API ระดับ 33) ขึ้นไป ระบบจะพยายาม ระบุครั้งถัดไปที่จะมีการเปิดตัวแอปและใช้การประมาณนั้นในการเรียกใช้ ดึงข้อมูลงานล่วงหน้า แอปควรพยายามใช้การดึงข้อมูลงานล่วงหน้าสำหรับงานที่ต้องการ ก่อนที่จะเปิดตัวแอปครั้งถัดไป
การใช้ทรัพยากรแบตเตอรี่
Android 13 (API ระดับ 33) มอบวิธีต่อไปนี้เพื่อให้ระบบทำงานได้ดีขึ้น จัดการอายุการใช้งานแบตเตอรี่ของอุปกรณ์:
- อัปเดตกฎเกี่ยวกับเวลาที่ระบบวางแอปของคุณใน "ถูกจำกัด" แอป ที่เก็บข้อมูลสแตนด์บาย
- ข้อจำกัดใหม่ๆ เกี่ยวกับงานที่แอปทำได้เมื่อผู้ใช้วางแอปของคุณ ในช่วง "จำกัด" State สำหรับ การใช้งานแบตเตอรี่ในเบื้องหลัง
ขณะทดสอบแอปด้วยการเปลี่ยนแปลงเหล่านี้ อย่าลืมตรวจสอบสิ่งต่อไปนี้ สิ่งต่างๆ:
ทดสอบว่าแอปของคุณตอบสนองอย่างไรเมื่อระบบวางแอปไว้ในส่วน "ถูกจำกัด" แอป ที่เก็บข้อมูลสแตนด์บาย ใช้เมนู คำสั่ง 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 Cloud (FCM) ที่มีลำดับความสำคัญสูง
Android 13 (API ระดับ 33) อัปเดตโควต้า Firebase Cloud Messaging (FCM) เพื่อปรับปรุงความน่าเชื่อถือของการนำส่ง FCM ที่มีลำดับความสำคัญสูงสำหรับแอปที่แสดงการแจ้งเตือนเพื่อตอบสนองต่อ FCM ที่มีลำดับความสำคัญสูง รายการต่อไปนี้มีการเปลี่ยนแปลงใน Android 13 (API ระดับ 33)
- ที่เก็บข้อมูลสแตนด์บายแอปไม่ได้กำหนดว่าแอปหนึ่งๆ จะใช้ FCM ที่มีลำดับความสำคัญสูงได้กี่รายการ
- โควต้า FCM ที่มีลำดับความสำคัญสูงจะปรับขนาดตามสัดส่วนของจำนวนการแจ้งเตือนที่แสดงต่อผู้ใช้เพื่อตอบสนองต่อ FCM ที่มีลำดับความสำคัญสูง
เช่นเดียวกับ Android เวอร์ชันก่อนหน้า FCM ที่มีลำดับความสำคัญสูงซึ่งใช้โควต้าจะถูกดาวน์เกรดลงสู่ลำดับความสำคัญปกติ เมื่อเริ่มบริการที่ทำงานอยู่เบื้องหน้า (FGS) เพื่อตอบสนองต่อ FCM เราขอแนะนำให้ตรวจสอบผลลัพธ์ของ RemoteMessage.getPriority()
และเพื่อยืนยันว่าเป็น PRIORITY_HIGH
และ/หรือจัดการกับข้อยกเว้น ForegroundServiceStartNotAllowedException
ที่อาจเกิดขึ้น
หากแอปพลิเคชันไม่ได้โพสต์การแจ้งเตือนเกี่ยวกับ FCM ที่มีลำดับความสำคัญสูงเสมอไป เราขอแนะนำให้เปลี่ยนลำดับความสำคัญของ FCM เหล่านี้เป็นปกติเพื่อไม่ให้ข้อความที่ทำให้เกิดการแจ้งเตือนดาวน์เกรด
ความเป็นส่วนตัว
สิทธิ์รันไทม์สำหรับการแจ้งเตือน
Android 13 (API ระดับ 33) เปิดตัวรันไทม์
สิทธิ์การแจ้งเตือน:
POST_NOTIFICATIONS
การเปลี่ยนแปลงนี้ช่วยให้ผู้ใช้จดจ่อกับการแจ้งเตือนที่สำคัญที่สุด
ให้พวกเขา
เราขอแนะนําให้คุณกําหนดเป้าหมายเป็น Android 13 ขึ้นไปโดยเร็วที่สุด เพื่อรับผลกระทบของการควบคุมและความยืดหยุ่นที่เพิ่มขึ้น ฟีเจอร์นี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ แนวทางปฏิบัติแนะนำสำหรับสิทธิ์ของแอป
ซ่อนเนื้อหาที่ละเอียดอ่อนจากคลิปบอร์ด
หากแอปอนุญาตให้ผู้ใช้คัดลอกเนื้อหาที่ละเอียดอ่อน เช่น รหัสผ่านหรือเครดิต
ไปยังคลิปบอร์ดแล้ว คุณต้องเพิ่มธงลงใน ClipData
ClipDescription
ก่อนโทรหา ClipboardManager#setPrimaryClip()
กำลังเพิ่ม
แฟล็กนี้จะป้องกันไม่ให้เนื้อหาที่ละเอียดอ่อนปรากฏในตัวอย่างเนื้อหา
![ตัวอย่างข้อความที่คัดลอกโดยไม่แจ้งเนื้อหาที่ละเอียดอ่อน](https://developer.android.google.cn/static/images/about/versions/13/sensitive-content-before.png?authuser=3&hl=th)
![คัดลอกตัวอย่างข้อความเพื่อแจ้งว่าเนื้อหาที่ละเอียดอ่อนไม่เหมาะสมแล้ว](https://developer.android.google.cn/static/images/about/versions/13/sensitive-content-after.png?authuser=3&hl=th)
หากต้องการแจ้งว่าเนื้อหาที่ละเอียดอ่อนไม่เหมาะสม ให้เพิ่มบูลีนเพิ่มเติมลงใน 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)
}
}
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ UI คลิปบอร์ดใหม่ โปรดไปที่ คัดลอกและวางหน้าฟีเจอร์
ความปลอดภัย
ย้ายข้อมูลออกจากรหัสผู้ใช้ที่แชร์
หากแอปใช้อุปกรณ์ที่เลิกใช้งานแล้ว
แอตทริบิวต์ของ 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
ออก ซึ่งรวมถึง
IME สำหรับเสียง RecognitionService
และอิงตามความตั้งใจ
API - จาก
แอป Google
ใน Android 12 จะมีการเปลี่ยนแปลงต่อไปนี้
- ระบบย้ายข้อมูลฟังก์ชัน
SpeechService
รายการไปยัง Speech Services แล้วโดย Google แอป ซึ่งกลายเป็นผู้ให้บริการSpeechService
เริ่มต้นแล้ว - ย้ายฟังก์ชันการทำงานของ
RecognitionService
ไปยังระบบ Android แล้ว แอปอัจฉริยะที่รองรับการรู้จำคำพูดในอุปกรณ์
แอป Google ช่วยรักษาความเข้ากันได้ของแอปใน Android 12 ใช้แทรมโพลีนเพื่อเปลี่ยนเส้นทางการเข้าชมไปยังแอป Speech Services by Google ใน Android 13 แทรมโพลีนนี้จะถูกนำออก
แอปควรใช้ผู้ให้บริการเริ่มต้นของอุปกรณ์สำหรับ SpeechService
แทนการใช้
การฮาร์ดโค้ดแอปที่เจาะจง