แพลตฟอร์ม 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 (FCM) ที่มีลำดับความสำคัญสูง
Android 13 (API ระดับ 33) อัปเดตโควต้า Firebase Cloud Messaging (FCM) เพื่อปรับปรุงความน่าเชื่อถือของการนำส่ง FCM ที่มีลำดับความสำคัญสูงสำหรับแอปที่แสดงการแจ้งเตือนเพื่อตอบสนองต่อ FCM ที่มีลำดับความสำคัญสูง มีการเปลี่ยนแปลงต่อไปนี้ใน Android 13 (API ระดับ 33)
- App Standby Buckets จะไม่กำหนดจำนวน FCM ที่มีลำดับความสำคัญสูงที่แอปใช้ได้อีกต่อไป
- ตอนนี้ระบบจะลดระดับข้อความที่มีลำดับความสำคัญสูงหากตรวจพบว่าแอปส่งข้อความที่มีลำดับความสำคัญสูงอย่างสม่ำเสมอซึ่งไม่ส่งผลให้มีการแจ้งเตือน
เช่นเดียวกับ Android เวอร์ชันก่อนหน้า FCM ที่มีลำดับความสำคัญสูงซึ่งเกินโควต้าจะลดระดับเป็นลำดับความสำคัญปกติ เมื่อเริ่มบริการที่ทำงานเบื้องหน้า (FGS) เพื่อตอบสนองต่อ FCM เราขอแนะนำให้ตรวจสอบผลลัพธ์ของ RemoteMessage.getPriority()
และยืนยันว่าผลลัพธ์เป็น PRIORITY_HIGH
และ/หรือจัดการข้อยกเว้น ForegroundServiceStartNotAllowedException
ที่อาจเกิดขึ้น
หากแอปพลิเคชันของคุณไม่ได้โพสต์การแจ้งเตือนเสมอเพื่อตอบสนองต่อ FCM ที่มีลำดับความสำคัญสูง เราขอแนะนำให้คุณเปลี่ยนลำดับความสำคัญของ FCM เหล่านี้เป็นปกติ เพื่อไม่ให้ระบบลดระดับข้อความที่ทำให้เกิดการแจ้งเตือน
ความเป็นส่วนตัว
สิทธิ์รันไทม์สำหรับการแจ้งเตือน
Android 13 (API ระดับ 33) เปิดตัว
สิทธิ์การแจ้งเตือนขณะรันไทม์
POST_NOTIFICATIONS
การเปลี่ยนแปลงนี้จะช่วยให้ผู้ใช้โฟกัสกับการแจ้งเตือนที่สำคัญที่สุดสำหรับตนเองได้
เราขอแนะนำอย่างยิ่งให้คุณกำหนดเป้าหมายเป็น Android 13 ขึ้นไปโดยเร็วที่สุดเพื่อรับผลจากการควบคุมและความยืดหยุ่นเพิ่มเติมของฟีเจอร์นี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ แนวทางปฏิบัติแนะนำเกี่ยวกับสิทธิ์ของแอป
ซ่อนเนื้อหาที่ละเอียดอ่อนจากคลิปบอร์ด
หากแอปอนุญาตให้ผู้ใช้คัดลอกเนื้อหาที่ละเอียดอ่อน เช่น รหัสผ่านหรือข้อมูลบัตรเครดิต
ไปยังคลิปบอร์ด คุณต้องเพิ่มแฟล็กไปยัง ClipDescription
ของ ClipData ก่อนเรียกใช้ ClipboardManager#setPrimaryClip()
การเพิ่ม
ธงนี้จะป้องกันไม่ให้เนื้อหาที่ละเอียดอ่อนปรากฏในตัวอย่างเนื้อหา


หากต้องการแจ้งเนื้อหาที่ละเอียดอ่อน ให้เพิ่มบูลีนพิเศษไปยัง 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
ออกจากแอป Google ซึ่งรวมถึง
IME ด้วยเสียง RecognitionService
และ API ที่อิงตาม Intent
ใน Android 12 มีการเปลี่ยนแปลงต่อไปนี้
SpeechService
มีการย้ายฟังก์ชันการทำงานไปยังแอป Speech Services by Google ซึ่งกลายเป็นผู้ให้บริการSpeechService
เริ่มต้นRecognitionService
ได้ย้ายไปไว้ในแอป Android System Intelligence เพื่อรองรับการจดจำคำพูดในอุปกรณ์
แอป Google ใช้ทรามโปลีนเพื่อเปลี่ยนเส้นทางการเข้าชมไปยังแอปบริการเสียงของ Google เพื่อช่วยรักษาความเข้ากันได้ของแอปใน Android 12 แต่ใน Android 13 จะไม่มีทรามโปลีนนี้
แอปควรใช้ผู้ให้บริการเริ่มต้นของอุปกรณ์สำหรับ SpeechService
แทนการ
ฮาร์ดโค้ดแอปใดแอปหนึ่ง