0

我正在使用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

感謝。

+0

我會檢查d ata到達設備後不會有背景參數,那麼你將能夠確定應用程序是背景還是前景 –

+0

有效負載沒有背景參數,它在'app.js'本地管理。基於此我必須管理導航。 –

回答

1

我用這個通知

https://github.com/EddyVerbruggen/nativescript-plugin-firebase

這個插件使用流式細胞儀,把它添加到DATAS從有效載荷前景參數,以便收到通知,你可以決定是否應用爲背景(前景==假,應用程序未處於活動狀態或在通知到達後啓動)或前景(前景== true,應用程序處於打開狀態並處於活動狀態),但需要對代碼進行一些更改,因爲它們是不同的插件

+0

我正在使用In-Browser。我如何管理階梯和圖書館? –

+0

即使在服務器端,我也必須對發送推送進行更改。你能提供一些演示/鏈接? –

+0

我沒有問題發送服務器端代碼演示,但不知道如何在Appbuilder上執行應用程序端,如果您正在構建整個應用程序或來自android回調的「function(data,pushNotificationObject)」數據的內容? –