การเปลี่ยนแปลงลักษณะการทํางาน: แอปทั้งหมด

แพลตฟอร์ม Android 13 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอป การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปทั้งหมดเมื่อทำงานใน Android 13 ไม่ว่า targetSdkVersion จะเป็นอย่างไรก็ตาม คุณควรทดสอบแอปแล้วแก้ไขตามต้องการ เพื่อรองรับแอปเหล่านี้ได้อย่างถูกต้อง หากทำได้

นอกจากนี้ อย่าลืมตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลต่อแอปที่กำหนดเป้าหมายเป็น Android 13 เท่านั้น

ประสิทธิภาพและแบตเตอรี่

ตัวจัดการงาน

ที่ด้านล่างของลิ้นชักการแจ้งเตือนจะมีปุ่มที่ระบุจำนวนแอปที่ทำงานอยู่เบื้องหลัง เมื่อกดปุ่มนี้ กล่องโต้ตอบจะปรากฏขึ้นพร้อมแสดงชื่อแอปต่างๆ ปุ่มหยุดอยู่ทางด้านขวาของแต่ละแอป
รูปที่ 1 เวิร์กโฟลว์สำหรับตัวจัดการงาน ซึ่งช่วยให้ผู้ใช้หยุดแอปที่มีบริการที่ทำงานอยู่เบื้องหน้าได้ เวิร์กโฟลว์นี้ จะปรากฏเฉพาะในอุปกรณ์ที่ใช้ 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 ที่มีลำดับความสำคัญสูง

เช่นเดียวกับ Android เวอร์ชันก่อนหน้า FCM ที่มีลำดับความสำคัญสูงซึ่งใช้โควต้าจะถูกดาวน์เกรดลงสู่ลำดับความสำคัญปกติ เมื่อเริ่มบริการที่ทำงานอยู่เบื้องหน้า (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 ซึ่งรวมถึง IME แบบเสียง RecognitionService และ API ตาม Intent

ใน Android 12 จะมีการเปลี่ยนแปลงต่อไปนี้

  • ฟังก์ชันการทำงานของ SpeechService ได้ย้ายไปยังแอป Speech Services by Google ซึ่งกลายเป็นผู้ให้บริการ SpeechService เริ่มต้น
  • ฟังก์ชันการทำงานของ RecognitionService ได้ย้ายไปยังแอป Android System Intelligence เพื่อรองรับการจดจำคำพูดในอุปกรณ์

แอป Google ใช้ Trampoline เพื่อเปลี่ยนเส้นทางการเข้าชมไปยังแอป Speech Services by Google เพื่อช่วยรักษาความเข้ากันได้ของแอปใน Android 12 แต่เราจะนำ Trampoline นี้ออกใน Android 13

แอปควรใช้ผู้ให้บริการเริ่มต้นของอุปกรณ์สำหรับ SpeechService แทนการเขียนโค้ดแอปที่เจาะจง