【问题标题】:Unable to send firebase fcm push notiication to android device from Java server无法从 Java 服务器向 android 设备发送 firebase fcm 推送通知
【发布时间】:2020-09-14 16:21:06
【问题描述】:

无法向 Android 设备发送 Firebase fcm 推送通知。

当我从 firebase 控制台发送测试消息时,它会发送到设备。所以 Android 端代码运行良好。

对于后端 Java 服务器,我使用的是 firebase sdk

public void sendNotification2(String notification, String title, String to) {
    String registrationToken = to;

    Message message = Message.builder().putData("score", "850").putData("time", "2:45")
            .setToken(registrationToken).build();

    String response;
    response = FirebaseMessaging.getInstance().send(message);
    System.out.println("Successfully sent message: " + response);
}

代码输出:成功发送消息:projects/myappname/messages/0:1590590793114288%9cceaf10deffd7abc

但是设备没有收到通知。

【问题讨论】:

    标签: java firebase server push-notification firebase-cloud-messaging


    【解决方案1】:

    在从后端发送消息时,澄清您的应用程序是在后台还是前台很重要,在 fcm 中,这一点很重要。 在这种情况下,您发送的是数据消息,而不是通知消息。 文档中解释了差异:
    https://firebase.google.com/docs/cloud-messaging/android/receive

    这意味着,当应用程序处于前台和后台时,您应该在覆盖的 onMessageReceived(...) 方法中接收此消息。
    (您可以使用调试日志命令进行控制。)

    如果您使用数据消息,您可以定义自定义键值对并在应用程序处于前台和后台时自行实现通知过程。相比之下,使用 firebase 控制台,您发送通知消息,它​​们会在您的应用后台自动处理,在前台触发覆盖的 onMessageReceived(...)。

    以下是构建通知消息的示例(具有不同的优先级,不应让您感到困惑):

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2016-09-27
      • 1970-01-01
      相关资源
      最近更新 更多