【问题标题】:FirebaseMessagingService: No notifications when phone is sleepingFirebaseMessagingService:手机睡眠时没有通知
【发布时间】:2021-06-17 19:03:08
【问题描述】:

我正在使用 FirebaseMessagingService。我正在向服务器发送一些通知。但是,当手机屏幕关闭一段时间或睡眠时,这些通知不会出现。当我打开手机屏幕或运行应用程序时,这些通知开始集体出现。几十条通知同时堆积起来。为了不发生这种情况,我应该怎么做才能让通知总是来?

我正在使用默认代码。

问候

    <service
        android:name="com.myapp.services.sFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

打盹模式报警服务:

public class WOnTrackerReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context ctxt, Intent i) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 10);
        Intent intent = new Intent(ctxt, WOnTrackerFirebaseMessagingService.class);
        PendingIntent pintent = PendingIntent.getService(ctxt, 0, intent, 0);
        AlarmManager alarm = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE);

        //for 1 mint 1*60*1000
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                1*60*1000, pintent);
        
    }
}

【问题讨论】:

    标签: java android android-studio push-notification firebase-cloud-messaging


    【解决方案1】:

    【讨论】:

    • 我更新了我的代码。我添加了一个 onReceive,但这段代码甚至没有给出日志聊天。
    【解决方案2】:

    在以下情况下让firebase库调用你的onMessageReceived()

    • 应用在前台
    • 后台应用
    • 应用已被杀死

    您不得使用此处所示的notification 属性:

    {
       "to": "/topics/journal",
       "notification": {
       "title" : "title",
       "text": "data!",
       "icon": "ic_notification"
        }
    }
    

    但是,将其捆绑为数据 FCM - 让设备直接处理它。

    {
      "to": "/topics/dev_journal",
       "data": {
           "text":"text",
           "title":"",
           "line1":"Journal",
           "line2":"some data"
       }
    } 
    

    消息在参数RemoteMessage 中与您的数据对象一起作为Map&lt;String, String&gt; 发送,您可以在应用程序的onMessageReceived() 中对其进行管理。

    【讨论】:

      【解决方案3】:

      如果在设备处于打盹模式时应该出现消息,则消息必须设置为高优先级。当您的手机处于打盹模式时,不会以“正常”优先级发送的消息。这是一个对我有用的可能解决方案:

      private void forwardMessageToFCM(String notificationMessage, boolean highPriority) {
          Message message;
          if (highPriority) {
              message = createFCMMessageWithHighPriority(notificationMessage + APPEND_FCM_NOTIFICATION_MESSAGE);
          } else {
              message = createFCMMessageWithNormalPriority(notificationMessage + APPEND_FCM_NOTIFICATION_MESSAGE);
          }
      
          try {
              firebaseMessaging.send(message);
              printInfo("Sent message to FCM: " + notificationMessage);
          } catch (FirebaseMessagingException e) {
              printException(e);
              return;
          }
      }
      
      private Message createFCMMessageWithNormalPriority(String notificationMessage) {
          return Message.builder().setNotification(createFCMNotification(notificationMessage)).setToken(registrationToken)
                  .setAndroidConfig(createAndroidConfigWithNormalMessagePriority()).build();
      }
      
      private Message createFCMMessageWithHighPriority(String notificationMessage) {
          return Message.builder().setNotification(createFCMNotification(notificationMessage)).setToken(registrationToken)
                  .setAndroidConfig(createAndroidConfigWithHighMessagePriority()).build();
      }
      
      private AndroidConfig createAndroidConfigWithHighMessagePriority() {
          return createAndroidConfigWithPriority(Priority.HIGH);
      }
      
      private AndroidConfig createAndroidConfigWithNormalMessagePriority() {
          return createAndroidConfigWithPriority(Priority.NORMAL);
      }
      
      private AndroidConfig createAndroidConfigWithPriority(Priority priority) {
          return AndroidConfig.builder().setPriority(priority).build();
      }
      
      private Notification createFCMNotification(String notificationMessage) {
          return Notification.builder().setBody(notificationMessage).setTitle(NOTIFICATION_CONTENT_TITLE).build();
      }
      

      使用 createFCMMessageWithHighPriority 方法创建具有高优先级的通知消息。但根据 doc,这应该只用于重要消息。 有关优先级的更多信息:
      https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        相关资源
        最近更新 更多