使用firebase-admin时如何将FCM设置为高优先级

5
我有以下代码,使用firebase-admin发送Firebase云消息。
Message message = null;
message = Message.builder().putData("From", fromTel).putData("To", toTel).putData("Text", text)
            .setToken(registrationToken).build();

String response = null;
try {
    response = FirebaseMessaging.getInstance().sendAsync(message).get();
    responseEntity = new ResponseEntity<String>(HttpStatus.ACCEPTED);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}
System.out.println("Successfully sent message: " + response);

以上代码可以正常运行。但我需要发送“高优先级”消息,以便设备在待机模式下接收它们。

我该如何使这些消息成为“高优先级”?

4个回答

6

对于发送到 Android 设备的消息,在构建消息时,将其 AndroidConfig 设置为具有 Priority.HIGH 的值:

AndroidConfig config = AndroidConfig.builder()
        .setPriority(AndroidConfig.Priority.HIGH).build();

Message message = null;
message = Message.builder()
        .putData("From", fromTel).putData("To", toTel).putData("Text", text)
        .setAndroidConfig(config) // <= ADDED
        .setToken(registrationToken).build();

如需更多详细信息,请参见文档中的示例

向苹果设备发送消息时,请使用setApnsConfig(),具体请参见文档


谢谢您的回答。高优先级正在工作,但是如果我有一段时间不碰我的手机,并且当我发送Firebase云消息时,它需要很长时间才能处理。我是否应该使用Firebase Job Dispatcher来使我的应用程序在手机睡眠时工作?当手机处于唤醒状态时,手机可以在几秒钟内处理所有内容。 - david
你可以尝试从Firebase控制台发送通知。它们默认为高优先级,并且可以让你了解不同设备状态下的接收延迟情况。 - Bob Snyder
我进行了一些调试,现在当 Firebase 收到消息时,在应用程序屏幕上打印带有时间戳的内容。消息确实出现了,但它没有继续执行其余的工作。它应该创建一个类的新实例,然后创建一个新线程并下载图像。这是一旦收到 Firebase 消息后将使用的类 https://pastebin.com/RUrZwb4L 我不确定我是否在我的一侧做错了什么。 - david
SO不是一个有效的调试论坛。我期望唤醒的设备至少保持唤醒状态10秒钟。也许图像下载时间比预期长。你正在很好地利用日志语句,如有必要,请添加更多日志语句以确定设备在处理完成之前是否进入睡眠状态。 - Bob Snyder
我会尝试通过更多的调试来弄清楚问题,但我认为问题出在手机上。我打算尝试使用不同的ROM来看看会发生什么。 - david
显示剩余2条评论

2
public async Task send_PushNotification(FirebaseAdmin.Messaging.Message MESSAGE)
    {   
        var defaultApp = FirebaseApp.Create(new AppOptions()
        {
            Credential = GoogleCredential.FromFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "key_FB.json")),
        });

        var message = MESSAGE;
        message.Token = FB_TOKEN;
        message.Android = new AndroidConfig();
        message.Android.Priority = Priority.High;
        message.Android.TimeToLive = new TimeSpan(0,0,5);
       
        var messaging = FirebaseMessaging.DefaultInstance;
        var result = await messaging.SendAsync(message);
        Console.WriteLine(result);
    }

1
请在回答中提供更多解释,例如将其放入问题的背景中。 - sebap123

1

没有AndroidConfig Builder

function sendFCM(token, from, to, text) {
    var admin = require("firebase-admin");
    var data = {
        from: from,
        to: to,
        text: text
    };
    let message = {       
        data: data,
        token: token,
        android: {
            priority: "high",  // Here goes priority
            ttl: 10 * 60 * 1000, // Time to live
        }
    };
    admin.messaging()
        .send(message)
        .then((response) => {
            // Do something with response
        }).catch((error) => {
            console.log(error);
        });
}

1
这可能会帮助某些人。
public String sendFcmNotification(PushNotificationRequestDto notifyRequest) throws FirebaseMessagingException {
        String registrationToken = notifyRequest.getToken();

        AndroidConfig config = AndroidConfig.builder()
                .setPriority(AndroidConfig.Priority.HIGH).build();

        Notification notification = Notification.builder()
                .setTitle(notifyRequest.getTitle())
                .setBody(notifyRequest.getBody())
                .build();

        Message message = Message.builder()
                .setNotification(notification)
//                .putData("foo", "bar")
                .setAndroidConfig(config)
                .setToken(registrationToken)
                .build();


        return FirebaseMessaging.getInstance().send(message);
    }

工作得很好!谢谢。 - Deependra Solanky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接