离子推送通知:如何处理onClick?

13

情况:

我在我的应用程序中使用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回调函数?

谢谢!

2个回答

6

解决方案:

好的,我使用了 AppStatus 来实现它。 通过检查它,只有当应用程序处于 asleepclosed 状态时,我才会应用重定向。

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

    });

编辑:

现在ionic-platform-web-client已经被弃用。你应该迁移到Ionic Cloud

使用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');
    }
});

我的回答中包含了两个示例。如果您需要更多信息,这两个教程非常好:https://devdactic.com/ionic-push-notifications-guide/(如何设置所有内容)http://docs.ionic.io/services/push/(云通知所需的一切) - FrancescoMussi
你怎么捕获通知?我需要将此代码写在我的控制器还是run中? - Anurag
我有一个疑问.. GCM是免费使用的吗? - Anurag
让我们在聊天中继续这个讨论 - FrancescoMussi
当用户点击推送通知时,**$scope.$on('cloud:push:notification')** 才会起作用。如果推送通知到达并且您从菜单打开应用程序,则不会遇到新的推送通知。或者您放在该块上的代码将不会执行。您有解决方案吗? - Chirag thaker
显示剩余8条评论

1

我正在使用这个方法,它很有效。

1.首先初始化推送。

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

所以基本上你是在onNotification函数中进行管理的。但在这种情况下,它将始终适用于前台和后台,对吗?我只需要在后台使用它。 - FrancescoMussi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接