我们的项目里使用极光推送来进行推送消息的接收。

1:在极光开发者服务中心配置应用

如果新建一个应用,会自动生成AppKey和Master Secret:

然后进行推送设置,否则无法接收推送。

Android:

IOS:

注意这里iOS的APNS证书文件需要到苹果开发者中心进行配置,生产环境是用于发布之后的正式环境,开发环境是用于测试推送环境的。

极光官网文档有关于如何配置iOS证书的非常详细步骤的介绍,按照这篇文章一步步来,不会出现什么问题。

配置IOS推送证书

如果Android和iOS的推送设置成功,可以在开发者服务中心进行测试

如果没有设置成功,那么目标平台的几个按钮就相应不可用。如果客户端那边连接成功,这里发送通知就可以收到了。

2:客户端连接极光服务器

极光官方维护的客户端插件包括HBuilder,React等等,我们使用PhoneGap插件:

cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey

我们将其封装成为TS版本:

import {Observable} from 'rxjs/Observable';
/*** @name JPush* @description* This plugin does something** @usage* ```* import { JPush } from 'ionic-native';** JPush.functionName('Hello', 123)*   .then((something: any) => doSomething(something))*   .catch((error: any) => console.log(error));** ```*/
export declare class JPush {init(): Promise<any>;stopPush(): Promise<any>;resumePush(): Promise<any>;isPushStopped(): Promise<any>;getRegistrationID(): Promise<any>;setTagsWithAlias(tags?: string[], alias?: string): Promise<any>;setTags(tags?: string[]): Promise<any>;// setAlias(alias?: string): Promise<any>;setAlias(params: {sequence: number;alias?: string;}): Promise<any>;deleteAlias(params: {sequence: number}): Promise<any>;setBadge(badgeNum?: number): Promise<any>;setApplicationIconBadgeNumber(badgeNum?: number): Promise<any>;openNotification(): Observable<any>;receiveNotification(): Observable<any>;receiveMessage(): Observable<any>;getUserNotificationSettings(): Promise<any>;setDebugModeFromIos(): Promise<any>;setDebugMode(isDebug?: boolean): Promise<any>;
}

在Helper.Service.ts里面封装了这些jPush方法,包括init,setAlias等等常用方法:

jointDeviceNameAndSN(deviceName,deviceSN) {return deviceName+' ('+ deviceSN +')';}initJpush() {if (!this.nativeService.isMobile()) {return;}if(this.nativeService.isIos()){// this.jPush.setDebugModeFromIos();}else {// this.jPush.setDebugMode(true);}this.jPush.init();this.jPush.getRegistrationID().then(data=>{console.log("registerationID:"+data);});this.jPushAddEventListener();}private jPushAddEventListener() {this.jPush.getUserNotificationSettings().then(result => {if (result == 0) {console.log('系统设置中已关闭应用推送');} else if (result > 0) {console.log('系统设置中打开了应用推送');}});//点击通知进入应用程序时会触发的事件document.addEventListener("jpush.openNotification", event => {this.setIosIconBadgeNumber(0);let extraFromPush=event["extras"];if(this.nativeService.isIos()){extraFromPush=event;}if(this.globalData.haveEnterHomePage){//应用已打开this.handleDataFromPush(extraFromPush);}else { //应用处于关闭状态setTimeout(()=>{this.handleDataFromPush(extraFromPush);},2000)}}, false);//收到通知时会触发该事件document.addEventListener("jpush.receiveNotification", event => {let content = this.nativeService.isIos() ? event['aps'].alert : event['alert'];console.log("jpush.receiveNotification" + content);}, false);//收到自定义消息时触发这个事件document.addEventListener("jpush.receiveMessage", event => {let message = this.nativeService.isIos() ? event['content'] : event['message'];console.log("jpush.receiveMessage" + message);}, false);//设置标签/别名回调函数document.addEventListener("jpush.setTagsWithAlias", event => {console.log("onTagsWithAlias");let result = "result code:" + event['resultCode'] + " ";result += "tags:" + event['tags'] + " ";result += "alias:" + event['alias'] + " ";console.log(result);}, false);}handleDataFromPush(extraFromPush){if(extraFromPush.CreateOrderId){this.app.getActiveNav().push(WorkOrderDetailPage,{orderId:extraFromPush.CreateOrderId})}else if(extraFromPush.MaintenanceOrderId) {this.app.getActiveNav().push(MaintanceManagePage,{orderId:extraFromPush.MaintenanceOrderId})} else if(extraFromPush.SN){this.app.getActiveNav().push(ReceivePushDeviceInfoPage,{extraData:extraFromPush})}else if(extraFromPush.NewCreateOrderId){this.app.getActiveNav().push(MaintanceManagePage,{orderId:extraFromPush.NewCreateOrderId})}}//设置标签setTags() {if (!this.nativeService.isMobile()) {return;}let tags = [];if (this.nativeService.isAndroid()) {tags.push('android');}if (this.nativeService.isIos()) {tags.push('ios');}console.log('设置setTags:' + tags);// this.jPush.setTags(tags);}//设置别名,一个用户只有一个别名setAlias(userEmail:string) {if (!this.nativeService.isMobile()) {return;}this.jPush.setAlias({ sequence: 1, alias: userEmail+'' }).then((data)=>{console.log(data)}).catch((error)=>{console.log(error)});}//删除别名deleteAlias(){if (!this.nativeService.isMobile()) {return;}this.jPush.deleteAlias({ sequence: 100 });}setTagsWithAlias(userId) {if (!this.nativeService.isMobile()) {return;}console.log('设置setTagsWithAlias:' + userId);// this.jPush.setTagsWithAlias(['man', 'test'], '' + userId);}//设置ios角标数量setIosIconBadgeNumber(badgeNumber) {if (this.nativeService.isIos()) {this.jPush.setBadge(badgeNumber);//上传badge值到jPush服务器this.jPush.setApplicationIconBadgeNumber(badgeNumber);//设置应用badge值}}

在app.component.ts我们调用jpushInit(),如果连接成功,每台设备和极光服务器会通过RegisterId相连,如果没有获取到RegisterId,说明没有连接成功。

在home.ts我们设置别名:

ionViewDidLoad() {let currentUserId:string=this.globalData.userId;let patternUserId=currentUserId.replace(/[&\|\\\*^%$#@\-]/g,"");setTimeout(()=>{this.helper.setTags();this.helper.setAlias(patternUserId);},3000);}

在退出登录的时候,取消别名:

 showConfirm() {this.translate.get(['Settings.LoginOut.name','Settings.LoginOut.message','Shared.OkText','Shared.CancelText']).subscribe((res) => {let confirm = this.alertCtrl.create({title: res['Settings.LoginOut.name'],message: res['Settings.LoginOut.message'],buttons: [{text: res['Shared.CancelText']},{text: res['Shared.OkText'],handler: () => {this.helper.deleteAlias();this.loginService.logout();this.navCtrl.setRoot('LoginPage');}}]});confirm.present();});}

这样,退出账户之后就收不到推送了。

注意,调试的时候,一定要关注网络情况。因为很多公司的无线网处于安全考虑,是限制IP访问的。所以如果你的测试手机如果接收不到推送,看看是不是网络问题。

基于Ionic3和极光推送实现推送功能相关推荐

  1. 基于openfire+smack的Android、消息推送服务

    前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...

  2. 最简单的基于FFmpeg的推流器(以推送RTMP为例)

    ===================================================== 最简单的基于FFmpeg的推流器系列文章列表: <最简单的基于FFmpeg的推流器(以 ...

  3. 极光推送——App推送

    极光推送:主要用于APP实时获取最新消息.本文主要描述如何使用极光提供的SDK进行推送. 极光推送中主要需要配置的参数如下: 推送平台:JPush 当前支持 Android, iOS, Windows ...

  4. android极光静默推送,Android 推送 整合小米、个推、jpush

    Android系统由google提供的推送的服务在国内并不能很好的运作,因此不能像iOS能提供统一管理的推送服务.Android端推送目前常用的都是第三方推送服务,也可以自己搭建推送服务器来实现, 为 ...

  5. 移动应用消息推送及推送原理

    消息推送 消息通知分本地通知和远程推送通知. 本文是记录React Native使用aws push notifications推送及相关配置及遇到的相关问题.在twilio和aws中选择使用aws的 ...

  6. 关于Android安卓APP保活 - 安卓消息推送详解 - 安卓端外推送离线推送

    转自:http://zhangtielei.com/posts/blog-android-push.html 说Android端外推送比较烦,实际有两层意思:首先是说实现上比较麻烦,至今业界也没有找到 ...

  7. android整合小米、个推、jpush推送

    android系统由google提供的推送的服务在国内并不能很好的运作,因此不能像ios能提供统一管理的推送服务.为了节约开发成本,目前主流的提供第三方推送服务的有:极光推送.个推.友盟.小米推送.百 ...

  8. 浏览器安全检查己通过_百度主动推送三项合一功能

    百度主动推送三项合一功能 作者:68喜 功能模块:搜索关键词记录推送熊掌号当天推送+熊掌号历史推送+普通主动推送 */ //错误显示屏蔽 error_reporting(E_ERROR | E_WAR ...

  9. android推送接口,推送API

    推送API 简述 个推为开发者提供了如下3种消息推送方式: toSingle :简称"单推",指向单个用户推送消息 toList:简称"批量推",指向制定的一批 ...

  10. php主动推送弹幕_源起网-织梦发布文档主动百度推送熊掌推送批量推送

    源起网-织梦发布文档主动百度推送熊掌推送批量推送 环境要求 PHP必须开启了curl扩展 百度主动推送(实时)可以缩短百度爬虫发现您站点新链接的时间,使新发布的页面可以在第一时间被百度收录 织梦程序我 ...

最新文章

  1. Xcode代码块功能
  2. php pdo操作mysql_PHP操作数据库详细(PDO)
  3. 推动Windows的限制:句柄
  4. dj鲜生-08-用户注册的功能-上-实现注册的主逻辑和其本的验证功能-伴随着调试
  5. mx250是什么_来看看联想小新Pro13 2020款和2019款哪个好?区别是什么?
  6. ubuntu python3.7修改默认pip版本_详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本 安装python3后使用pip和pip3的区别...
  7. 离散数学及其应用 (第2版)
  8. 数据分析案例--淘宝用户行为分析
  9. Super Iservice 发布地图三维服务
  10. 安装iperf,提示:没有可用软件包 iperf
  11. 1词法分析PaddleNLP / examples / lexical_analysis
  12. webpack中development和production的理解
  13. http://edelivery.oracle.com/?ARU_LANG=ZHS
  14. 【陈工笔记】# 对我需要掌握的计算机知识做个持续性整合 #
  15. Shiro-----Shiro入门简介
  16. 部署oneapi HPC版本
  17. 简单c/c++笔试题
  18. python程序设计第3版课后答案_python程序设计第三版课后答案
  19. “京台高铁”亮相百度地图,真能在2035年建成吗?
  20. 腾讯-- TDW数据仓库数据安全

热门文章

  1. 最新正版win7系统下载
  2. 一文详解:中信银行java笔试题库
  3. 系统中 用户操作日志管理
  4. 分期手续费转换为年化利率
  5. QTTabBar 使用
  6. css知识 - 收藏集 - 掘金
  7. wps下一步快捷键_办公必备|终于整理完了这74个WPS最常用快捷键
  8. Win10安装程序修复计算机,directx修复工具win10最新版
  9. C语言实现扫雷游戏(详解)
  10. 2022-8-4用GPS模块和Arduino制作一个多功能车辆测速仪