แพลตฟอร์ม 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) มีวิธีต่อไปนี้ที่ช่วยให้ระบบจัดการอายุการใช้งานแบตเตอรี่ของอุปกรณ์ได้ดียิ่งขึ้น
- กฎที่อัปเดตเกี่ยวกับกรณีที่ระบบจะนำแอปของคุณไปไว้ในที่เก็บข้อมูลสแตนด์บายแอปที่ "ถูกจำกัด"
- ขีดจํากัดใหม่เกี่ยวกับงานที่แอปของคุณทําได้เมื่อผู้ใช้นําแอปไปไว้ในสถานะ"ถูกจํากัด" สําหรับการใช้งานแบตเตอรี่ในเบื้องหลัง
เมื่อทดสอบแอปด้วยการเปลี่ยนแปลงเหล่านี้ โปรดตรวจสอบสิ่งต่อไปนี้
ทดสอบว่าแอปของคุณตอบสนองอย่างไรเมื่อระบบนำแอปไปไว้ในที่เก็บข้อมูลสแตนด์บายแอปที่ "ถูกจำกัด" ใช้คำสั่ง 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 Messaging (FCM) สำคัญสูง
Android 13 (API ระดับ 33) จะอัปเดตโควต้า Firebase Cloud Messaging (FCM) เพื่อเพิ่มความน่าเชื่อถือของการแสดง FCM ที่มีความสําคัญสูงสําหรับแอปที่แสดงการแจ้งเตือนเพื่อตอบสนองต่อ FCM ที่มีความสําคัญสูง การเปลี่ยนแปลงต่อไปนี้เกิดขึ้นใน Android 13 (API ระดับ 33)
- กลุ่มแอปสแตนด์บายจะไม่กำหนดจำนวน FCM สำคัญสูงที่แอปใช้ได้อีกต่อไป
- โควต้า FCM สำคัญสูงจะปรับตามสัดส่วนจำนวนการแจ้งเตือนที่แสดงต่อผู้ใช้เพื่อตอบสนองต่อ FCM สำคัญสูง
FCM สำคัญสูงที่มีจำนวนเกินโควต้าจะลดระดับเป็นสำคัญปกติ เช่นเดียวกับใน Android เวอร์ชันก่อนหน้า เมื่อเริ่มบริการที่ทำงานอยู่เบื้องหน้า (FGS) เพื่อตอบสนองต่อ FCM เราขอแนะนำให้ตรวจสอบผลลัพธ์ของ RemoteMessage.getPriority()
และยืนยันว่าเป็น PRIORITY_HIGH
และ/หรือจัดการข้อยกเว้น ForegroundServiceStartNotAllowedException
ที่อาจเกิดขึ้น
หากแอปพลิเคชันของคุณไม่ได้โพสต์การแจ้งเตือนเพื่อตอบสนองต่อ FCM สำคัญสูงเสมอไป เราขอแนะนำให้คุณเปลี่ยนลำดับความสำคัญของ FCM เหล่านี้เป็นปกติเพื่อไม่ให้ข้อความที่ส่งผลให้มีการแจ้งเตือนถูกลดระดับ
ความเป็นส่วนตัว
สิทธิ์รันไทม์สําหรับการแจ้งเตือน
Android 13 (API ระดับ 33) เปิดตัวรันไทม์สิทธิ์การแจ้งเตือน POST_NOTIFICATIONS
การเปลี่ยนแปลงนี้จะช่วยให้ผู้ใช้มุ่งเน้นที่การแจ้งเตือนที่สำคัญที่สุดสำหรับตน
เราขอแนะนําอย่างยิ่งให้คุณกําหนดเป้าหมายเป็น Android 13 ขึ้นไปโดยเร็วที่สุดเพื่อรับผลการควบคุมและความยืดหยุ่นเพิ่มเติมของฟีเจอร์นี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติแนะนำสำหรับสิทธิ์ของแอป
ซ่อนเนื้อหาที่ละเอียดอ่อนจากคลิปบอร์ด
หากแอปของคุณอนุญาตให้ผู้ใช้คัดลอกเนื้อหาที่ละเอียดอ่อน เช่น รหัสผ่านหรือข้อมูลบัตรเครดิต ไปยังคลิปบอร์ด คุณต้องเพิ่ม Flag ลงใน ClipDescription
ของ ClipData ก่อนเรียกใช้ ClipboardManager#setPrimaryClip()
การเพิ่ม Flag นี้จะช่วยป้องกันไม่ให้เนื้อหาที่ละเอียดอ่อนปรากฏในตัวอย่างเนื้อหา
หากต้องการแจ้งเนื้อหาที่ละเอียดอ่อน ให้เพิ่มบูลีนเพิ่มเติมลงใน 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
ที่เลิกใช้งานแล้วและไม่ได้ขึ้นอยู่กับฟังก์ชันการทํางานของแอตทริบิวต์อีกต่อไป คุณสามารถตั้งค่าแอตทริบิวต์เป็น 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
ออกจากแอป Google ซึ่งรวมถึง Voice IME, RecognitionService
และ API ที่อิงตามความตั้งใจ
ใน Android 12 มีการเปลี่ยนแปลงต่อไปนี้
- ฟังก์ชันการทำงานของ
SpeechService
ได้ย้ายไปยังแอป Speech Services by Google ซึ่งกลายเป็นผู้ให้บริการSpeechService
เริ่มต้น - ฟังก์ชัน
RecognitionService
ย้ายไปอยู่ในแอป Android System Intelligence เพื่อรองรับการรู้จำคำพูดในอุปกรณ์
แอป Google ใช้ Trampoline เพื่อเปลี่ยนเส้นทางการเข้าชมไปยังแอป Speech Services by Google เพื่อช่วยรักษาความเข้ากันได้ของแอปใน Android 12 แต่เราจะนำ Trampoline นี้ออกใน Android 13
แอปควรใช้ผู้ให้บริการเริ่มต้นของอุปกรณ์สำหรับ SpeechService
แทนการเขียนโค้ดแอปที่เจาะจง