FCM:使用Java服务器设置TTL("time_to_live"或寿命)属性(Google文档错误/不清楚)



我已经搜索了几个小时,找不到答案(有关其他问题,许多未解决的问题(。


我当前的代码

/**
 * Use when the server has determined how many Alerts are situated inside
 * a single Monitored Zone of a user.
 *
 * Documentation:
 * https://firebase.google.com/docs/cloud-messaging/admin/send-messages
 *
 * @param registrationToken tokens of the devices the notif is sent to
 * @param mzName name of the Monitored Zone (can be its ID)
 * @param nbrAlertes number of alerts detected inside the MZ
 */
public static void sendMzLiveAlertNotif(ArrayList<String> registrationToken,
                                    String mzName, int nbrAlertes) {
    if(registrationToken.size() == 0 || nbrAlertes == 0 || mzName.isEmpty())
        return;
    registrationToken.forEach(token -> {
        // See documentation on defining a message payload.
        Message message = Message.builder()
                .putData("title", NotifType.NEW_LIVE_ALERT.getTitle())
                .putData("body", """ + mzName + "" contient " + nbrAlertes + " alertes.")
                .putData("tag", mzName)
                .putData("nbrAlerts", nbrAlertes+"")
                .setToken(token)
                .build();
        try {
            // Send a message to the device.
            String response = FirebaseMessaging.getInstance().send(message);
            // Response is a message ID string.
            System.out.println("Successfully sent message: " + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
}

这效果很好,直到我想在通知中添加寿命。我仍在尝试弄清楚使用Java的正确方法是什么。


我的问题

我想知道我应该如何使用Google似乎使用的setAndroidConfig方法将30小时的寿命施加到我的消息中。

我的服务器已在Java中编码,并将通知推向Android应用程序。

我最初的想法是:

        Message message = Message.builder()
                .putData("title", NotifType.NEW_LIVE_ALERT.getTitle())
                .putData("body", """ + mzName + "" contient " + nbrAlertes + " alertes.")
                .putData("tag", mzName)
                .putData("nbrAlerts", nbrAlertes+"")
                .setToken(token)
                .setAndroidConfig(AndroidConfig.builder()
                        .setTtl(3600 * 30) // 30 hours ?
                        .build())
                .build();

...但是在看到Google如何使用AndroidConfig完成整个过程之后,我想知道我是否也应该。


Google文档

我唯一能找到的示例是来自Google本身。这是一个示例:

  @Test
  public void testAndroidMessageWithoutNotification() throws IOException {
    Message message = Message.builder()
        .setAndroidConfig(AndroidConfig.builder()
            .setCollapseKey("test-key")
            .setPriority(Priority.HIGH)
            .setTtl(10)
            .setRestrictedPackageName("test-pkg-name")
            .putData("k1", "v1")
            .putAllData(ImmutableMap.of("k2", "v2", "k3", "v3"))
            .build())
        .setTopic("test-topic")
        .build();
    Map<String, Object> data = ImmutableMap.<String, Object>of(
        "collapse_key", "test-key",
        "priority", "high",
        "ttl", "0.010000000s", // 10 ms = 10,000,000 ns
        "restricted_package_name", "test-pkg-name",
        "data", ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3")
    );
    assertJsonEquals(ImmutableMap.of("topic", "test-topic", "android", data), message);
  }

您看到.setTtl(10)"ttl", "0.010000000s", // 10 ms = 10,000,000 ns零件吗?它使我感到困惑。他们的文档说(强调是我的(:

time_to_to_live 可选,number :此参数指定多长时间(secc量症(,如果将消息保留在FCM存储中,如果 设备离线。支持生命的最大时间是4周, 默认值为4周。有关更多信息,请参阅设置 a的寿命 消息。

他们告诉我们阅读的链接说:

在Android和Web/JavaScript上,您可以指定的最大寿命 一个消息。该值必须是0到2,419,200秒的持续时间 (28天(,它对应于最长时间 FCM存储并尝试传递该消息。没有的要求 将此字段默认值包含在四个星期的最长时间。

他们显然希望这东西在中。然而,他们的测试显示毫秒的使用情况!在JavaScript中找到这么多示例是令人沮丧的,而在其文档中几乎没有任何示例!

中的Java中没有什么!

本身也可以找到此矛盾文档:

public AndroidConfig.Builder setTtl (long ttl)

以毫秒为单位设置消息的时间持续时间。

一个让文档混淆的好情况。

您应该使用ms,所以30小时您会得到这样的东西:

        Message message = Message.builder()
                .putData("title", NotifType.NEW_USER_ALERT.getTitle())
                .putData("body", """ + mzName + "" contient " + nbrAlertes + " alertes.")
                .putData("tag", mzName)
                .putData("nbrAlerts", nbrAlertes+"")
                .setToken(token)
                .setAndroidConfig(AndroidConfig.builder()
                        .setTtl(30*3600*1000) // 30 hours
                        .build())
                .build();

相关内容

  • 没有找到相关文章

最新更新