Я использую Phonegap и Firebase (fcm) для получения push-уведомлений.Для тестирования я использую Android 8.
Я хочу, чтобы мое устройство получало push-уведомление, если приложение работает на переднем плане (как всплывающее сообщение в приложении).Если приложение закрыто или находится в фоновом режиме, я хочу, чтобы сообщение отображалось как уведомление, а когда я нажимаю на уведомление, оно открывает приложение на переднем плане и вызывает функцию события уведомления.
Вот чтопроисходит до сих пор:
Когда приложение открыто, в приложении появляется push-уведомление и отображается - ПРАВИЛЬНО
Когда приложениесвернутое push-уведомление появляется в верхней панели - ПРАВИЛЬНО ... но
Когда я нажимаю на сообщение с уведомлением, оно открывает мое приложение / помещает его на передний план, но прослушиватель событий "уведомления"не вызывается - НЕПРАВИЛЬНО
Есть много запросов о помощи по этой проблеме, и я прошел через многие из них, но ни один из них не предлагает работающего решения для моего приложения (большинствомежду 2016 и 2018, а не 2019).
В первую очередь это должно работать для Android.Поэтому я попытался удалить полезные данные уведомлений и использовать только полезные данные.Однако это не решает проблему.
Вот моя текущая полезная нагрузка:
$notification = array
(
'body' => 'test',
'title' => 'test',
"icon" => 'notification_icon',
"content_available" => true,
);
$data = array
(
"title" => "test",
"body" => "test",
"icon" => "notification_icon",
"content_available" => true,
);
$fields = array
(
'registration_ids' => $registrationIds,
'notification' => $notification,
'data' => $data,
"priority" => "high",
"content_available" => true
);
Насколько я понимаю, есть 3 способа отправить уведомление:
1) как "уведомление" .Это работает на переднем плане, если приложение в данный момент запущено, или на заднем плане в верхней панели, если приложение закрыто или свернуто (а над значком для приложения есть небольшой значок над ним, указывающий сообщение), но в фоновом режиме,когда сообщение щелкает по приложению, загружается, но функция уведомления НЕ вызывается.
2) как «данные» .Кажется, это ТОЛЬКО работает на переднем плане, без сообщения верхней панели, а значок приложения не имеет небольшой значок над ним.Если приложение находится в фоновом режиме, push-уведомление вообще отсутствует.
3) как ОБА "notificaton" и "data" .Когда в фоновом режиме значок приложения имеет значок над ним.При нажатии на сообщение в верхней строке приложение загружается, но функция уведомления НЕ вызывается.
Кроме того, даже если приложение находится в фоновом режиме, если оно получает push-уведомление и помещает приложение в всплывающее окно.уведомление не отображается.Это работает, только если приложение уже находится на переднем плане при получении уведомления.
Вот мои слушатели событий:
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
console.log('Received Device Ready Event');
app.setupPush();
},
setupPush: function() {
var push = PushNotification.init({
android: {
senderID: 'XXXXXXXXXX',
iconColor: "#ccc",
alert: true,
badge: true,
icon: 'notification_icon',
sound: true,
vibrate: true,
},
browser: {},
ios: {
sound: true,
vibration: true,
badge: true
},
windows: {}
});
console.log('after init');
push.on('registration', function(data) {
//[edit - script not displayed for this example, but it registers a token to enable push notifications to the device. tested and working]
});
push.on('error', function(e) {
console.log('push error = ' + e.message);
});
push.on('notification', function(data) {
window.alert(data.additionalData); //Test line
if(data.additionalData.foreground){
window.alert(data.title+'\n'+data.message); //Test line
}
if(data.additionalData.coldstart){
window.alert("coldstart"); //Test line
}
showPopup(data,"info");
});
}
};
//Using Sweet Alert to display messages
function showPopup(data,type){
Swal.fire({
type: type,
title: data.title,
text: data.message,
showConfirmButton: true,
imageUrl: data.image,
imageWidth: 400,
imageHeight: 200,
imageAlt: data.title,
animation: true,
});
}
У кого-нибудь есть ответ на вышеприведенный вопрос, который работает для Android7 и 8?