作者:曹月洪_867 | 来源:互联网 | 2023-05-16 16:39
我正在使用这个lib发送带有不同折叠键的两个不同消息,但在我的设备上我收到第一个,然后第二个来自第一个.
我想在设备上的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);
Johann Bauer..
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()];
您的通知不会互相替换.
1> Johann Bauer..:
如果我理解你的话,你的问题是第一个通知在第二个通知显示后被第二个通知取代.
如果是这种情况,那么你的错误不是在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()];
您的通知不会互相替换.