קבלת הודעות FCM במצב הפעלה ישירה

אם רוצים לשלוח הודעות FCM לאפליקציות לפני שהמכשיר פתוח, אפשר להפעיל את מצב ההפעלה הישירה. לדוגמה, אם אתם רוצים שהמשתמשים באפליקציה יקבלו התראות על שעון מעורר גם כשהמכשיר נעול.

כשמפתחים את תרחיש השימוש הזה, חשוב לשים לב לשיטות המומלצות ולהגבלות הכלליות של מצב הפעלה ישירה. חשוב להביא בחשבון את החשיפה של הודעות שמופעלות בהפעלה ישירה. כל משתמש שיש לו גישה למכשיר יכול לראות את ההודעות האלה בלי להזין פרטי כניסה.

דרישות מוקדמות

  • המכשיר צריך להיות מוגדר למצב הפעלה ישירה.
  • במכשיר צריכה להיות מותקנת גרסה עדכנית של Google Play Services (גרסה 19.0.54 ואילך).
  • כדי לקבל הודעות FCM, האפליקציה צריכה להשתמש ב-FCM SDK (com.google.firebase:firebase-messaging).

הפעלת הטיפול בהודעות במצב Direct Boot באפליקציה

  1. בקובץ Gradle ברמת האפליקציה, מוסיפים תלות בספריית התמיכה של FCM ב-Direct Boot:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. כדי שהאפליקציה FirebaseMessagingService תתמוך באתחול ישיר, צריך להוסיף את המאפיין android:directBootAware="true" לקובץ המניפסט של האפליקציה:

    <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.
  • השירות לא צריך לנסות להשתמש ברכיבים כמו Activities,‏ BroadcastReceivers או Services אחרים שלא מסומנים כרכיבים שמותאמים להפעלה ישירה בזמן שהמכשיר פועל במצב הפעלה ישירה.
  • בנוסף, כל הספרייה שהשירות משתמש בה לא יכולה לגשת לאחסון שמוגן באמצעות פרטי כניסה או לקרוא לרכיבים שהם לא directBootAware בזמן שהיא פועלת במצב Direct Boot. כלומר, כל הספרייה שהאפליקציה משתמשת בה ונקראת מהשירות צריכה לתמוך באתחול ישיר, או שהאפליקציה צריכה לבדוק אם היא פועלת במצב אתחול ישיר ולא לקרוא להן במצב הזה. לדוגמה, ערכות ה-SDK של Firebase פועלות עם הפעלה ישירה (אפשר לכלול אותן באפליקציה בלי שהיא תקרוס במצב הפעלה ישירה), אבל הרבה ממשקי API של Firebase לא תומכים בקריאה במצב הפעלה ישירה.
  • אם האפליקציה משתמשת ב-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,
    },
}