ionic 集成jpush

参:http://www.cnblogs.com/linsu/p/5641158.html

默认用户已在极光添加应用 已拿到appKey;

1.进入项目根目录

cd d:/jpushDemo

2.添加jpush插件

cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your appkey

3.修改plugins.xml

查看 jpushDemo》plugins》jpush-phonegap-plugin》plugins.xml 大概在 line 13 

查找

<preference name="APP_KEY">

修改为

    <preference name="APP_KEY"  value="your appkey" />

4.添加android平台

ionic platform add android

5.编写代码

index.html

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <meta charset="utf-8">
 5     <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
 6     <title></title>
 7 
 8     <link href="lib/ionic/css/ionic.css" rel="stylesheet">
 9     <link href="css/style.css" rel="stylesheet">
10 
11     <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
12     <link href="css/ionic.app.css" rel="stylesheet">
13     -->
14 
15     <!-- ionic/angularjs js -->
16     <script src="lib/ionic/js/ionic.bundle.js"></script>
17 
18     <!-- cordova script (this will be a 404 during development) -->
19     <script src="cordova.js"></script>
20 
21     <!-- your app's js -->
22     <script src="js/app.js"></script>
23     <script src="js/controllers.js"></script>
24     <script src="js/services.js"></script>
25 
26 
27   </head>
28   <body ng-app="starter">
29   <ion-nav-bar class="bar-positive">
30     <ion-nav-back-button></ion-nav-back-button>
31   </ion-nav-bar>
32   <ion-nav-view name="mainContainer"></ion-nav-view>
33   </body>

main.html

 1 <ion-view view-title="极光推送Ionic Demo">
 2   <ion-content class="padding">
 3         <form name="jPushForm">
 4           <button class="button button-block button-positive" ng-click="init()">启动推送服务</button>
 5           <button class="button button-block button-energized" ng-click="stopPush()">停止推送服务</button>
 6           <button class="button button-block button-royal" ng-click="resumePush()">重启推送服务</button>
 7           <button class="button button-block button-light" ng-click="getPushState()">查看服务状态</button>
 8           <div class="list">
 9             <div class="item item-input-inset">
10               <label class="item-input-wrapper">
11                 <input type="text" placeholder="设置tag,多个tag用逗号分隔" required ng-trim="true" ng-model="options.tags" />
12               </label>
13 
14               <input type="submit" class="button button-small button-positive" value="设置" ng-click="setTags()" />
15               <!-- <button class="button button-small button-positive" ng-click="setTags()"> 
16                 设置
17               </button>-->
18             </div>
19             
20 
21             <div class="item item-input-inset">
22               <label class="item-input-wrapper">
23                 <input type="text" placeholder="设置alias" required ng-trim="true" ng-model="options.alias" />
24               </label>
25               <input type="submit" class="button button-small button-positive" value="设置" ng-click="setAlias()" />
26               <!-- <button class="button button-small button-positive" ng-click="setAlias()">
27                 设置
28               </button> -->
29             </div>
30           </div>
31           <button class="button button-block button-balanced" ng-click="setTagsWithAlias()">同时设置</button>
32           <button class="button button-block button-royal" ng-click="cleanTagAndAlias()">清空设置</button>
33           <a href="#/list">消息列表</a>
34           <span class="error" ng-show="jPushForm.input.$error.required">要求输入设置值</span>
35           
36           <p>{{result}}</p>
37         </form>
38       </ion-content>
39 </ion-view>

list.html

1 <ion-view title="消息列表">
2     <ion-content>
3         <ion-list>
4             <ion-item ng-repeat="item in items" href="#/detail?id={{item.id}}">
5             对应消息:{{item.id}}
6             </ion-item>
7         </ion-list>
8     </ion-content>
9 </ion-view>

detail.html

<ion-view title="消息内容">
    <ion-content class="padding">
        {{message}}
    </ion-content>
</ion-view>

app.js

 1 var jpushdemo=angular.module('starter', ['ionic']);
 2 
 3 jpushdemo.run(function($ionicPlatform,$state,jpushService) {
 4   $ionicPlatform.ready(function() {
 5     // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
 6     // for form inputs)
 7     if(window.cordova && window.cordova.plugins.Keyboard) {
 8       cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
 9     }
10     if(window.StatusBar) {
11       StatusBar.styleDefault();
12     }
13 
14 
15 
16     //推送初始化
17     var setTagsWithAliasCallback=function(event){
18       window.alert('result code:'+event.resultCode+' tags:'+event.tags+' alias:'+event.alias);
19     }
20     var openNotificationInAndroidCallback=function(data){
21       var json=data;
22       window.alert(json);
23       if(typeof data === 'string'){
24         json=JSON.parse(data);
25       }
26       var id=json.extras['cn.jpush.android.EXTRA'].id;
27       //window.alert(id);
28       var alert = json.extras['cn.jpush.android.ALERT'];
29       $state.go('detail',{id:id+alert});
30     }
31     var config={
32       stac:setTagsWithAliasCallback,
33       oniac:openNotificationInAndroidCallback
34     };
35 
36     jpushService.init(config);
37 
38     //启动极光推送服务
39     window.plugins.jPushPlugin.init();
40     window.plugins.jPushPlugin.setDebugMode(true);
41   });
42 
43   window.onerror = function(msg, url, line) {
44    var idx = url.lastIndexOf("/");
45    if(idx > -1) {
46     url = url.substring(idx+1);
47    }
48    alert("ERROR in " + url + " (line #" + line + "): " + msg);
49    return false;
50   };
51 })
52 
53 jpushdemo.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider,$urlRouterProvider) {
54   $stateProvider.state('main',{
55     url:'/main?url',
56     views:{
57       'mainContainer':{
58         templateUrl: "templates/main.html",
59         controller:'mainCtrl'
60       }
61     }
62   }).state('list',{
63     url:'/list',
64     views:{
65       'mainContainer':{
66         templateUrl:'templates/list.html',
67         controller:'listCtrl'
68       }
69     }
70   }).state('detail',{
71     url:'/detail?id',
72     views:{
73       'mainContainer':{
74         templateUrl:'templates/detail.html',
75         controller:'detailCtrl'
76       }
77     }
78   });
79   $urlRouterProvider.otherwise('/main')
80 }])

controller.js

 1 jpushdemo.controller('mainCtrl', ['$scope','$ionicPopup','$stateParams','$state','jpushService',
 2   function ($scope,$ionicPopup,$stateParams,$state,jpushService) {
 3     $scope.message="";
 4 
 5     $scope.options={
 6         tags:"",
 7         alias:""
 8     };
 9 
10     $scope.result="";
11 
12     // $scope.$on('$ionicView.beforeEnter',function(){
13     //     var url=$stateParams.url;
14     //     if(url){
15     //         $state.go(url);
16     //     }
17     // });
18 
19     $scope.init=function(){
20         jpushService.init();
21         window.alert('执行启动');
22     };
23 
24     $scope.stopPush=function(){
25         jpushService.stopPush();
26         window.alert('执行停止');
27     };
28 
29     $scope.resumePush=function(){
30         jpushService.resumePush();
31         window.alert('执行重启');
32     };
33 
34     $scope.getPushState=function(){
35         jpushService.isPushStopped(function(data){
36             if(data==0){
37                 window.alert('启动');
38             }else{
39                 window.alert('停止');
40             }
41         });
42     };
43 
44     $scope.setTags=function(){
45         var tagArr=$scope.options.tags.split(',');
46         setTagsWithAlias(tagArr,null);
47         //jpushService.setTags(tagArr);
48     }
49 
50     $scope.setAlias=function(){
51         var alias=$scope.options.alias;
52         setTagsWithAlias(null,alias);
53         //jpushService.setAlias(alias);
54     }
55 
56     var setTagsWithAlias=function(tags,alias){
57         jpushService.setTagsWithAlias(tags,alias);
58     }
59     $scope.setTagsWithAlias=function(){
60         var tagArr=$scope.options.tags.split(',')
61         if(tagArr.length==0){
62             tagArr=null;
63         }
64 
65         var alias=$scope.options.alias;
66         if(alias===''){
67             alias=null;
68         }
69         setTagsWithAlias(tagArr,alias);
70 
71     }
72     $scope.cleanTagAndAlias=function(){
73         var tags=[];
74         var alias="";
75         setTagsWithAlias(tags,alias);
76     }
77 }])
78 
79 .controller('listCtrl', ['$scope','noticeService' ,function ($scope,noticeService) {
80     $scope.items=noticeService.notices;
81 }])
82 
83 .controller('detailCtrl', ['$scope','$stateParams', function ($scope,$stateParams) {
84     var id=$stateParams.id;
85     $scope.message='消息id:'+id;
86 }])

services.js

 1 jpushdemo.factory('jpushService',['$http','$window','$document',function($http,$window,$document){
 2     var jpushServiceFactory={};
 3 
 4     //var jpushapi=$window.plugins.jPushPlugin;
 5 
 6     //启动极光推送
 7     var _init=function(config){
 8         $window.plugins.jPushPlugin.init();
 9         //设置tag和Alias触发事件处理
10         document.addEventListener('jpush.setTagsWithAlias',config.stac,false);
11         //打开推送消息事件处理
12         $window.plugins.jPushPlugin.openNotificationInAndroidCallback=config.oniac;
13         
14 
15         $window.plugins.jPushPlugin.setDebugMode(true);
16     }
17     //获取状态
18     var _isPushStopped=function(fun){
19         $window.plugins.jPushPlugin.isPushStopped(fun)
20     }
21     //停止极光推送
22     var _stopPush=function(){
23         $window.plugins.jPushPlugin.stopPush();
24     }
25 
26     //重启极光推送
27     var _resumePush=function(){
28         $window.plugins.jPushPlugin.resumePush();
29     }
30 
31     //设置标签和别名
32     var _setTagsWithAlias=function(tags,alias){
33         $window.plugins.jPushPlugin.setTagsWithAlias(tags,alias);
34     }
35 
36     //设置标签
37     var _setTags=function(tags){
38         $window.plugins.jPushPlugin.setTags(tags);
39     }
40 
41     //设置别名
42     var _setAlias=function(alias){
43         $window.plugins.jPushPlugin.setAlias(alias);
44     }
45 
46 
47 
48     jpushServiceFactory.init=_init;
49     jpushServiceFactory.isPushStopped=_isPushStopped;
50     jpushServiceFactory.stopPush=_stopPush;
51     jpushServiceFactory.resumePush=_resumePush;
52 
53     jpushServiceFactory.setTagsWithAlias=_setTagsWithAlias;
54     jpushServiceFactory.setTags=_setTags;
55     jpushServiceFactory.setAlias=_setAlias;
56 
57     return jpushServiceFactory;
58 }])
59 
60 
61 .factory('noticeService', [function () {
62     var notices=[
63         {id:1,msg:'消息一'},
64         {id:2,msg:'消息二'},
65         {id:3,msg:'消息三'},
66         {id:4,msg:'消息四'},
67         {id:5,msg:'消息五'},
68         {id:6,msg:'消息六'},
69         {id:7,msg:'消息七'},
70         {id:8,msg:'消息八'}
71     ];
72 
73     return {
74         notices:notices
75     };
76 }])
posted @ 2017-06-01 17:14  心的记忆  阅读(614)  评论(0编辑  收藏  举报