2016-08-25 32 views
12

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

,我在我的应用程序使用Ionic Push notifications

一切工作正常。

当用户发送消息时,通知将通过cURL请求触发,并且只有当接收者关闭或在后台应用程序时才会到达。

我只是处理onClick回调的问题。

documentation我已将回调函数放在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回调?

谢谢!

回答

6

THE SOLUTION:

好的我管理它使用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

具有离子云几件事情的变化,所以现在代码会稍有不同:

$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'); 
    } 
}); 
+0

你可以给我看一个在ionframework v1中使用离子云的推送通知的例子吗? – talentedandrew

+0

在我的答案中有两个例子。如果你需要更多的信息,这两个是非常好的教程:https://devdactic.com/ionic-push-notifications-guide/(如何设置所有的东西)http://docs.ionic.io/services/push/ (所有你需要云上的通知) – johnnyfittizio

+0

你的第一个链接,我认为是旧版本...现在在他们的文档中,他们使用离子云... – talentedandrew

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

所以基本上你正在管理的onNotification内。但在这种情况下,这将始终适用,前景和背景的权利?我只需要在后台。 – johnnyfittizio