问题描述
我试图找到一种方法,将通知发送到限制后台应用活动的android设备,其中大多数是华为和Oppo等中国品牌。
奇怪的是,只有从Firebase控制台发送通知时,我才能收到通知。
这是我在应用中编写通知的方式:
const notification = new firebase.notifications.Notification()
.setNotificationId(notificationId)
.setTitle('some title')
.setBody('body')
.setData({
screen: 'AroundMe',})
.setSound('default')
.android.setChannelId('fcm_default_channel')
.android.setSmallIcon('ic_launcher')
.android.setPriority(firebase.notifications.Android.Priority.Max)
.android.setVisibility(
firebase.notifications.Android.Visibility.Public,)
.android.setAutoCancel(true)
firebase.notifications().scheduleNotification(notification,{
fireDate: d.getTime(),});
我知道该应用可以在电话设置中得到授权,因此它可以在后台接收通知,但是为什么可以显示从Firebase控制台发送的应用呢?
谢谢!
解决方法
我认为
的答案为什么从Firebase控制台发送的通知能够绕过android后台任务限制?
与android中的推送通知机制有关, 看到这个:
How does push notification technology work on Android?
在此线程中,进行了概述和描述,这是因为保持与GCM的一个套接字连接保持活动状态,该连接可获取通知。 当然,您可以使用其他推送通知服务,例如onesignal和 flurry等,但是机制相同。
您是否勾选了它们,却无法显示通知?
就我而言,即使是在中国品牌上,该机制也可以很好地与这些服务配合使用。
,根据“频繁”和“稀有”存储桶中的https://developer.android.com/topic/performance/power/power-details个应用程序,每天分别只能接收10条和5条FCM消息。您可以使用ADB命令更改应用程序待机模式。
设置应用备用存储桶(将任何一个设置为活动到稀有):
$ adb shell am set-standby-bucket [packagename] active|working_set|frequent|rare
获取当前存储桶:
$ adb shell am get-standby-bucket [packagename]
(请注意,“有效”的值为10,“工作集”的值为20,“频繁”的值为30,“稀有”为40)
将应用存储桶设置为罕见/频繁后,请尝试发送超过相应存储桶限制的FCM通知。
提示:发送通知后请勿拉动通知抽屉-它会更改应用程序的待机状态。并在整个测试过程中确保所需的应用程序备用存储桶状态得以维持(相同)。