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

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

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

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

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

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

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

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. ऐप्लिकेशन के मेनिफ़ेस्ट में 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.
  • सेवा में इस्तेमाल की जाने वाली किसी भी लाइब्रेरी को, क्रेडेंशियल से सुरक्षित स्टोरेज को ऐक्सेस नहीं करना चाहिए. साथ ही, डायरेक्ट बूट मोड में चलते समय, non-directBootAware कॉम्पोनेंट को कॉल नहीं करना चाहिए. इसका मतलब है कि ऐप्लिकेशन में इस्तेमाल होने वाली किसी भी लाइब्रेरी को डायरेक्ट बूट मोड के बारे में पता होना चाहिए. इसके अलावा, ऐप्लिकेशन को यह जांच करनी होगी कि वह डायरेक्ट बूट मोड में चल रहा है या नहीं. अगर वह डायरेक्ट बूट मोड में चल रहा है, तो उसे लाइब्रेरी को कॉल नहीं करना चाहिए. उदाहरण के लिए, Firebase SDK टूल डायरेक्ट बूट मोड के साथ काम करते हैं. इन्हें डायरेक्ट बूट मोड में ऐप्लिकेशन में शामिल किया जा सकता है. इससे ऐप्लिकेशन क्रैश नहीं होता. हालांकि, कई Firebase API डायरेक्ट बूट मोड में कॉल किए जाने की सुविधा के साथ काम नहीं करते.
  • अगर ऐप्लिकेशन कस्टम 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,
    },
}