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

แพลตฟอร์ม 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)

  • 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 แทนการ ฮาร์ดโค้ดแอปใดแอปหนึ่ง