اگر میخواهید قبلاز باز شدن قفل دستگاه، پیامهای FCM را به برنامهها ارسال کنید، میتوانید حالت راهاندازی مستقیم را فعال کنید. برای مثال، اگر میخواهید کاربران برنامهتان اعلانهای هشدار را حتی در دستگاه قفلشده دریافت کنند.
هنگام ساختن این مورد استفاده، روالهای مطلوب و محدودیتهای عمومی برای حالت راهاندازی مستقیم را رعایت کنید. مهم است که رؤیتپذیری پیامهای فعالشده برای راهاندازی مستقیم را درنظر بگیرید. هر کاربری که به دستگاه دسترسی داشته باشد میتواند این پیامها را بدون وارد کردن اطلاعات کاربری مشاهده کند.
پیشنیازها
- دستگاه باید برای حالت راهاندازی مستقیم تنظیم شده باشد.
- دستگاه باید نسخه جدیدی از «خدمات Google Play» را نصب کرده باشد (نسخه ۱۹.۰.۵۴ یا جدیدتر).
- برنامه باید از FCM SDK (
com.google.firebase:firebase-messaging) برای دریافت پیامهای FCM استفاده کند.
مدیریت پیام حالت راهاندازی مستقیم را در برنامهتان فعال کنید
در فایل 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دیگری که درحین اجرا در حالت راهاندازی مستقیم بهعنوان سازگار با راهاندازی مستقیم علامتگذاری نشدهاند استفاده کند. - هر کتابخانهای که سرویس استفاده میکند نیز نباید به فضای ذخیرهسازی محافظتشده با اطلاعات اعتباری دسترسی داشته باشد یا مؤلفههای غیرآگاه از DirectBoot را هنگام اجرا در حالت راهاندازی مستقیم فراخوانی کند. این یعنی هر کتابخانهای که برنامه استفاده میکند و از سرویس فراخوانی میشود باید با راهاندازی مستقیم سازگار باشد، یا برنامه باید بررسی کند که آیا در حالت راهاندازی مستقیم اجرا میشود یا نه و در آن حالت آنها را فراخوانی نکند. برای مثال، کیتهای توسعه نرمافزار Firebase با راهاندازی مستقیم کار میکنند (میتوانند در برنامه گنجانده شوند بدون اینکه در حالت راهاندازی مستقیم ازکار بیفتند)، اما بسیاری از Firebase APIها از فراخوانی در حالت راهاندازی مستقیم پشتیبانی نمیکنند.
- اگر برنامه از
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,
},
}