0

푸시 알림을 구현하는 Nativescript의 애플리케이션을 연구 중입니다. 서버가 푸시 알림을 보내고 알림의 페이로드에 언급 된 action에 기반하여 애플리케이션에서 리디렉션해야한다고 가정 해 보겠습니다. 서랍과 응용 프로그램의 알림에 대한 사용자 탭이 백그라운드에있는 경우이 리다이렉션을 수행해야합니다. 애플리케이션이 포 그라운드에있는 경우 리디렉션하지 않아야하는 경우입니다.Nativescript에서 핸들 푸시 알림

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); 
}); 

을 app.js 그리고 푸시 알림 이제 청취자

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으로 설정합니다. 따라서 리디렉션이 수행되지 않기 때문에 응용 프로그램이 포 그라운드 상태에 있고 다른 페이지에서 통보를받을 때 페이지를 탐색하는 경우가 있습니다.

플래그 관리가 문제를 일으키는 지 의심 스럽지만 확실하지 않습니다. 내가 한 일이 뭐가 잘못되었을 때 나를 안내 해주시겠습니까? 내가 push-plugin을 사용하고

UPDATE.

감사합니다.

+0

d 장치에 도착한 후 ata는 배경 매개 변수를 갖지 않을 것입니다. 그러면 앱이 배경인지 전경인지 알 수 있습니다. –

+0

페이로드에 배경 매개 변수가 없습니다.이 매개 변수는'app.js'에서 로컬로 관리됩니다. 그것을 기반으로 탐색을 관리해야합니다. –

답변

1

I 알림

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

이 플러그인은 FCM을 사용을 위해 이것을 사용, 그것은 datas에 추가는 == 응용 프로그램이 배경이었던 경우 (전경 확인할 수 있습니다 페이로드로부터 있도록 매개 변수를 전경 통지에서 수신 false, 앱이 활성화되지 않았거나 알림이 도착한 후 시작됨) 또는 전경 (전경 == true, 앱이 열려 있고 활성 상태)이지만 다른 플러그인이므로 코드를 변경해야합니다.

+0

인 브라우저에서 작업 중입니다. 어떻게 gradles 및 라이브러리를 관리 할 수 ​​있습니까? –

+0

서버 측에서도 푸시 전송을 변경해야합니다. 데모/링크를 제공 할 수 있습니까? –

+0

서버 측 코드의 데모를 보낼 때 문제가 없지만 Appbuilder에서 전체 응용 프로그램을 작성하거나 "function (data, pushNotificationObject)"에서 안드로이드 콜백의 데이터 내용을 작성하는 경우 Appbuilder에서 응용 프로그램 측을 수행하는 방법을 모르십니까? –