अगर आपको डिवाइस अनलॉक होने से पहले ही ऐप्लिकेशन को FCM मैसेज भेजने हैं, तो डायरेक्ट बूट मोड चालू करें. उदाहरण के लिए, अगर आपको अपने ऐप्लिकेशन के उपयोगकर्ताओं को, डिवाइस लॉक होने पर भी अलार्म की सूचनाएं भेजनी हैं.
इस उदाहरण को लागू करते समय, डायरेक्ट बूट मोड के लिए सामान्य सबसे सही तरीके और पाबंदियों का पालन करें. यह ध्यान रखना ज़रूरी है कि डायरेक्ट बूट की सुविधा वाले मैसेज दिखाई दें. डिवाइस का ऐक्सेस रखने वाला कोई भी व्यक्ति, उपयोगकर्ता के क्रेडेंशियल डाले बिना इन मैसेज को देख सकता है.
ज़रूरी शर्तें
- डिवाइस को डायरेक्ट बूट मोड के लिए सेट अप किया गया हो.
- डिवाइस पर Google Play services का नया वर्शन (19.0.54 या उसके बाद का वर्शन) इंस्टॉल होना चाहिए.
- FCM मैसेज पाने के लिए, ऐप्लिकेशन में FCM SDK (
com.google.firebase:firebase-messaging) का इस्तेमाल किया जाना चाहिए.
अपने ऐप्लिकेशन में डायरेक्ट बूट मोड में मैसेज हैंडल करने की सुविधा चालू करना
ऐप्लिकेशन-लेवल की Gradle फ़ाइल में, FCM डायरेक्ट बूट सपोर्ट लाइब्रेरी की डिपेंडेंसी जोड़ें:
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'ऐप्लिकेशन के मेनिफ़ेस्ट में
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,
},
}