即使使用不同的折叠键,Android GCM仍会折叠。

4
我正在使用这个库发送两条不同的消息,它们具有不同的折叠键,但是在我的设备上,我先收到了第一条消息,然后第二条消息覆盖了第一条消息。
我希望在Android设备的通知标题中将这两个消息分开显示。
值得一提的是,我正在使用这个Phonegap插件来接收推送通知。
以下是我的代码:
    $gcmApiKey = 'api key here';
    $deviceRegistrationId = 'device regid here';
    $numberOfRetryAttempts = 5;

    $collapseKey = '1';
    $payloadData = ['title' => 'First Message Title', 'message' => 'First message'];

    $sender = new Sender($gcmApiKey);
    $message = new Message($collapseKey, $payloadData);

    $result = $sender->send($message, $deviceRegistrationId, $numberOfRetryAttempts);

    // Sending Second message
    $collapseKey = '2';
    $payloadData = ['title' => 'Second Message Title', 'message' => 'Second Message'];

    $sender = new Sender($gcmApiKey);
    $message = new Message($collapseKey, $payloadData);

    $result = $sender->send($message, $deviceRegistrationId, $numberOfRetryAttempts);

你需要在Android应用程序中进行一些配置,除了在服务器端所做的工作。 - Asaf
1个回答

7
如果我理解正确,你的问题是第一个通知在显示后被第二个通知替换了。
如果是这种情况,你的错误不在PHP端,而在你的Java代码中。
如果你想显示一个通知,你需要调用这个方法:
NotificationManager.notify(int id, Notification notification)

很可能是每次调用该方法时,您都将id参数设置为相同的值。

id的作用是系统仅显示具有相同ID(最新的)的一个通知。使用与之前相同的ID的典型用例是更新先前的通知。

如果要显示多个通知,则需要每次设置不同的id。您可以使用随机数,或者更好的办法是使用先前定义的内容ID。

GCM折叠键具有不同的效果:

当您定义折叠键时,当GCM服务器为同一用户排队多条消息时,具有任何给定折叠键的最后一条消息将被传递。

这意味着,例如,如果您的手机关闭,则只会收到具有相同折叠键的一条消息。如果您的手机在发送第二条通知之前接收到第一条通知,则不会发生任何事情。

使用您的PhoneGap插件进行设置

该插件的文档非常混乱,但如果我们查看源代码,就会发现这个未记录的功能:

int notId = 0;
try {
    notId = Integer.parseInt(extras.getString("notId"));
}
mNotificationManager.notify((String) appName, notId, mBuilder.build());

这意味着,如果您将有效载荷更改为例如:
$payloadData = ['title' => 'First Message Title', 'message' => 'First message', 'notId' => mt_rand()];

您的通知不会相互替换。


是的,你理解得没错,但是...我不是在使用Java,我在用HTML5和Cordova。 - Daniel Faria
兄弟,我稍后会尝试并接受你的答案。谢谢。 - Daniel Faria

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