# cordova-plugin-umengpush

[![NPM version][npm-image]][npm-url]
[![Downloads][downloads-image]][npm-url]
[![TotalDownloads][total-downloads-image]][npm-url]

[npm-image]:http://img.shields.io/npm/v/cordova-plugin-umengpush.svg
[npm-url]:https://npmjs.org/package/cordova-plugin-umengpush
[downloads-image]:http://img.shields.io/npm/dm/cordova-plugin-umengpush.svg?label=当月下载
[total-downloads-image]:http://img.shields.io/npm/dt/cordova-plugin-umengpush.svg?label=总下载


友盟推送cordova插件，目前已支持iOS(包括iOS13)以及华为、小米、魅族、OPPO、VIVO厂家离线推送，支持Android9和AndroidQ。

### 提示
该插件上传到npmjs之后，ios的framework会丢失头文件，导致编译时提示缺少头文件，解决办法是用cordova安装插件命令安装完成后，再到github下载一次源码去替换plugins里的`cordova-plugin-umengpush`插件。  

Android平台如果提示缺少xxx.so文件，则需要手动下载全平台so文件到自己项目的libs文件夹中。
[全平台so文件下载地址](https://files.alicdn.com/tpsservice/7c94e1a0a2e35f6f27038c974ad9ffbf.zip)，引入方式[点击查看](https://luoyuanli.com/userfiles/2020/04/image-1586229818672.png)

#### 友盟SDK组件版本：
| 平台           |  组件                     | 版本                     |
|:------------- |:------------------------ |:----------------------- |
| `iOS`|  UMCommon.framework| v2.1.1 |
| `iOS`|  UMPush.framework| v3.2.4 |
| `Android`| com.umeng.umsdk:common| v2.2.2|
| `Android`| com.umeng.umsdk:push| v6.0.5|

6.0.5版本升级内容：  
解决DeviceToken在部分AndroidQ系统中出现不稳定的问题；
解决在OPPO Android9/10机型上离线消息发送问题；
升级厂商通道SDK版本，支持AndroidQ。


# 1. 安装
需要iOS以及小米、华为、魅族、OPPO、VIVO推送的相关的AK或SK，按下面的命令安装，命令有点长，可以先用其他字符占用，再到插件里手动修改这些需要的各个信息，特别需要注意的是华为的必须一开始安装时就要输入，或者安装完成后到plugin.xml中修改，不然只能打完包后到Manifests.xml文件中修改。不可以在java代码中修改，因为java文件中没有输入的地方，如果不按这个要求将无法获取华为设备推送标识。

```
cordova plugin add cordova-plugin-umengpush --variable IOS_APPKEY=YOUR_IOS_APPKEY --variable UM_APPKEY=YOUR_UM_APPKEY --variable UM_MESSAGE_SECRET=YOUR_UM_MESSAGE_SECRET --variable HUAWEI_APPID=YOUR_HUAWEI_APPID --variable XIAOMI_ID=YOUR_XIAOMI_ID --variable XIAOMI_KEY=YOUR_XIAOMI_KEY --variable MEIZU_APPID=YOUR_MEIZU_APPID --variable MEIZU_APPKEY=YOUR_MEIZU_APPKEY --variable OPPO_APPKEY=YOUR_OPPO_APPKEY --variable OPPO_SECRET=YOUR_OPPO_SECRET
```

安装后可到源码中修改相关AK与SK信息，位置如下：
### iOS平台
```
src/ios/UMengPush.m

默认从配置文件中获取AK，可以自己手动修改替换。

self.umengPushAppId = @"xxxxxxxxxxxx";

```

### Android平台
```
src/android/UMApplication.java

代码默认从配置文件中获取AK与SK信息，可自己手动修改替换。

```

# 2. 使用
## for cordova

### 初始化
根据友盟推送的发送限制政策([https://developer.umeng.com/docs/66632/detail/68343](https://developer.umeng.com/docs/66632/detail/68343))，单播是不限制的，实现单播需要根据设备的推送token来进行推送，在插件初始化时，插件已经获取了token，可以按以下方式得到：

```
UMengPush.init(function(token){
	//得到推送token，便于直接通过token发推送信息
	console.log(token);
},function(error){
	// error
})

```

### 设置alias

```
UMengPush.setAlias("alias","ALIAS_TYPE", function (res) {
      alert(JSON.stringify(res));
    }, function (err) {
      alert(JSON.stringify(err));
    })
```

### 监听用户点击通知
点击通知就会触发该方法。
```
UMengPush.onSubscriptNotification(function(data){
  //点击通知就会触发这里的代码
  alert(JSON.stringify(data));
});

```
点击通知获得的data的基本结构：

| 字段           |  说明                     |
|:------------- |:---------------------------- |
| `id`  | 该条通知的ID |
| `state`  | 该通知是前台还是后台还是启动，值有三种，foreground,background,launch，launch是只有iOS才有，iOS退出应用后，来通知时点击通知启动APP，进入APP后获取参数时state是launch，foreground就是用户正在使用过程中来了通知。 |

## for ionic3+

### 安装该插件的ionic支持

```
npm i upush
```

### 引入module.ts

```
import { Upush } from 'upush';

providers: [
  ...
  Upush,
  ...
]

```
### 初始化
根据友盟推送的发送限制政策([https://developer.umeng.com/docs/66632/detail/68343](https://developer.umeng.com/docs/66632/detail/68343))，单播是不限制的，实现单播需要根据设备的推送token来进行推送，在插件初始化时，插件已经获取了token，可以按以下方式得到：

```
upush.init().then(token => {
	//得到token
	//可根据业务将token与用户标识存储到数据库中
	console.log(token);
})

```

### 监听用户点击通知
```
upush.onSubscriptNotification().subscribe((data: any) => {
  alert(JSON.stringify(data));
});
```
点击通知获得的data的基本结构：

| 字段           |  说明                     |
|:------------- |:---------------------------- |
| `id`  | 该条通知的ID |
| `state`  | 该通知是前台还是后台还是启动，值有三种，foreground,background,launch，launch是只有iOS才有，iOS退出应用后，来通知时点击通知启动APP，进入APP后获取参数时state是launch，foreground就是用户正在使用过程中来了通知。 |

### 设置Alias

```
constructor(
  ...
  public upush: Upush,
  ...
  ){

  }

  login(){
    ...
    this.upush.setAlias(user.loginName,"ALIAS_TYPE").then(res=>{
                console.log("res==",res);
              }).catch(error=>{
                console.log("error==",error);
              })
  }

```

# 3.补充说明

### 插件相关接口
```
//监听通知的点击事件
var onSubscriptNotification = function (success, error) {};

//获取推送相关的设备token
var init = function (success, error) {};

var setAlias = function (alias, alias_type, success, error) {};

var addAlias = function (alias, alias_type, success, error) {};

var deleteAlias = function (alias, alias_type, success, error) {};

var addTags = function (tag, success, error) {};

var deleteTags = function (tag, success, error) {};

```

## 常见问题
#### 1.Manifest合并失败。  
可能与阿里巴巴相关的插件冲突，解决办法是把这个插件的`UTDID`库去掉，iOS去掉方法是把`plugin.xml`里的以下注释掉，   
```
<framework src="src/ios/librarys/UTDID.framework" custom="true"/>
```

Android则需要到插件的`src/android/plugin.gradle`里把以下代码注释掉，   
```
api 'com.umeng.umsdk:utdid:1.1.5.3'
```

#### 2.小米手机收到推送点击通知不能打开APP
可能是推送的时候没设置要启动的路径，官方给的HTTP API是没有设置的，需要自己加，或者可以联系我获取。


其他问题可到issues提问，提问时请尽量详细描述。

## 大版本更新日志
### v2.5.0
修复了大家之前提的多个bug问题，友盟插件升级到了6.0.5

### v2.2.0
添加了oppo和vivo厂家离线推送。

### v2.1.0
添加了推送参数的获取，通知参数（包含自定义参数）在用户点击通知进入APP后能通过定义好的监听获取。iOS支持冷启动获取参数，不过Android不支持获取离线推送的参数。

### v1.0.1
开始集成，支持iOS、华为、小米、魅族离线推送。

## 个人小推荐
除了写代码，我平时还会进行一些电子音乐创作，创作完成后我会发布在网易云音乐，有Progressive House，Melodic Dubstep，Chillstep等风格，感兴趣的可以到网易云关注一下我啊~谢谢。音乐人：[Alamofire](https://music.163.com/#/artist?id=33349905)
