Я работаю над применением в Nativescript, который реализует push-уведомление. Допустим, сервер отправляет push-уведомление и на основании action
, упомянутого в полезной нагрузке уведомления, мне придется перенаправить приложение. Это перенаправление должно выполняться, если пользователь нажимает на уведомление из ящика и приложения в фоновом режиме. Другой случай, когда приложение не должно перенаправляться, если оно находится на переднем плане. Я управлял флаг, который, как следоватьHandle Push уведомление в Nativescript
app.js
application.on(application.launchEvent, function (args) {
appSettings.setBoolean('AppForground', true);
});
application.on(application.suspendEvent, function (args) {
appSettings.setBoolean('AppForground', false);
});
application.on(application.resumeEvent, function (args) {
appSettings.setBoolean('AppForground', true);
});
application.on(application.exitEvent, function (args) {
appSettings.setBoolean('AppForground', false);
});
application.on(application.lowMemoryEvent, function (args) {
appSettings.setBoolean('AppForground', false);
});
application.on(application.uncaughtErrorEvent, function (args) {
appSettings.setBoolean('AppForground', false);
});
И Push-уведомления слушателя
var settings = {
// Android settings
senderID: '1234567890', // Android: Required setting with the sender/project number
notificationCallbackAndroid: function(data, pushNotificationObject) { // Android: Callback to invoke when a new push is received.
var payload = JSON.parse(JSON.parse(pushNotificationObject).data);
if (appSettings.getBoolean('AppForground') == false){
switch (payload.action) {
case "APPOINTMENT_DETAIL":
frame.topmost().navigate({
moduleName: views.appointmentDetails,
context: {
id: payload.id
}
});
break;
case "MESSAGE":
frame.topmost().navigate({
moduleName: views.appointmentDetails,
context: {
id: payload.id,
from: "messages"
}
});
break;
case "REFERENCES":
frame.topmost().navigate({
moduleName: views.clientDetails,
context: {
id: payload.id,
name: ""
}
});
break;
default:
}
}
},
// iOS settings
badge: true, // Enable setting badge through Push Notification
sound: true, // Enable playing a sound
alert: true, // Enable creating a alert
// Callback to invoke, when a push is received on iOS
notificationCallbackIOS: function(message) {
alert(JSON.stringify(message));
}
};
pushPlugin.register(settings,
// Success callback
function(token) {
// if we're on android device we have the onMessageReceived function to subscribe
// for push notifications
if(pushPlugin.onMessageReceived) {
pushPlugin.onMessageReceived(settings.notificationCallbackAndroid);
}
},
// Error Callback
function(error) {
alert(error);
}
);
Теперь проблема, в том, что если приложение находится в состоянии и убит уведомление приходит. Затем он устанавливает флаг true
при запуске приложения, которое не должно. Поэтому из-за того, что перенаправление не выполняется, а в других случаях, когда приложение находится в состоянии переднего плана, а также его перемещение по страницам (что не должно быть) при получении уведомления.
Я сомневаюсь, что управление флагом вызывает проблему, но не уверен. Не могли бы вы направить меня, если что-то не так с тем, что я сделал?
UPDATE
Я использую push-plugin.
Спасибо.
Я бы установил, ata после прибытия на устройство не будет иметь фоновый параметр, тогда u сможет определить, было ли приложение фоном или передним планом –
. Полезная нагрузка не имеет фонового параметра, ее управляют локально в 'app.js'. основанный на том, что мне нужно управлять навигацией. –