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