รับข้อความ FCM ในโหมดการเปิดเครื่องโดยตรง

หากต้องการส่งข้อความ FCM ไปยังแอปก่อนที่จะปลดล็อกอุปกรณ์ คุณสามารถเปิดใช้โหมด Direct Boot ได้ เช่น หากคุณต้องการให้ผู้ใช้แอปได้รับการแจ้งเตือนการปลุกแม้ในอุปกรณ์ที่ล็อกอยู่

เมื่อสร้าง Use Case นี้ ให้ปฏิบัติตามแนวทางปฏิบัติแนะนำและข้อจำกัดทั่วไปสำหรับโหมด Direct Boot คุณควรพิจารณาระดับการเข้าถึงของข้อความที่เปิดใช้ Direct Boot ผู้ใช้ทุกคนที่มีสิทธิ์เข้าถึงอุปกรณ์จะดูข้อความเหล่านี้ได้โดยไม่ต้องป้อนข้อมูลเข้าสู่ระบบของผู้ใช้

ข้อกำหนดเบื้องต้น

  • ต้องตั้งค่าอุปกรณ์สำหรับโหมด Direct Boot
  • อุปกรณ์ต้องติดตั้งบริการ Google Play เวอร์ชันล่าสุด (19.0.54 ขึ้นไป)
  • แอปต้องใช้ FCM SDK (com.google.firebase:firebase-messaging) เพื่อรับข้อความ FCM

เปิดใช้การจัดการข้อความในโหมดเปิดเครื่องโดยตรงในแอป

  1. ในไฟล์ Gradle ระดับแอป ให้เพิ่มทรัพยากร Dependency ในไลบรารีการสนับสนุน Direct Boot ของ FCM

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. ทำให้ FirebaseMessagingService ของแอปทราบถึงการเปิดเครื่องโดยตรงด้วยการเพิ่มแอตทริบิวต์ android:directBootAware="true" ในไฟล์ Manifest ของแอป

    <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false"
        android:directBootAware="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

คุณต้องตรวจสอบว่า FirebaseMessagingService นี้สามารถทำงานในโหมด Direct Boot ได้ คุณตรวจสอบได้โดยใช้ข้อกำหนดต่อไปนี้

  • บริการไม่ควรเข้าถึงพื้นที่เก็บข้อมูลที่ได้รับการปกป้องด้วยข้อมูลเข้าสู่ระบบขณะทำงานในโหมด Direct Boot
  • บริการไม่ควรพยายามใช้คอมโพเนนต์ เช่น Activities, BroadcastReceivers หรือ Services อื่นๆ ที่ไม่ได้ทำเครื่องหมายว่ารับรู้การเปิดเครื่องโดยตรงขณะทำงานในโหมดเปิดเครื่องโดยตรง
  • ไลบรารีที่บริการใช้ต้องไม่เข้าถึงพื้นที่เก็บข้อมูลที่ได้รับการปกป้องด้วยข้อมูลเข้าสู่ระบบหรือเรียกคอมโพเนนต์ที่ไม่ใช่ directBootAware ขณะทำงานในโหมด Direct Boot ซึ่งหมายความว่าไลบรารีที่แอปใช้ซึ่งเรียกจากบริการจะต้องรับรู้ถึงโหมด Direct Boot หรือแอปจะต้องตรวจสอบว่ากำลังทำงานในโหมด Direct Boot หรือไม่ และไม่เรียกใช้ไลบรารีเหล่านั้นในโหมดดังกล่าว ตัวอย่างเช่น Firebase SDK ทำงานร่วมกับการเปิดเครื่องโดยตรง (สามารถรวมไว้ในแอปได้โดยไม่ทำให้แอปขัดข้องในโหมดเปิดเครื่องโดยตรง) แต่ Firebase API จำนวนมากไม่รองรับการเรียกใช้ในโหมดเปิดเครื่องโดยตรง
  • หากแอปใช้ Application ที่กำหนดเอง Application จะต้องรับรู้ถึงการเปิดเครื่องโดยตรงด้วย (ไม่มีสิทธิ์เข้าถึงพื้นที่เก็บข้อมูลที่ได้รับการปกป้องด้วยข้อมูลเข้าสู่ระบบในโหมดเปิดเครื่องโดยตรง)

ส่งข้อความที่เปิดใช้การเปิดเครื่องโดยตรง

คุณสามารถส่งข้อความไปยังอุปกรณ์ในโหมด Direct Boot โดยใช้ HTTP v1 API

คำขอข้อความต้องมีคีย์ "direct_boot_ok": true ในตัวเลือก AndroidConfig ของเนื้อความคำขอ เช่น

https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
  "message":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data": {
      "score": "5x1",
      "time": "15:10"
    },
    "android": {
      "direct_boot_ok": true,
    },
}