即使使用不同的折叠键,Android GCM也会崩溃

时间:2015-03-24 14:35:42

标签: php cordova google-cloud-messaging

我正在使用this lib发送两条带有不同折叠键的不同消息,但是在我的设备上我收到了第一个,然后第二个来自第一个。

我想在设备上的Android通知标题中分别设置两个。

对于记录我正在使用this Phonegap plugin来接收推送通知。

这是我的代码:

    $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);

1 个答案:

答案 0 :(得分:7)

如果我理解你的话,你的问题是第一个通知在第二个通知显示后被第二个通知取代。

如果是这种情况,那么你的错误不是在PHP端,而是在你的Java代码中。

如果您显示通知,请调用此方法:

NotificationManager.notify(int id, Notification notification)

最有可能的是,每次调用此方法时,都会将id参数设置为相同的值。

id的效果是系统只会显示一个具有相同ID的通知 - 最新的通知。使用与以前相同的id的典型用例是更新先前的通知。

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

GCM折叠键效果不同:

  

When you define a collapse key, when multiple messages are queued up in the GCM servers for the same user, only the last one with any given collapse key is delivered.

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

使用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()];

您的通知不会互相替换。