第十五章:集成JPUSH
如果不想自己搭建push server,则可以借助于第三方的api来实现push的功能,本文主要介绍ionic如何集成jpush。
具体步骤如下:
- 创建ionic应用:ionic_jpush。
- 申请jpush账号:创建应用,上传开发者证书,并且记录jpush_api_appkey。
- 安装jpush plugin
first way: cordova plugin add jpush-phonegap-plugin --variable API_KEY=your_jpush_appkey
second way:cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable API_KEY=your_jpush_appkey
third way:
git clone https://github.com/jpush/jpush-phonegap-plugin.git
cordova plugin add $JPUSH_PLUGIN_DIR --variable API_KEY=your_jpush_appkey
- 修改配置
找到路径:ionic_jpush\plugins\cn.jpush.phonegap.JPushPlugin\src\ios\PushConfig.plist,修改jpush_api_key,并且填写如下部分:
<key>APS_FOR_PRODUCTION</key>
<string>0</string>
- 在services中添加push工厂:
.factory('Push', function() {
    var push;
    return {
      setBadge: function(badge) {
        if (push) {
          console.log('jpush: set badge', badge);
          plugins.jPushPlugin.setBadge(badge);
        }
      },
      setAlias: function(alias) {
        if (push) {
          console.log('jpush: set alias', alias);
          plugins.jPushPlugin.setAlias(alias);
        }
      },
      check: function() {
        if (window.jpush && push) {
          plugins.jPushPlugin.receiveNotificationIniOSCallback(window.jpush);
          window.jpush = null;
        }
      },
      init: function(notificationCallback) {
        console.log('jpush: start init-----------------------');
        push = window.plugins && window.plugins.jPushPlugin;
        if (push) {
          console.log('jpush: init');
          plugins.jPushPlugin.init();
          plugins.jPushPlugin.setDebugMode(true);
          plugins.jPushPlugin.openNotificationInAndroidCallback = notificationCallback;
          plugins.jPushPlugin.receiveNotificationIniOSCallback = notificationCallback;
        }
      }
    };
  })
- 在app.js的run中初始化jpush并添加监听事件:其中请修改别名“12345678”成为你想要的name。
.run(function($ionicPlatform,Push) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);
    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }
    //jpush callback method
      var notificationCallback = function(data) {
          console.log('received data :' + data);
          var notification = angular.fromJson(data);
          //app 是否处于正在运行状态
          var isActive = notification.notification;
          // here add your code
          //ios
          if (ionic.Platform.isIOS()) {
            window.alert(notification);
          } else {
          //非 ios(android)
          }
      };
      //初始化
      Push.init(notificationCallback);
      //设置别名
      Push.setAlias("12345678");
      console.log('start to define addEventListener');
      var onOpenNotification= function(event) {
        console.log("JPushPlugin:onOpenNotification is triggered");
      };
      var onBackgroundNotification = function(event){
            console.log("JPushPlugin:onBackgroundNotification is triggered");
      };
      var onReceiveNotification = function(event){
        console.log("JPushPlugin:onReceiveNotification is triggered");
      };
      console.log('end to define addEventListener');
      console.log('start to add addEventListener');
      document.addEventListener("jpush.openNotification", onOpenNotification, false);
      document.addEventListener("jpush.receiveNotification", onReceiveNotification, false);
      document.addEventListener("jpush.backgroundNotification", onBackgroundNotification, false);
      console.log('end to add addEventListener');
  });
})
- 编译ios项目:
ionic build iOS
- 使用xcode打开工程:进行证书配置,确保使用的开发者证书有apns的权限。
- 在jpush官网中进行push模拟。
- 编译Android项目:
ionic build android
- 使用Android Studio打开工程:确保Jpush的包名和Project的包名是一样的。
- 在jpush官网进行push模拟。
常见问题:
- ios编译失败等一系列问题:最好请有经验的ios开发人员帮忙排查。
- 无法连接到jpush服务器:请检查api_key是否正确。
- 无法接收push信息:请检查jpush官网的push证书配置是否正确。
参考资料:
第十五章:集成JPUSH的更多相关文章
- Gradle 1.12 翻译——第十五章. 任务详述
		有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ... 
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
		其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ... 
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
		本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ... 
- Gradle 1.12用户指南翻译——第六十五章. Maven 发布(新)
		其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ... 
- 15第十五章UDF用户自定义函数(转载)
		15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布 
- 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
		第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ... 
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
		第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ... 
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
		本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ... 
- “全栈2019”Java多线程第三十五章:如何获取线程被等待的时间?
		难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ... 
- “全栈2019”Java多线程第二十五章:生产者与消费者线程详解
		难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ... 
随机推荐
- wpf path语法
			http://www.cnblogs.com/HQFZ/p/4452548.html WPF系列 Path表示语法详解(Path之Data属性语法) 
- Java集合类总结 (四)
			PriorityQueue类 优先队列不管你按照什么顺序插入元素,出队列的时候元素都是按顺序输出的.也就是每次调用remove的时候,都返回当前队列中最小的元素.然后队列中的元素不是维持排序状态的,如 ... 
- go tcp使用
			TCP clientThere have been countless times during penetration tests that I've neededto whip up a TCP ... 
- Django的文件上传以及预览、存储
			思路: 文件上传通过前端的input标签,input设置display:none属性. 内容显示需要让前端通过<img>标签读取图片内容,可以通过<label>标签连接< ... 
- 如何下载火山小视频-附火山小视频下载youtube视频下载网站
			火山小视频下载方法: 1. 打开火山小视频APP 2. 点开某个视频,点击右下角分享按钮,在分享弹框中点击复制链接,或者通过分享到微信QQ等获取视频链接 3. 打开在线免费的火山小视频解析下载工具 h ... 
- innerText、innerHTML
			innerTest修改的是标签的文本内容,如果修改的字符串具有标签的格式,不会把标签展示到页面中 innerHtml打印标签中所有子标签 以字符串的形式,如果修改的字符串有标签的格式,则直接展示到页面 ... 
- centos6.5 git clone http 报错
			自己搭建服务器环境为centos6.5,需要使用git clone 命令的时候报错 首先查看centos上安装的git版本,我的版本为1.7.10 报错后,查阅相关资料需将centos升级,操作如下 ... 
- php 百万级数据文件导出
			背景:最近一个需求是从mysql里面读取数据(有点大),然后导出为csv文件 问题 :发现导出的过程中自己中断了,没有报错 . 第一反应是测试导出一个小一点的数据(少查几条),发现没问题 . 查看导出 ... 
- HDU-1431-素数回文(暴力打表)
			素数回文 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ... 
- TX1 文字界面启动与root用户自动登录设置
			设置默认文字启动界面 更改/boot/extlinux/extlinux.conf文件,在最后一行的末尾添加 text. 设置自动登录 在/etc/init/tty1.conf文件末尾添加: exec ... 
