项目初始化

1. 安装项目依赖:

# 安装cordova插件
ionic cordova plugin add jpush-phonegap-plugin --variable APP_KEY="极光的appKey"
# 安装npm依赖
npm install --save @jiguang-ionic/jpush

2. 然后在app.module.ts中注册极光服务:(引入JPush后StatusBar、SplashScreen可能报错,不影响程序运行不用理会)

import { JPush } from '@jiguang-ionic/jpush/ngx';

@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
providers: [
StatusBar,
SplashScreen,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
JPush // 这里注册极光服务
],
bootstrap: [AppComponent]
})
export class AppModule { }

3. 在app.component.ts中对极光服务进行初始化操作

import { JPush } from '@jiguang-ionic/jpush/ngx';

export class AppComponent {
constructor(
private platform: Platform,
private splashScreen: SplashScreen,
private statusBar: StatusBar,
private jpush: JPush ) {
this.initializeApp();
// 初始化极光服务
this.initJPush();
} initializeApp() { ... } initJPush() { // 初始化极光服务
this.jpush.setDebugMode(true);
this.jpush.init();
}
}

4. 这里需要留意,config.xml中的包名要与极光中创建应用的包名一致

简单使用介绍

极光推送消息的时候可以设置所有用户接收 ( 广播类型 ),也可以根据设备类型来决定接收消息的用户 ( 例如只有安卓或者IOS用户才能接收 )

除开设备类型之外极光还可以为客户设置标识,通过标识过滤来达到部分消息推送的目的,通过极光可以给客户设置 TAG 标签以及Alias 别名两种类型的标识,他们具体体现为 :

类型 名称 数量限制 设备限制
TAG 标签 每个设备允许设置多个标签 可以多个设备使用同一个标签
Alias 别名 每个设备仅允许设置一个别名 最多十个设备使用同一个别名

通过之前安装的两个依赖可以实现操作设备的 TAG 标签和 Alias 别名,例如:

import { JPush } from '@jiguang-ionic/jpush/ngx';

export class HomePage {

    private sequence: number = 1;

    constructor(private jpush: JPush) {}

    // 调用函数添加设备标签
clickBtn() {
// sequence:目前用不上这个属性,给一个自增变量就够了
// tags: 标签名称,这里需要注意用[]将它封装为数组才能用
let data = { sequence: this.sequence++, tags: ["VIP2"] };
this.jpush.addTags(data).then(res=>{
console.log("成功添加TAG", res);
}).catch(err=>{
console.error("添加TAG失败!", err);
});
} }

然后在极光网站就可以通过TAG标签来指定接收消息的用户了:

封装极光操作服务

关于极光的操作比较多,例如添加标签,获取标签,删除标签以及关于别名的操作,这里为了简化开发就封装了极光的 JPush 工具类服务,封装了常用的一些方法,随时补充

因为极光推送的初始化时间较长,且在初始化期间设置标签别名时会失败,我找了很久没有找到关于初始化成功之后操作的事件,所以这里定义了一个重试次数的参数retryCount,在初始化时设置失败会自动重试,一般在重试第二次的时候极光就会初始化完成

import { Injectable } from '@angular/core';
import { JPush } from '@jiguang-ionic/jpush/ngx'; @Injectable({
providedIn: 'root'
})
export class JPushService { private sequence: number = 1; // 一个标识,具体效果未知
private retryCount: number = 3; // 重试次数 constructor( private jpush: JPush ) { } // 获取当前所有Tag标签
getTags(retry: number = 1){
this.jpush.getAllTags(this.getTagOptions()).then(res=>{
console.log("获取TAG列表:", res.tags);
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`获取TAG列表失败,重试中(${retry}/${this.retryCount})...`);
this.getTags(retry+1);
} else console.error("获取TAG列表失败!");
});
}
// 添加Tag标签
addTag(tag: string, retry: number = 1){
this.jpush.addTags(this.getTagOptions([tag])).then(res=>{
console.log("成功添加TAG:", tag);
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`添加TAG失败,重试中(${retry}/${this.retryCount})...`);
this.addTag(tag, retry+1);
} else console.error("添加TAG失败!");
});
}
// 重新修改Tag标签列表
setTags(tags: string[], retry: number = 1){
this.jpush.setTags(this.getTagOptions(tags)).then(res=>{
console.log("成功修改TAG:", res);
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`修改TAG失败,重试中(${retry}/${this.retryCount})...`);
this.setTags(tags, retry+1);
} else console.error("修改TAG失败!");
})
}
// 删除某个Tag标签
deleteTag(tag: string, retry: number = 1){
this.jpush.deleteTags(this.getTagOptions([tag])).then(res=>{
console.log("成功删除TAG:", tag);
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`删除TAG失败,重试中(${retry}/${this.retryCount})...`);
this.deleteTag(tag, retry+1);
} else console.error("删除TAG失败!");
});
}
// 清空所有Tag标签
clearTags(retry: number = 1){
this.jpush.cleanTags(this.getTagOptions()).then(()=>{
console.log("Tag清空成功!");
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`Tab清空失败,重试中(${retry}/${this.retryCount})...`);
this.clearTags(retry+1);
} else console.error("Tab清空失败!");
});
} // 获取设备别名
getAlias(retry: number = 1){
this.jpush.getAlias({ sequence: this.sequence++ }).then(res=>{
console.log("获取设备别名:", res.alias);
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`获取别名失败,重试中(${retry}/${this.retryCount})...`);
this.getAlias(retry+1);
} else console.error("获取别名失败!");
});
}
// 修改设备别名
setAlias(alias, retry: number = 1){
this.jpush.setAlias({sequence: this.sequence++, alias }).then(res=>{
console.log("设置设备别名成功:", alias);
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`设置设备别名失败,重试中(${retry}/${this.retryCount})...`);
this.setAlias(alias, retry+1);
} else console.error("设置设备别名失败!");
});
}
// 删除设备别名
deleteAlias(retry: number = 1){
return this.jpush.deleteAlias(this.getAliasOptions()).then(()=>{
console.log("别名删除成功!");
}).catch(err=>{
if(retry <= this.retryCount) {
console.log(`别名删除失败,重试中(${retry}/${this.retryCount})...`);
this.deleteAlias(retry+1);
} else console.error("别名删除失败!");
})
} /* ------------------------------------------------------------- */ // 获取TagOption实例
getTagOptions(tags: string[] = null): {sequence: number, tags: string[]} {
return { sequence: this.sequence++, tags };
}
// 获取AliasOptons实例
getAliasOptions(alias: string = null): {sequence: number, alias: string} {
return { sequence: this.sequence++, alias };
} }

服务类完成之后我们在执行刚才的添加 TAG 标签操作就简单很多了:

clickBtn() {
this.jpush.addTag("VIP2");
}

Ionic5整合极光推送JPush ( 简单 )的更多相关文章

  1. Java整合极光推送 ( 简单 )

    Java 整合极光推送官方文档:https://github.com/jpush/jpush-api-java-client 这里记录一下简单的使用步骤:创建一个普通的 Maven 工程然后添加依赖 ...

  2. 关于极光推送Jpush的demo

    关于极光推送Jpush 推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下.由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛 ...

  3. 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco

    Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...

  4. 李洪强iOS开发之极光推送JPush

    李洪强iOS开发之极光推送JPush

  5. 极光推送JPush的快速集成

    首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...

  6. ThinkPHP框架整合极光推送DEMO

    极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供专业.高效的移动消息推送服务. 本篇博文讲述如何在将极光推送DEMO整合到ThinkPHP框架中,我使用的是极光推送PHP ...

  7. 极光推送(JPush)开篇

    Date:2019-11-11 读前思考: 极光推送是什么? 极光推送是能做什么?有什么优势? 怎么根据业务需求来实现极光推送服务呢? 简介 极光推送(JPush)是独立的第三方云推送平台,致力于为全 ...

  8. 极光推送Jpush(v3)服务端PHP版本的api脚本类

    原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...

  9. 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)

    因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...

随机推荐

  1. Linux内核的TCP协议栈和内核旁路的选择?

    [前言]最近在实习公司用到了solarflare的万兆网卡,用到了网卡的openonload技术还有TCPDirect模式代码的编写,其理论基础都是内核旁路.网上关于内核旁路技术的介绍基本就两篇,我结 ...

  2. 剑指 Offer 56 - I. 数组中数字出现的次数 + 分组异或

    剑指 Offer 56 - I. 数组中数字出现的次数 Offer_56_1 题目描述 解题思路 java代码 /** * 方法一:数位方法 */ class Offer_56_1_2 { publi ...

  3. PAT-1140(Look-and-say Sequence)字符串处理

    Look-and-say Sequence PAT-1140 #include<iostream> #include<cstring> #include<string&g ...

  4. Bullet碰撞检测

    DBVT 在bullet 引擎中是很基础且重要的一个数据结构,本质上是一个可以动态更新的AABB树. 碰撞响应的分析 约束分类:可积约束,不可积约束 ,摩擦力(见[1]第四章) 整个bullet在动力 ...

  5. 【python+selenium的web自动化】- 8种元素定位方式详解

    ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. ​ 说明:以下操作统 ...

  6. 再探命令行传参之c与python

    继上一次java命令行传参 python sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:python解释 ...

  7. C指针与二维数组

    先贴上完整的代码: #include<stdio.h> int main(int argc, char *argv[]){ int a[3] [5]={1,2,3,4,5,6,7,8,9, ...

  8. Excel老式技术

    Excel老式技术 VBS宏脚本嵌入明文代码

  9. python多线程参考文章

    1. https://www.jianshu.com/p/c93e630d8089 2.https://www.runoob.com/python/python-multithreading.html ...

  10. Java并发编程之队列

    Deque(双端队列) 子接口BlockingDeque,实现类如下: ArrayDeque:大下可变的数组双端队列,不允许插入null LinkedList:大小可变的链表双端队列,允许插入null ...