หากต้องการส่งข้อความ FCM ไปยังแอปก่อนที่อุปกรณ์จะ ปลดล็อก คุณสามารถเปิดใช้โหมดการบูตโดยตรงได้ เช่น หากต้องการให้ผู้ใช้แอปได้รับการแจ้งเตือนการปลุกแม้ในอุปกรณ์ที่ล็อกอยู่
เมื่อสร้าง Use Case นี้ ให้สังเกตแนวทางปฏิบัติแนะนำและข้อจำกัดทั่วไปสำหรับโหมดการบูตโดยตรง คุณควรพิจารณา การมองเห็นของข้อความที่เปิดใช้การบูตโดยตรง ผู้ใช้ทุกคนที่มีสิทธิ์เข้าถึงอุปกรณ์จะดูข้อความเหล่านี้ได้โดยไม่ต้องป้อนข้อมูลเข้าสู่ระบบของผู้ใช้
ข้อกำหนดเบื้องต้น
- ต้องตั้งค่าอุปกรณ์สำหรับโหมดการบูตโดยตรง
- อุปกรณ์ต้องติดตั้งบริการ Google Play เวอร์ชันล่าสุด (19.0.54 ขึ้นไป)
- แอปต้องใช้ FCM SDK (
com.google.firebase:firebase-messaging) เพื่อรับข้อความ FCM
เปิดใช้การจัดการข้อความโหมดการบูตโดยตรงในแอป
ในไฟล์ Gradle ระดับแอป ให้เพิ่มทรัพยากร Dependency ในไลบรารีการรองรับการบูตโดยตรงของ FCMdirect boot ดังนี้
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'ทำให้
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 นี้สามารถทำงานในโหมดการบูตโดยตรงได้ โดยตรวจสอบตามข้อกำหนดต่อไปนี้
- บริการไม่ควรเข้าถึงพื้นที่เก็บข้อมูลที่ป้องกันด้วยข้อมูลเข้าสู่ระบบขณะทำงานในโหมดการบูตโดยตรง
- บริการไม่ควรพยายามใช้คอมโพเนนต์ เช่น
Activities,BroadcastReceiversหรือServicesอื่นๆ ที่ไม่ได้ทำเครื่องหมายว่ารับรู้ถึงการบูตโดยตรงขณะทำงานในโหมดการบูตโดยตรง - ไลบรารีใดๆ ที่บริการใช้จะต้องไม่เข้าถึงพื้นที่เก็บข้อมูลที่ป้องกันด้วยข้อมูลเข้าสู่ระบบและไม่เรียกคอมโพเนนต์ที่ไม่ใช่ directBootAware ขณะทำงานในโหมดการบูตโดยตรง ซึ่งหมายความว่าไลบรารีใดๆ ที่แอปใช้และเรียกจากบริการจะต้องรับรู้ถึงการบูตโดยตรง หรือแอปจะต้องตรวจสอบว่ากำลังทำงานในโหมดการบูตโดยตรงหรือไม่ และไม่เรียกใช้ไลบรารีเหล่านั้นในโหมดดังกล่าว ตัวอย่างเช่น Firebase SDK ทำงานกับการบูตโดยตรงได้ (สามารถรวมไว้ในแอปได้โดยไม่ทำให้แอปขัดข้องในโหมดการบูตโดยตรง) แต่ Firebase API หลายรายการไม่รองรับการเรียกใช้ในโหมดการบูตโดยตรง
- หากแอปใช้
Applicationที่กำหนดเองApplicationจะต้องรับรู้ถึงการบูตโดยตรงด้วย (ไม่มีสิทธิ์เข้าถึงพื้นที่เก็บข้อมูลที่ป้องกันด้วยข้อมูลเข้าสู่ระบบในโหมดการบูตโดยตรง)
ส่งข้อความที่เปิดใช้การบูตโดยตรง
คุณสามารถส่งข้อความไปยังอุปกรณ์ในโหมดการบูตโดยตรงได้โดยใช้ 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,
},
}