Android 即使使用不同的折叠键,GCM 也会崩溃
Android GCM collapse even if with different collapse keys
我正在使用 this lib 使用不同的折叠键发送两条不同的消息,但在我的设备上我收到了第一条,然后第二条从第一条过来。
我想在设备上的 Android 通知 header 中将两者分开。
郑重声明,我正在使用 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);
如果我没理解错的话,你的问题是第一个通知在显示后被第二个通知取代了。
如果是这样的话,你的错误不在PHP这边,而是你的Java代码。
如果显示通知,请调用此方法:
NotificationManager.notify(int id, Notification notification)
很有可能,您在每次调用此方法时都将 id
参数设置为相同的值。
id
的效果是系统将只显示一个具有相同 ID 的通知 - 最新的。使用与以前相同的 id 的典型用例是更新以前的通知。
如果要显示多个通知,需要每次设置不同的id
。您可以使用随机数或更好的方法,但可以使用先前定义的内容 ID。
GCM 折叠键有不同的效果:
这意味着,例如,如果您的 phone 已关闭,您将只会收到一条具有相同折叠键的消息。如果您的 phone 在您发送第二个通知之前收到第一个通知,它不会执行任何操作。
使用 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()];
您的通知不会相互替换。
我正在使用 this lib 使用不同的折叠键发送两条不同的消息,但在我的设备上我收到了第一条,然后第二条从第一条过来。
我想在设备上的 Android 通知 header 中将两者分开。
郑重声明,我正在使用 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);
如果我没理解错的话,你的问题是第一个通知在显示后被第二个通知取代了。
如果是这样的话,你的错误不在PHP这边,而是你的Java代码。
如果显示通知,请调用此方法:
NotificationManager.notify(int id, Notification notification)
很有可能,您在每次调用此方法时都将 id
参数设置为相同的值。
id
的效果是系统将只显示一个具有相同 ID 的通知 - 最新的。使用与以前相同的 id 的典型用例是更新以前的通知。
如果要显示多个通知,需要每次设置不同的id
。您可以使用随机数或更好的方法,但可以使用先前定义的内容 ID。
GCM 折叠键有不同的效果:
这意味着,例如,如果您的 phone 已关闭,您将只会收到一条具有相同折叠键的消息。如果您的 phone 在您发送第二个通知之前收到第一个通知,它不会执行任何操作。
使用 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()];
您的通知不会相互替换。