自从一年多以来,我一直在iOS和Android上使用cordova(7.1.0)应用程序,它依赖于phonegap-plugin-push插件的推送通知。
一切正常,现在也可以正常工作,只发送最后一个通知。
由于可以将我的应用设置为监视多个地点,因此为每个所选地点仅显示最后一个通知,但至少显示一个通知是很有意义的。
我曾考虑过使用“标签”,但尝试将其放置在不同的地方而没有成功。
以下是我用于发送通知的最低限度的PHP代码:
$msg['tag']=$spotid; //tried on 2019 02 05: no success
$msg['sound']=$sound;
$msg['soundname']=$sound; //20180913
$msg['android_channel_id']=$sound; //20180913
$data = array
(
'Spot' => $spotname,
'rain' => $rain
);
$fields = array
(
'registration_ids' => $newId
'vibrate' => $vibration,
'priority' => 'high',
'data' => array_merge( $msg,$data ), //$data //20180913
'tag' => $spotid //tried on 2019 02 05: no success
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$resultFCM = curl_exec($ch );
if ($resultFCM === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close( $ch );
有什么建议吗?
编辑
进一步测试后,我发现了一些可行的方法:
$msg['tag']=$spotid; //works if inserted in "notification"
$msg['sound']=$sound;
$msg['soundname']=$sound; //20180913
$msg['android_channel_id']=$sound; //20180913
$data = array
(
'Spot' => $spotname,
'rain' => $rain
);
$fields = array
(
'registration_ids' => $newId, //$registrationIds,
'vibrate' => $vibration,
'priority' => 'high',
'notification' => $msg, // 2019 attempt to group ONLY by spot. check if problems with iOS
'data' => array_merge( $msg,$data )
);
要注意,$ msg必须完全重复(而不仅仅是添加“标签”),否则Android通知将缺少图标,声音等
它可以对通知进行分组
问题是,单击通知将无法再打开该应用程序:我在这里查看一些建议:
但不确定如何在cordova应用程序中应用它...
编辑2
它最终比我想象的要简单得多。
首先,phonegap-push-plugin不“喜欢”“ Notification”设置,并且使用它的副作用之一是,它没有将点击通知操作与打开背景相关联(或关闭)应用程序,而是将“数据”放入有效负载中(没有“通知”)。
仅在“通知”中支持“标签”(有助于分组)(看来),这对我来说就不可行了。
尽管如此,在push插件的文档中,还是有一个很好的提示,说明如何对“数据”数组的哪个元素进行分组:
https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#stacking
https://github.com/phonegap/phonegap-plugin-push/issues/2523
以下是我的示例,其中分组元素是整数$ spotid 我只需要添加'notId'=> $ spotid:
$msg['sound']=$sound;
$msg['soundname']=$sound; //20180913
$msg['android_channel_id']=$sound; //20180913
$data = array
(
'Spot' => $spotname,
'rain' => $rain,
'notId' => $spotid // 2019 attempt to group ONLY by spot. check if problems with iOS
);
$fields = array
(
'registration_ids' => $newId, //$registrationIds,
'vibrate' => $vibration,
'priority' => 'high'
'data' => array_merge( $msg,$data )
);
notId 放入“数据”可以正确分组。
答案 0 :(得分:0)
根据Edit2中的注释,对于cordova-plugin-push,在“数据”中添加“ notId”可以正确地分组(和/或在我的情况下分开)通知。 有关详细信息,请参见上面的编辑