Ионное уведомление 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});
}