ডাইরেক্ট বুট মোডে FCM মেসেজ পাওয়া

ডিভাইস আনলক করার আগে আপনি অ্যাপে FCMটি মেসেজ পাঠাতে চাইলে, ডাইরেক্ট বুট মোড চালু করতে পারেন। যেমন, আপনি যদি চান যে আপনার অ্যাপের ব্যবহারকারীরা লক করা ডিভাইসেও অ্যালার্মের বিজ্ঞপ্তি পান।

এই ব্যবহারের কেস তৈরি করার সময়, ডাইরেক্ট বুট মোডের জন্য সাধারণ পেশাদার পদ্ধতি এবং বিধিনিষেধ লক্ষ্য করুন। ডাইরেক্ট বুট-চালু করা মেসেজের দৃশ্যমানতা বিবেচনা করা গুরুত্বপূর্ণ। ডিভাইসে অ্যাক্সেস আছে এমন যেকোনও ব্যবহারকারী ক্রেডেনশিয়াল না দিয়েই এইসব মেসেজ দেখতে পারবেন।

পূর্বশর্ত

  • ডিভাইসটি অবশ্যই ডাইরেক্ট বুট মোডের জন্য সেট-আপ করা থাকতে হবে।
  • ডিভাইসে Google Play পরিষেবার সাম্প্রতিক ভার্সন ইনস্টল করা থাকতে হবে (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-এর মতো কম্পোনেন্ট ব্যবহার করার চেষ্টা করা উচিত নয় যা ডাইরেক্ট বুট অ্যাওয়ার হিসেবে চিহ্নিত নয়।
  • পরিষেবাটি ব্যবহার করে এমন কোনও লাইব্রেরিও অবশ্যই ক্রেডেনশিয়াল অ্যাক্সেস করবে না সুরক্ষিত স্টোরেজ বা ডাইরেক্ট বুট মোডে চলাকালীন নন-ডাইরেক্টবুটঅ্যাওয়ার কম্পোনেন্ট কল করবে না। এর অর্থ হল, পরিষেবা থেকে কল করা হয় এমন কোনও লাইব্রেরি অ্যাপ ব্যবহার করলে, সেটিকে ডাইরেক্ট বুট সম্পর্কে সচেতন হতে হবে অথবা অ্যাপটিকে চেক করে দেখতে হবে যে সেটি ডাইরেক্ট বুট মোডে চলছে কিনা এবং সেই মোডে সেগুলিকে কল করা যাবে না। যেমন, 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,
    },
}