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

แพลตฟอร์ม 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) มีวิธีต่อไปนี้เพื่อให้ระบบจัดการอายุการใช้งานแบตเตอรี่ของอุปกรณ์ได้ดียิ่งขึ้น

ขณะทดสอบแอปด้วยการเปลี่ยนแปลงเหล่านี้ โปรดตรวจสอบสิ่งต่อไปนี้

  • ทดสอบว่าแอปของคุณตอบสนองอย่างไรเมื่อระบบนำแอปไปไว้ใน Bucket สแตนด์บายแอปที่"ถูกจำกัด" ใช้คำสั่ง 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 Message (FCM) ที่มีลำดับความสำคัญสูง

Android 13 (ระดับ API 33) อัปเดตโควต้า Firebase Cloud Messaging (FCM) เพื่อปรับปรุงความน่าเชื่อถือของการนำส่ง FCM ที่มีลำดับความสำคัญสูงสำหรับแอปที่แสดงการแจ้งเตือนเพื่อตอบสนองต่อ FCM ที่มีลำดับความสำคัญสูง มีการเปลี่ยนแปลงต่อไปนี้ใน Android 13 (API ระดับ 33)

  • สแตนด์บายแอป 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การใช้งาน ซึ่งรวมถึง IME ด้วยเสียง RecognitionService และ API ที่อิงตาม Intent ออกจาก แอป Google

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

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

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

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