اگر میخواهید قبل از باز شدن قفل دستگاه، پیامهای FCM به برنامهها ارسال شود، میتوانید حالت بوت مستقیم را فعال کنید. به عنوان مثال، اگر میخواهید کاربران برنامه شما حتی در یک دستگاه قفل شده نیز اعلانهای هشدار دریافت کنند.
هنگام ساخت این مورد استفاده، بهترین شیوهها و محدودیتهای کلی برای حالت بوت مستقیم را رعایت کنید. در نظر گرفتن قابلیت مشاهده پیامهای فعالشده با بوت مستقیم مهم است. هر کاربری که به دستگاه دسترسی داشته باشد میتواند این پیامها را بدون وارد کردن اعتبارنامههای کاربری مشاهده کند.
پیشنیازها
- دستگاه باید برای حالت بوت مستقیم تنظیم شود.
- دستگاه باید آخرین نسخه سرویسهای گوگل پلی (۱۹.۰.۵۴ یا بالاتر) را نصب داشته باشد.
- برنامه برای دریافت پیامهای 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که به عنوان direct boot aware علامتگذاری نشدهاند، داشته باشد. - هر کتابخانهای که سرویس از آن استفاده میکند، نباید به فضای ذخیرهسازی محافظتشده با اعتبارنامه دسترسی داشته باشد و همچنین نباید اجزای غیر directBootAware را هنگام اجرا در حالت بوت مستقیم فراخوانی کند. این بدان معناست که هر کتابخانهای که برنامه از آن استفاده میکند و از سرویس فراخوانی میشود، یا باید از بوت مستقیم آگاه باشد، یا برنامه باید بررسی کند که آیا در حالت بوت مستقیم اجرا میشود یا خیر و آنها را در آن حالت فراخوانی نکند. به عنوان مثال، SDK های Firebase با بوت مستقیم کار میکنند (میتوانند بدون از کار افتادن برنامه در حالت بوت مستقیم، در آن گنجانده شوند)، اما بسیاری از API های Firebase از فراخوانی در حالت بوت مستقیم پشتیبانی نمیکنند.
- اگر برنامه از یک
Applicationسفارشی استفاده میکند،Applicationهمچنین باید از بوت مستقیم آگاه باشد (در حالت بوت مستقیم به فضای ذخیرهسازی محافظتشده با اعتبارنامه دسترسی ندارد).
ارسال پیامهای مستقیم با قابلیت بوت فعال
شما میتوانید با استفاده از HTTP v1 API به دستگاههایی که در حالت بوت مستقیم هستند پیام ارسال کنید.
درخواست پیام باید شامل کلید "direct_boot_ok": true در گزینههای AndroidConfig بدنه درخواست باشد. برای مثال:
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,
},
}