Android(至少在三星上)现在将所有应用分组,而无需更改应用代码或有效负载

时间:2019-02-05 09:48:38

标签: php android firebase cordova push-notification

自从一年多以来,我一直在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不“喜欢”“ 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 放入“数据”可以正确分组。

1 个答案:

答案 0 :(得分:0)

根据Edit2中的注释,对于cordova-plugin-push,在“数据”中添加“ notId”可以正确地分组(和/或在我的情况下分开)通知。 有关详细信息,请参见上面的编辑