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

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

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

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

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

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

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

    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 יכולה לפעול במצב אתחול ישיר. אפשר לבדוק את הדרישות הבאות:

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