Android(至少在三星上)现在正在对所有应用程序进行分组,而无需更改应用程序代码或有效负载
Posted
技术标签:
【中文标题】Android(至少在三星上)现在正在对所有应用程序进行分组,而无需更改应用程序代码或有效负载【英文标题】:Android (at least on Samsung) is grouping now all the app without change to App code or payload 【发布时间】:2019-06-29 02:31:21 【问题描述】:一年多以来,我有一个适用于 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 通知将缺少图标、声音等
它可以工作并将通知分组
问题是,点击通知它不再打开应用程序:我在这里检查一些建议:
Android - Firebase Notification not opening targeted activity when app is in background but working properly in foreground
但不确定如何在 cordova 应用中应用它...
编辑 2
结果比我想象的要简单得多。
首先,phonegap-push-plugin 不“喜欢”“通知”设置,使用它的副作用之一是它不会将点击通知操作与打开背景相关联(或关闭)应用程序,而是将“数据”放入有效负载(没有“通知”)。
由于“标签”(有助于分组)仅在“通知”中受支持(似乎)这对我的情况来说是不行的。
尽管如此,在推送插件的文档中,有一个关于如何对“数据”数组的元素进行分组的精彩提示:
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 放入“数据”允许正确分组。
【问题讨论】:
【参考方案1】:根据 Edit2 中的 cmets,对于 cordova-plugin-push,将“notId”添加到“data”允许正确分组(和/或在我的情况下分开)通知。 有关详细信息,请参阅上面的编辑
【讨论】:
以上是关于Android(至少在三星上)现在正在对所有应用程序进行分组,而无需更改应用程序代码或有效负载的主要内容,如果未能解决你的问题,请参考以下文章
所有以前的移动视图在适用于操作系统版本高于 4.1.x 的三星设备的 Worklight Android 应用程序中可见