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

แพลตฟอร์ม 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 (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() กำลังเพิ่ม แฟล็กนี้จะป้องกันไม่ให้เนื้อหาที่ละเอียดอ่อนปรากฏในตัวอย่างเนื้อหา

วันที่ ตัวอย่างข้อความที่คัดลอกโดยไม่แจ้งเนื้อหาที่ละเอียดอ่อน
คัดลอกตัวอย่างข้อความแล้วโดยไม่แจ้งเนื้อหาที่ละเอียดอ่อน
วันที่ คัดลอกตัวอย่างข้อความเพื่อแจ้งว่าเนื้อหาที่ละเอียดอ่อนไม่เหมาะสมแล้ว
คัดลอกตัวอย่างข้อความเพื่อแจ้งว่าเนื้อหาที่ละเอียดอ่อนไม่เหมาะสมแล้ว

หากต้องการแจ้งว่าเนื้อหาที่ละเอียดอ่อนไม่เหมาะสม ให้เพิ่มบูลีนเพิ่มเติมลงใน 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 แทนการใช้ การฮาร์ดโค้ดแอปที่เจาะจง