Android (по крайней мере, на Samsung) теперь группирует все приложение без изменения кода приложения или полезной нагрузки. - PullRequest
0 голосов
/ 05 февраля 2019

Уже более года у меня есть приложение cordova (7.1.0) для iOS и Android, которое использует push-уведомления для плагина 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 не открывает целевую активность, когда приложение находится в фоновом режиме, но работает должным образом на переднем плане

но не уверен, как применить это в приложении Cordova ...

РЕДАКТИРОВАТЬ 2

Все оказалось намного проще, чем я думал.

Прежде всего, phonegap-push-plugin не «нравится» параметр «Уведомление», и один из побочных эффектов его использования заключается в том, что он не связывает действие нажатия на уведомление с открытием фонового (или закрытого) приложения.что вместо этого происходит, помещая «данные» в полезную нагрузку (без «уведомления»).

Поскольку «тег» (который помогает группировать) поддерживается только в «уведомлении» (кажется), это не подходит для моего случая.

Тем не менее, в документации к push-плагину есть замечательный совет о том, как сгруппировать какой элемент массива «data»:

https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#stacking

https://github.com/phonegap/phonegap-plugin-push/issues/2523

Follиз-за моего приведенного выше примера, где элементом группировки является целое число $ 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 в «data» позволяет правильно группировать.

1 Ответ

0 голосов
/ 05 февраля 2019

Согласно комментариям в Edit2, для cordova-plugin-push добавление «notId» в «data» позволяет правильно группировать (и / или разделять в моем случае) уведомления.Подробнее см. Выше.

...