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 【问题描述】:

一年多以来,我有一个适用于 iosandroid 的 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(至少在三星上)现在正在对所有应用程序进行分组,而无需更改应用程序代码或有效负载的主要内容,如果未能解决你的问题,请参考以下文章

三星智能电视应用程序将 HUE 用作流光溢彩

所有以前的移动视图在适用于操作系统版本高于 4.1.x 的三星设备的 Worklight Android 应用程序中可见

Android模拟器的三星系统映像?

Android将视频保存到文件

更改字体样式后,Android 应用程序在三星设备上崩溃

如何使flutter android应用与三星j6和j4兼容?