0

Я работаю над применением в 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.

Спасибо.

+0

Я бы установил, ata после прибытия на устройство не будет иметь фоновый параметр, тогда u сможет определить, было ли приложение фоном или передним планом –

+0

. Полезная нагрузка не имеет фонового параметра, ее управляют локально в 'app.js'. основанный на том, что мне нужно управлять навигацией. –

ответ

1

Я использую это для уведомлений

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

Этот плагин использовать FCM, он добавляет к DATAS полученные от уведомлений на первом плане параметр так, от полезной нагрузки можно определить, если приложение было фоном (на переднем плане == false, приложение неактивно или было запущено после получения уведомления) или переднего плана (foreground == true, приложение открыто и активно), но вам нужно внести некоторые изменения в код, поскольку они представляют собой разные плагины.

+0

Я работаю над In-Browser. Как я могу управлять градиентами и библиотеками? –

+0

Даже на серверах я должен будет внести изменения для отправки push. Не могли бы вы предоставить демо/ссылку? –

+0

У меня нет проблем с отправкой демонстрационного кода на стороне сервера, но я не уверен, как это сделать на стороне приложения Appbuilder, если вы строите там цельное приложение или что-то из данных «функции (data, pushNotificationObject)» от обратного вызова android? –

Смежные вопросы