我正在使用Nativescript中的應用程序來實現推送通知。可以說服務器發送推送通知,並根據通知的有效負載中提到的action
我將不得不在應用程序中重定向。如果用戶點擊抽屜中的通知並且應用程序處於後臺,則應執行此重定向。其他情況下應用程序不應該重定向,如果它在前臺。我曾經管理的標誌,作爲後續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);
});
而且推送通知監聽
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。
感謝。
我會檢查d ata到達設備後不會有背景參數,那麼你將能夠確定應用程序是背景還是前景 –
有效負載沒有背景參數,它在'app.js'本地管理。基於此我必須管理導航。 –