डायरेक्ट बूट मोड में FCM मैसेज पाएं

अगर डिवाइस अनलॉक होने से पहले, आपको ऐप्लिकेशन पर FCM मैसेज भेजने हैं, तो डायरेक्ट बूट मोड चालू किया जा सकता है. उदाहरण के लिए, अगर आपको यह पक्का करना है कि आपके ऐप्लिकेशन के उपयोगकर्ताओं को लॉक किए गए डिवाइस पर भी अलार्म के नोटिफ़िकेशन मिलें.

इस इस्तेमाल के उदाहरण को बनाते समय, डायरेक्ट बूट मोड के लिए सामान्य सबसे सही तरीकों और पाबंदियों का पालन करें. यह जानना ज़रूरी है कि डायरेक्ट बूट मोड में भेजे गए मैसेज किस तरह दिखते हैं. डिवाइस का ऐक्सेस रखने वाला कोई भी उपयोगकर्ता, उपयोगकर्ता के क्रेडेंशियल डाले बिना इन मैसेज को देख सकता है.

ज़रूरी शर्तें

  • डिवाइस को डायरेक्ट बूट मोड के लिए सेट अप किया जाना चाहिए.
  • डिवाइस में Google Play services का नया वर्शन (19.0.54 या इसके बाद का वर्शन) इंस्टॉल होना चाहिए.
  • FCM मैसेज पाने के लिए, ऐप्लिकेशन में FCM SDK (com.google.firebase:firebase-messaging) का इस्तेमाल किया जाना चाहिए.FCM

अपने ऐप्लिकेशन में, डायरेक्ट बूट मोड में मैसेज हैंडल करने की सुविधा चालू करना

  1. ऐप्लिकेशन-लेवल की Gradle फ़ाइल में, FCM डायरेक्ट बूट की सुविधा वाली लाइब्रेरी के लिए डिपेंडेंसी जोड़ें:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. ऐप्लिकेशन के manifest में, android:directBootAware="true" एट्रिब्यूट जोड़कर, ऐप्लिकेशन के FirebaseMessagingService को डायरेक्ट बूट मोड के बारे में जानकारी दें:

    <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.
  • डायरेक्ट बूट मोड में काम करते समय, सेवा जिन लाइब्रेरी का इस्तेमाल करती है उन्हें भी क्रेडेंशियल से सुरक्षित किए गए स्टोरेज को ऐक्सेस नहीं करना चाहिए. साथ ही, उन्हें ऐसे कॉम्पोनेंट को कॉल नहीं करना चाहिए जिन्हें डायरेक्ट बूट मोड के लिए मार्क नहीं किया गया है. इसका मतलब है कि ऐप्लिकेशन जिन लाइब्रेरी का इस्तेमाल करता है और जिन्हें सेवा से कॉल किया जाता है उन्हें डायरेक्ट बूट मोड के लिए मार्क किया जाना चाहिए. इसके अलावा, ऐप्लिकेशन को यह भी देखना होगा कि वह डायरेक्ट बूट मोड में काम कर रहा है या नहीं. अगर वह डायरेक्ट बूट मोड में काम कर रहा है, तो उसे उन लाइब्रेरी को कॉल नहीं करना चाहिए. उदाहरण के लिए, Firebase SDK टूल डायरेक्ट बूट मोड में काम करते हैं. इन्हें किसी ऐप्लिकेशन में शामिल किया जा सकता है. ऐसा करने से, ऐप्लिकेशन डायरेक्ट बूट मोड में क्रैश नहीं होता. हालांकि, Firebase के कई एपीआई, डायरेक्ट बूट मोड में कॉल किए जाने पर काम नहीं करते.
  • अगर ऐप्लिकेशन में कस्टम Application का इस्तेमाल किया जा रहा है, तो Application को भी डायरेक्ट बूट मोड के लिए मार्क किया जाना चाहिए. इसका मतलब है कि डायरेक्ट बूट मोड में, क्रेडेंशियल से सुरक्षित किए गए स्टोरेज को ऐक्सेस नहीं किया जा सकता.

डायरेक्ट बूट मोड में भेजे जाने वाले मैसेज भेजना

HTTP v1 API का इस्तेमाल करके, डायरेक्ट बूट मोड में मौजूद डिवाइसों को मैसेज भेजे जा सकते हैं.

मैसेज के अनुरोध में, अनुरोध के मुख्य भाग के AndroidConfig विकल्पों में "direct_boot_ok": true कुंजी शामिल होनी चाहिए. उदाहरण के लिए:

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,
    },
}