离子中的android推送通知

时间:2015-08-28 06:29:20

标签: android ionic

我正在使用离子框架开发移动应用程序。我已经成功实现了推送通知。当我点击我想要的通知时,应该进入特定页面。我该怎么做? 在客户端:

 var user = $ionicUser.get();
     if(!user.user_id) {
     // Set your user_id here, or generate a random one.
     user.user_id = $ionicUser.generateGUID();
     };


     // Identify your user with the Ionic User Service
     $ionicUser.identify(user).then(function(){
     //$scope.identified = true;
     //alert('User ID ' + user.user_id);
     //alert("here");
     $ionicPush.register({
      canShowAlert: true, //Can pushes show an alert on your screen?
      canSetBadge: true, //Can pushes update app icon badges?
      canPlaySound: true, //Can notifications play a sound?
      canRunActionsOnWake: true, //Can run actions outside the app,
      onNotification: function(notification) {

        // Handle new push notifications here
        // console.log(notification);
        return true;
      }
     });
     });



  });
})

.config(['$ionicAppProvider', function($ionicAppProvider) {
  $ionicAppProvider.identify({
    app_id: 'xxxxxxxxxxxxx',
    api_key: 'xxxxxxxxxxxxxx',
    dev_push: false
  });
}])

在服务器端我使用了php:

$deviceToken = 'APA91bHKwBKrIjmmZ9lke97fl_GbOQ9iRRo-S2sNnZp085hPqVaTHMOd0wqhYFF1PtrtOzFrETX7ZNIkU0JDhC49Tby_AEFIQFRX99B0QpZd7xdiTqsP6sZ08P-8ESdJAie5AJNxhW89nQ7S9evZNcAc9tsJaG91Xw';

$registrationIds = explode(",",$deviceToken);

//$registrationIds = array($deviceToken);

// prep the bundle

$msg = array

(

    'notId' => time(),

    'message'       => 'Technovault is awesome!!!',

    'title'         => 'Title',

    'smallIcon'     =>'icon'



);

$fields = array

(

    'registration_ids'  => $registrationIds,

    'data'              => $msg

);

$headers = array

(

    'Authorization: key=' . 'xxxxxxxxxx',

    'Content-Type: application/json'

);

$ch = curl_init();

curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );

curl_setopt( $ch,CURLOPT_POST, true );

curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );

curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );

curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );

curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );

$result = curl_exec($ch );

curl_close( $ch );

echo $result;

}

else {

    echo "Error";

}

3 个答案:

答案 0 :(得分:0)

我几天前解决了类似的情况。我有一个包含文章列表和文章详细信息的应用。当有新文章时,服务器会发送通知,而不是在playload中包含文章ID。

当应用程序收到通知时,我将其保存在localStorage中,当用户点击通知时,通过 resume 事件,我可以读取此localStorage项目并更改应用程序的状态和显示本文id的文章控制器视图。

我还没有使用 ionPush 库,我使用了Cordova PushPlugin ,因为我有一个自定义推送通知服务器。

当应用收到通知时:

$rootScope.$on('$cordovaPush:notificationReceived', function(event, notification) {
   if (ionic.Platform.isAndroid() && notification.event == 'message') {
        var newsid=notification.payload.newsid;
        if (typeof newsid != 'undefined') {
            // save the newsid to read it later in the resume event
            $window.localStorage.setItem('goafterpush',newsid);
        }
    }
});

简历事件:

$ionicPlatform.on("resume",function(event){
     // read the newsid saved previously when received the notification
     var goafterpush=$window.localStorage.getItem('goafterpush');
     if (goafterpush) {
         $window.localStorage.removeItem('goafterpush');
         $state.go('app.newsdetail',{id:goafterpush});
     }
});

我希望这段代码可以帮到你。

答案 1 :(得分:0)

我已经在Android和iOS上工作了,在python中我已经设置了带有状态名称和Id参数的有效负载

payload = {"$state":"state.name", "$stateParams": "{\"id\": \""+time()+"\"}"}

然后我将其与所有其他消息内容一起包含

"payload": payload

这应该发生在你的$ msg数组中,当用户点击你的应用程序打开的通知并使用提供的参数进入定义状态时,就会发生这种情况。

答案 2 :(得分:0)

您在客户端收到的

notification与参数foreground相关联。从点击通知到应用程序时,它的值为false。所以这就是你如何执行特定的行动:

onNotification: function(notification) {
                  if(notification.foreground == false){
                    //add your logic here to navigate to other page
                  }
                }