Ионное уведомление Push: Как обрабатывать onClick?

СИТУАЦИЯ:

Я использую Ionic Push-уведомления в своем приложении.

Все работает нормально.

Когда пользователь отправляет сообщение, уведомление будет запущено через запрос cURL, и он поступит, только если приемник отключен или находится в фоновом режиме.

У меня только проблема обработки обратного вызова onClick.

Следуя документации я поместил функцию обратного вызова в параметр onNotification.

"onNotification": эта функция будет вызываться, когда ваше устройство получает уведомление и снабжается объектом уведомления получен.

Что мне нужно сделать, когда пользователь нажимает на уведомление, это перенаправить его на определенную страницу.

Он работает.

Проблема заключается в том, что когда приложение находится в FOREGROUND, пользователь будет перенаправлен на эту страницу каждый раз, когда будет выполнен запрос cURL... независимо от того, что уведомление получено (приложение выключено или фон) или нет (приложение на переднем плане)...

КОД:

.run(function($ionicPlatform, $rootScope, $location, $state) {

  $ionicPlatform.ready(function() {

    var push = new Ionic.Push({

        "debug": true,
        "onNotification": function(notification) 
        {
            $rootScope.get_my_account_data();
            $location.path('app/chat');
        },
        "onRegister": function(data) 
        {
            console.log(data.token);
        },

    });

ВОПРОС:

Как мне настроить функцию обратного вызова, которая будет вызвана ТОЛЬКО, когда пользователь на самом деле нажимает на уведомление, а не когда он находится внутри приложения?

Мне нужно сделать некоторые трюки внутри onNotification или есть возможность настроить обратный вызов onClick?

Спасибо!

Ответ 1

РЕШЕНИЕ:

Хорошо, мне это удалось, используя AppStatus. Проверяя это, я буду применять перенаправление только в том случае, если статус приложения asleep или closed.

if (notification.app.asleep || notification.app.closed)

КОД:

var push = new Ionic.Push({

    "debug": true,
    "onNotification": function(notification) 
    {
        $rootScope.get_my_account_data();

        if (notification.app.asleep || notification.app.closed) 
        {
            // the app was asleep or was closed, so do the redirect 
            $location.path('app/your_chat_page');
        }

    },
    "onRegister": function(data) 
    {
        console.log(data.token);
    },

    });

EDIT:

Теперь ionic-platform-web-client устарел. Вы должны перейти на Ionic Cloud.

С ионическим облаком меняются несколько вещей, поэтому теперь код будет немного отличаться:

$scope.$on('cloud:push:notification', function(event, data) 
{
    var msg = data.message;

    if (msg.app.asleep || msg.app.closed) 
    {
        // the app was asleep or was closed, so do the redirect 
        $location.path('app/your_chat_page');
    }
});

Ответ 2

Я работаю с этим методом и работает

1. Сначала инициализируйте push

var push = PushNotification.init({
    android: {
       senderID: "XXXXXXXXX"
    },
    browser: {
        pushServiceURL: 'http://push.api.phonegap.com/v1/push'
    },
    ios: {
        alert: "true",
        badge: true,
        sound: 'true'
    },
    windows: {}
});

2. push.on('notification', function(data) { используйте это для запрошенных нажатий и обрабатывайте их, как

if (data.additionalData.link_url.indexOf('http')>-1){
$state.go('x',{x:x});
}