Compare commits

...

75 Commits

Author SHA1 Message Date
JoshLipan
fa4f3ac0d7 Merge pull request #397 from jpush/dev
Dev
2019-02-28 16:28:58 +08:00
JoshLi
3ad9a415e9 Release v3.6.3 2019-02-28 16:27:47 +08:00
JoshLi
d76d01c856 Set exported false for custom Receiver 2019-02-28 16:27:21 +08:00
HuminiOS
b7d4ba5111 Merge pull request #396 from jpush/dev
update readme
2019-02-25 10:13:55 +08:00
huangminlinux
7c326599aa update readme 2019-02-25 10:09:10 +08:00
HuminiOS
2adbba2943 Merge pull request #395 from jpush/dev
update readme
2019-02-24 22:26:35 +08:00
huangminlinux
5b22d798cb update readme 2019-02-24 22:25:01 +08:00
HuminiOS
eb624a7bb2 Merge pull request #394 from jpush/dev
Dev
2019-02-24 00:03:44 +08:00
huangminlinux
e29f00f77f delete file 2019-02-24 00:00:18 +08:00
huangminlinux
1ecb2b273a the adaption to ionic4 project and udpate ionic plugin to 2.0.0 version 2019-02-23 23:58:23 +08:00
huangminlinux
6767af7488 udpate jpush plugin to 3.6.2 2019-01-11 14:34:09 +08:00
huangminlinux
03eab0c59e update iOS SDK to 3.1.2 2019-01-11 14:31:56 +08:00
JoshLipan
23ae6ad342 Merge pull request #390 from jpush/dev
Dev
2018-12-28 17:32:40 +08:00
JoshLi
ccfffc9a69 Release v3.6.1 2018-12-28 17:28:12 +08:00
JoshLi
16c3c96844 Add API setGeofenceInterval for Android 2018-12-28 17:27:31 +08:00
JoshLipan
b2e818e88d Merge pull request #387 from jpush/dev
Dev
2018-12-20 16:27:34 +08:00
JoshLi
5a8a926c50 Update DOC 2018-12-20 16:24:22 +08:00
JoshLi
0903b58270 Update DOC 2018-12-20 16:17:42 +08:00
JoshLi
f0dc403ca8 Add CHANNEL variable setup 2018-12-18 21:07:18 +08:00
JoshLi
5c53749171 Update Android SDK to v3.1.8 2018-12-18 21:06:29 +08:00
JoshLi
68bb0ebfdf Release v3.5.1 2018-11-16 14:31:47 +08:00
HuminiOS
30fc85fc8d Merge pull request #381 from jpush/dev
update readme add xcode10 fq
2018-11-14 14:35:16 +08:00
huangminlinux
fa0ca5f335 update readme add xcode10 fq 2018-11-14 14:33:13 +08:00
JoshLipan
8de93a3a07 Merge pull request #380 from jpush/dev
Dev
2018-11-13 16:48:32 +08:00
JoshLi
a4c17d3882 Update doc 2018-11-13 16:46:40 +08:00
JoshLi
1d420b5bb6 Release v3.5.0 2018-11-13 16:31:42 +08:00
JoshLi
d69f50915c Release v3.5.0 2018-11-13 16:27:09 +08:00
JoshLi
e26d8448a0 Update Android SDK to v3.1.7 2018-11-13 16:26:38 +08:00
HuminiOS
387eaa1aff Merge pull request #376 from jpush/dev
update to ios sdk to 3.1.1
2018-10-26 10:41:16 +08:00
huangminlinux
45785a569c update to ios sdk to 3.1.1 2018-10-26 10:37:51 +08:00
HuminiOS
0c8a6d25a6 Merge pull request #374 from jpush/dev
Dev
2018-10-23 18:17:22 +08:00
huangminlinux
529f08df88 update to 3.4.6 2018-10-23 18:16:24 +08:00
huangminlinux
e60d7c2b8c ios send local notification can accept 0 as params 2018-10-23 18:15:47 +08:00
huangminlinux
265d88e766 update docs 2018-10-23 18:15:47 +08:00
JoshLipan
894c7d7ac1 Merge pull request #373 from jpush/dev
Dev
2018-10-18 14:33:58 +08:00
JoshLi
aabc1453b8 Release v3.4.5 2018-10-18 14:30:48 +08:00
JoshLi
6f78522cca Update getConnectionState API 2018-10-18 14:26:00 +08:00
JoshLi
ff735854ec Update doc 2018-10-18 14:25:40 +08:00
JoshLi
e63f9d1774 Release v3.4.4 2018-10-18 14:12:52 +08:00
JoshLi
f9a5cef603 Merge branch 'dev' of https://github.com/jpush/jpush-phonegap-plugin into dev 2018-10-18 14:07:25 +08:00
JoshLi
ef8b1a7b4c Update Android SDK to v3.1.6 2018-10-18 13:56:48 +08:00
huangminlinux
82d68c3562 Merge pull request #364 from jpush/dev
Dev
2018-07-31 17:13:54 +08:00
huangminlinux
bdaeb5dbec update ios jpush sdk to 3.1.0 2018-07-31 17:12:05 +08:00
JoshLi
0677094086 Update Android SDK to v3.1.5 2018-07-31 17:08:44 +08:00
JoshLi
1d0d972737 Merge branch 'dev' 2018-07-23 11:21:16 +08:00
JoshLi
3186de6111 Merge branch 'dev' of https://github.com/jpush/jpush-phonegap-plugin into dev 2018-07-23 11:20:36 +08:00
JoshLi
9cb75a85db Update DOC 2018-07-23 11:19:50 +08:00
huangminlinux
c022a06461 add UIBackgroundModes in plugin.xml 2018-06-04 17:02:38 +08:00
huangminlinux
cc7328ad77 add update plugin.xml add aps-environment in entitlement plist 2018-06-04 16:57:42 +08:00
huangminlinux
b5d3661240 Merge pull request #340 from jpush/dev
updage demo
2018-04-19 13:20:16 +08:00
huangminlinux
1ae98e13e6 updage demo 2018-04-19 13:19:38 +08:00
huangminlinux
27cdf61ff3 Merge pull request #336 from jpush/dev
adjust link
2018-04-16 15:34:02 +08:00
huangminlinux
1fb87d8fba adjust link 2018-04-16 15:30:41 +08:00
huangminlinux
a0e408f05f Merge pull request #335 from jpush/dev
Dev
2018-04-16 15:15:14 +08:00
huangminlinux
2d71db888f update js comment link 2018-04-16 15:14:13 +08:00
huangminlinux
1bfd8a2836 appdelegate+jpush.m 2018-04-12 10:26:36 +08:00
Hevin
6c80b47bad Merge branch 'dev' 2018-03-06 13:45:59 +08:00
Hevin
179220874e Update README 2018-03-06 13:45:46 +08:00
Hevin
5e85c6b5b0 Merge branch 'dev' 2018-03-01 17:05:08 +08:00
Hevin
c526a26231 Update comment about cordova android 7.0.0 2018-03-01 17:03:09 +08:00
Hevin
0380fbdc60 Merge branch 'dev' 2018-03-01 16:56:45 +08:00
Hevin
9c888aa964 Update comments about cordova-android 7.0.0 2018-03-01 16:56:33 +08:00
Hevin
14f03abce6 Merge branch 'dev' 2018-03-01 16:54:49 +08:00
Hevin
4b554fa2ca Add comments about cordova-android 7.0.0 2018-03-01 16:54:22 +08:00
Hevin
4085787f95 build: v3.4.1 2018-03-01 14:19:11 +08:00
Hevin
1eaf73a8d3 Merge branch 'dev' 2018-02-26 15:42:43 +08:00
Hevin
6c2bc206e3 Format the style 2018-02-26 15:42:29 +08:00
Hevin
10b457d489 Add comments of cordova-android 7.0.0 2018-02-26 15:29:36 +08:00
Hevin
5b0613628b Merge cordova_android_7.0.0 to dev 2018-02-26 14:59:36 +08:00
Hevin
6f77da5f41 build: v3.4.0
Support cordova-android 7.0.0
2018-02-26 14:50:53 +08:00
huangminlinux
24328f2ac9 update to 3.3.3 2018-02-06 15:38:47 +08:00
huangminlinux
8ccdbd525b fix app not launch open notification will fire twice bug 2018-02-06 14:32:12 +08:00
huangminlinux
67421b5091 fix application in activity notification will not alert in ios10 2018-02-01 10:11:03 +08:00
huangminlinux
83b7ca162a update to 3.3.1 2018-01-31 16:19:17 +08:00
huangminlinux
7f2179fe32 fix backgroup notification event fire twice 2018-01-31 16:12:31 +08:00
31 changed files with 1187 additions and 875 deletions

View File

@@ -1,7 +1,7 @@
# JPush PhoneGap / Cordova Plugin
[![Build Status](https://travis-ci.org/jpush/jpush-phonegap-plugin.svg?branch=master)](https://travis-ci.org/jpush/jpush-phonegap-plugin)
[![release](https://img.shields.io/badge/release-3.3.0-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![release](https://img.shields.io/badge/release-3.4.1-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![platforms](https://img.shields.io/badge/platforms-iOS%7CAndroid-lightgrey.svg)](https://github.com/jpush/jpush-phonegap-plugin)
[![weibo](https://img.shields.io/badge/weibo-JPush-blue.svg)](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)
@@ -11,12 +11,16 @@
- 如需要短信验证码功能插件,可关注 [cordova-plugin-jsms](https://github.com/jpush/cordova-plugin-jsms)
- 如需要统计分析功能插件,可关注 [cordova-plugin-janalytics](https://github.com/jpush/cordova-plugin-janalytics)
注意:目前插件暂未支持 cordova-android 7.0.0,因此在添加 android platform 时,请指定 7.0.0 以下版本,例如 6.4.0
>注意:插件从 v3.4.0 开始支持 cordova-android 7.0.0,因 cordova-android 7.0.0 修改了 Android 项目结构,因此不兼容之前的版本,升级前请务必注意
>
>如果需要在cordova-android 7.0.0之前版本集成最新插件,参照[这篇文章](https://www.jianshu.com/p/23b117ca27a6)
>
>如果需要安装之前版本的插件,请先安装 v1.2.0 以下版本(建议安装 v1.1.12)的 [cordova-plugin-jcore](https://github.com/jpush/cordova-plugin-jcore),再安装旧版本插件(比如 v3.3.2),否则运行会报错。
>
>[Cordova Android版本与原生版本对应表](http://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#requirements-and-support)
## Install
> 注意:
>
> - 应用的包名一定要和 APP_KEY 对应应用的包名一致,否则极光推送服务无法注册成功。
> - 在使用 8 或以上版本的 Xcode 调试 iOS 项目时,需要先在项目配置界面的 Capabilities 中打开 Push Notifications 开关。
@@ -37,6 +41,27 @@
```shell
cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey
```
### 参数
- APP_KEY: 必须设置JPush 上注册的包名对应的 Appkey
```shell
--variable APP_KEY=your_jpush_appkey
```
- CHANNEL: 可以不设置v3.6.0+ 版本开始支持(Android Only),方便开发者统计 APK 分发渠道,默认为 developer-default.
```shell
--variable CHANNEL=your_channel
```
- 同时动态配置 APP_KEY 和 CHANNEL 示例
```shell
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey --variable CHANNEL=your_channel
```
### Ionic
@@ -44,12 +69,18 @@
```shell
npm install --save @jiguang-ionic/jpush
# npm install --save @jiguang-ionic/jpush@2.0.0 for ionic4+
```
然后在 *app.module.ts* 中增加:
```js
// @jiguang-ionic/jpush@1.0.0+
import { JPush } from '@jiguang-ionic/jpush';
// @jiguang-ionic/jpush@2.0.0+
import { JPush } from '@jiguang-ionic/jpush/ngx';
...
providers: [
...
@@ -119,6 +150,10 @@ Android 的推送通过长连接的方式实现,只有在保持连接的情况
### iOS
#### XCode 10 收不到推送怎么办?
打开 xcode -> file -> WorkSpace Settings… -> Build System 改成 Legacy Build System 然后卸载 App 重新运行。
#### 打包时遇到 i386 打包失败怎么办?
```shell

View File

@@ -6,6 +6,8 @@
- [通知栏样式定制](#通知栏样式定制)
- [设置保留最近通知条数](#设置保留最近通知条数)
- [本地通知](#本地通知)
- [获取推送连接状态](#获取推送连接状态)
- [地理围栏](#地理围栏)
## 获取集成日志(同时适用于 iOS
@@ -185,4 +187,62 @@ window.JPush.clearLocalNotifications() // 同时适用于 iOS
- title: 设置本地通知的 title。
- notificationID: 设置本地通知的 ID不要为 0
- broadcastTime: 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒。
- extras: 设置额外的数据信息 extras 为 json 字符串。
- extras: 设置额外的数据信息 extras 为 json 字符串。
## 获取推送连接状态
### API - getConnectionState
开发者可以使用此功能获取当前 Push 服务的连接状态
#### 接口定义
```js
window.JPush.getConnectionState(callback)
```
#### 参数说明
- callback: 回调函数,用来通知 JPush 的推送服务是否开启。
#### 代码示例
```js
window.JPush.getConnectionState(function (result) {
if (result == 0) {
// 链接状态
} else {
// 断开状态
}
})
```
## 地理围栏
### API - setGeofenceInterval
设置地理围栏监控周期最小3分钟最大1天。默认为15分钟当距离地理围栏边界小于1000米周期自动调整为3分钟。设置成功后一直使用设置周期不会进行调整。
#### 接口定义
```js
window.JPush.setGeofenceInterval(interval)
```
#### 参数说明
- interval: 监控周期,单位是毫秒。
### API - setMaxGeofenceNumber
设置最多允许保存的地理围栏数量超过最大限制后如果继续创建先删除最早创建的地理围栏。默认数量为10个允许设置最小1个最大100个。
#### 接口定义
```js
window.JPush.setMaxGeofenceNumber(maxNumber)
```
#### 参数说明
- maxNumber: 最多允许保存的地理围栏个数

View File

@@ -47,14 +47,6 @@ window.JPush.startJPushSDK()
调用此 API用来开启 JPush SDK 提供的推送服务。
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
#### 接口定义
```js
@@ -63,6 +55,14 @@ window.JPush.init()
### API - stopPush
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
- 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。
- 推荐:设置一个 UI 界面,提醒用户在 设置-通知 中关闭推送服务。

View File

@@ -1,14 +1,13 @@
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { JPush } from '@jiguang-ionic/jpush';
import { Device } from '@ionic-native/device';
import { Component } from "@angular/core";
import { NavController } from "ionic-angular";
import { JPush } from "@jiguang-ionic/jpush";
import { Device } from "@ionic-native/device";
@Component({
selector: 'page-home',
templateUrl: 'home.html'
selector: "page-home",
templateUrl: "home.html"
})
export class HomePage {
public registrationId: string;
devicePlatform: string;
@@ -17,130 +16,161 @@ export class HomePage {
tagResultHandler = function(result) {
var sequence: number = result.sequence;
var tags: Array<string> = result.tags == null ? [] : result.tags;
alert('Success!' + '\nSequence: ' + sequence + '\nTags: ' + tags.toString());
alert(
"Success!" + "\nSequence: " + sequence + "\nTags: " + tags.toString()
);
};
aliasResultHandler = function(result) {
var sequence: number = result.sequence;
var alias: string = result.alias;
alert('Success!' + '\nSequence: ' + sequence + '\nAlias: ' + alias);
alert("Success!" + "\nSequence: " + sequence + "\nAlias: " + alias);
};
errorHandler = function(err) {
var sequence: number = err.sequence;
var code = err.code;
alert('Error!' + '\nSequence: ' + sequence + '\nCode: ' + code);
alert("Error!" + "\nSequence: " + sequence + "\nCode: " + code);
};
constructor(public navCtrl: NavController, public jpush: JPush, device: Device) {
constructor(
public navCtrl: NavController,
public jpush: JPush,
device: Device
) {
this.devicePlatform = device.platform;
document.addEventListener('jpush.receiveNotification', (event: any) => {
var content;
if (this.devicePlatform == 'Android') {
content = event.alert;
} else {
content = event.aps.alert;
}
alert('Receive notification: ' + JSON.stringify(event));
}, false);
document.addEventListener('jpush.openNotification', (event: any) => {
var content;
if (this.devicePlatform == 'Android') {
content = event.alert;
} else { // iOS
if (event.aps == undefined) { // 本地通知
content = event.content;
} else { // APNS
document.addEventListener(
"jpush.receiveNotification",
(event: any) => {
var content;
if (this.devicePlatform == "Android") {
content = event.alert;
} else {
content = event.aps.alert;
}
}
alert('open notification: ' + JSON.stringify(event));
}, false);
alert("Receive notification: " + JSON.stringify(event));
},
false
);
document.addEventListener('jpush.receiveLocalNotification', (event: any) => {
// iOS(*,9) Only , iOS(10,*) 将在 jpush.openNotification 和 jpush.receiveNotification 中触发。
var content;
if (this.devicePlatform == 'Android') {
} else {
content = event.content;
}
alert('receive local notification: ' + JSON.stringify(event));
}, false);
document.addEventListener(
"jpush.openNotification",
(event: any) => {
var content;
if (this.devicePlatform == "Android") {
content = event.alert;
} else {
// iOS
if (event.aps == undefined) {
// 本地通知
content = event.content;
} else {
// APNS
content = event.aps.alert;
}
}
alert("open notification: " + JSON.stringify(event));
},
false
);
document.addEventListener(
"jpush.receiveLocalNotification",
(event: any) => {
// iOS(*,9) Only , iOS(10,*) 将在 jpush.openNotification 和 jpush.receiveNotification 中触发。
var content;
if (this.devicePlatform == "Android") {
} else {
content = event.content;
}
alert("receive local notification: " + JSON.stringify(event));
},
false
);
}
getRegistrationID() {
this.jpush.getRegistrationID()
.then(rId => {
this.registrationId = rId;
});
this.jpush.getRegistrationID().then(rId => {
this.registrationId = rId;
});
}
setTags() {
this.jpush.setTags({ sequence: this.sequence++, tags: ['Tag1', 'Tag2']})
this.jpush
.setTags({ sequence: this.sequence++, tags: ["Tag1", "Tag2"] })
.then(this.tagResultHandler)
.catch(this.errorHandler);
}
addTags() {
this.jpush.addTags({ sequence: this.sequence++, tags: ['Tag3', 'Tag4']})
this.jpush
.addTags({ sequence: this.sequence++, tags: ["Tag3", "Tag4"] })
.then(this.tagResultHandler)
.catch(this.errorHandler);
}
checkTagBindState() {
this.jpush.checkTagBindState({ sequence: this.sequence++, tag: 'Tag1' })
this.jpush
.checkTagBindState({ sequence: this.sequence++, tag: "Tag1" })
.then(result => {
var sequence = result.sequence;
var tag = result.tag;
var isBind = result.isBind;
alert('Sequence: ' + sequence + '\nTag: ' + tag + '\nIsBind: ' + isBind);
}).catch(this.errorHandler);
alert(
"Sequence: " + sequence + "\nTag: " + tag + "\nIsBind: " + isBind
);
})
.catch(this.errorHandler);
}
deleteTags() {
this.jpush.deleteTags({ sequence: this.sequence++, tags: ['Tag4']})
this.jpush
.deleteTags({ sequence: this.sequence++, tags: ["Tag4"] })
.then(this.tagResultHandler)
.catch(this.errorHandler);
}
getAllTags() {
this.jpush.getAllTags({ sequence: this.sequence++ })
this.jpush
.getAllTags({ sequence: this.sequence++ })
.then(this.tagResultHandler)
.catch(this.errorHandler);
}
cleanTags() {
this.jpush.cleanTags({ sequence: this.sequence++ })
this.jpush
.cleanTags({ sequence: this.sequence++ })
.then(this.tagResultHandler)
.catch(this.errorHandler);
}
setAlias() {
this.jpush.setAlias({ sequence: this.sequence++, alias: 'TestAlias' })
this.jpush
.setAlias({ sequence: this.sequence++, alias: "TestAlias" })
.then(this.aliasResultHandler)
.catch(this.errorHandler);
}
getAlias() {
this.jpush.getAlias({ sequence: this.sequence++ })
this.jpush
.getAlias({ sequence: this.sequence++ })
.then(this.aliasResultHandler)
.catch(this.errorHandler);
}
deleteAlias() {
this.jpush.deleteAlias({ sequence: this.sequence++ })
this.jpush
.deleteAlias({ sequence: this.sequence++ })
.then(this.aliasResultHandler)
.catch(this.errorHandler);
}
addLocalNotification() {
if (this.devicePlatform == 'Android') {
this.jpush.addLocalNotification(0, 'Hello JPush', 'JPush', 1, 5000);
if (this.devicePlatform == "Android") {
this.jpush.addLocalNotification(0, "Hello JPush", "JPush", 1, 5000);
} else {
this.jpush.addLocalNotificationForIOS(5, 'Hello JPush', 1, 'localNoti1');
this.jpush.addLocalNotificationForIOS(5, "Hello JPush", 1, "localNoti1");
}
}
}

View File

@@ -23,11 +23,17 @@ export interface AliasOptions {
@Injectable()
export class JPush extends IonicNativePlugin {
@Cordova()
init(): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS', 'Android']
})
init(): void { }
@Cordova()
setDebugMode(enable: boolean): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS', 'Android']
})
setDebugMode(enable: boolean): void { }
@Cordova()
getRegistrationID(): Promise<any> { return; }
@@ -91,41 +97,74 @@ export class JPush extends IonicNativePlugin {
// iOS API - start
@Cordova()
setBadge(badge: number): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
setBadge(badge: number): void { }
@Cordova()
resetBadge(): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
resetBadge(): void { }
@Cordova()
setApplicationIconBadgeNumber(badge: number): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
setApplicationIconBadgeNumber(badge: number): void { }
@Cordova()
getApplicationIconBadgeNumber(): Promise<any> { return; }
@Cordova()
addLocalNotificationForIOS(delayTime: number, content: string, badge: number, identifierKey: string, extras?: object): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
addLocalNotificationForIOS(delayTime: number, content: string, badge: number, identifierKey: string, extras?: object): void { }
@Cordova()
deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey: string): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey: string): void { }
@Cordova()
addDismissActions(actions: Array<object>, categoryId: string): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
addDismissActions(actions: Array<object>, categoryId: string): void { }
@Cordova()
addNotificationActions(actions: Array<object>, categoryId: string): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
addNotificationActions(actions: Array<object>, categoryId: string): void { }
@Cordova()
setLocation(latitude: number, longitude: number): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
setLocation(latitude: number, longitude: number): void { }
@Cordova()
startLogPageView(pageName: string): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
startLogPageView(pageName: string): void { return; }
@Cordova()
stopLogPageView(pageName: string): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
stopLogPageView(pageName: string): void { return; }
@Cordova()
beginLogPageView(pageName: string, duration: number): Promise<any> { return; }
@Cordova({
sync: true,
platforms: ['iOS']
})
beginLogPageView(pageName: string, duration: number): void { return; }
// iOS API - end

View File

@@ -7,9 +7,37 @@ export interface AliasOptions {
sequence: number;
alias?: string;
}
export declare class JPush extends IonicNativePlugin {
init(): Promise<any>;
setDebugMode(enable: boolean): Promise<any>;
/**
* @name jpush
* @description
* This plugin does something
*
* @usage
* ```typescript
* import { jpush } from '@ionic-native/jpush';
*
*
* constructor(private jpush: jpush) { }
*
* ...
*
*
* this.jpush.functionName('Hello', 123)
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
export declare class JPushOriginal extends IonicNativePlugin {
/**
* This function does something
* @param arg1 {string} Some param to configure something
* @param arg2 {number} Another param to configure something
* @return {Promise<any>} Returns a promise that resolves when something happens
*/
functionName(arg1: string, arg2: number): Promise<any>;
init(): void;
setDebugMode(enable: boolean): void;
getRegistrationID(): Promise<any>;
stopPush(): Promise<any>;
resumePush(): Promise<any>;
@@ -40,18 +68,18 @@ export declare class JPush extends IonicNativePlugin {
*/
getUserNotificationSettings(): Promise<any>;
clearLocalNotifications(): Promise<any>;
setBadge(badge: number): Promise<any>;
resetBadge(): Promise<any>;
setApplicationIconBadgeNumber(badge: number): Promise<any>;
setBadge(badge: number): void;
resetBadge(): void;
setApplicationIconBadgeNumber(badge: number): void;
getApplicationIconBadgeNumber(): Promise<any>;
addLocalNotificationForIOS(delayTime: number, content: string, badge: number, identifierKey: string, extras?: object): Promise<any>;
deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey: string): Promise<any>;
addDismissActions(actions: Array<object>, categoryId: string): Promise<any>;
addNotificationActions(actions: Array<object>, categoryId: string): Promise<any>;
setLocation(latitude: number, longitude: number): Promise<any>;
startLogPageView(pageName: string): Promise<any>;
stopLogPageView(pageName: string): Promise<any>;
beginLogPageView(pageName: string, duration: number): Promise<any>;
addLocalNotificationForIOS(delayTime: number, content: string, badge: number, identifierKey: string, extras?: object): void;
deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey: string): void;
addDismissActions(actions: Array<object>, categoryId: string): void;
addNotificationActions(actions: Array<object>, categoryId: string): void;
setLocation(latitude: number, longitude: number): void;
startLogPageView(pageName: string): void;
stopLogPageView(pageName: string): void;
beginLogPageView(pageName: string, duration: number): void;
getConnectionState(): Promise<any>;
setBasicPushNotificationBuilder(): Promise<any>;
setCustomPushNotificationBuilder(): Promise<any>;
@@ -65,3 +93,5 @@ export declare class JPush extends IonicNativePlugin {
setSilenceTime(startHour: number, startMinute: number, endHour: number, endMinute: number): Promise<any>;
setPushTime(weekdays: Array<string>, startHour: number, endHour: number): Promise<any>;
}
export declare const JPush: JPushOriginal;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

95
ionic/jpush/ngx/index.d.ts vendored Normal file
View File

@@ -0,0 +1,95 @@
import { IonicNativePlugin } from '@ionic-native/core';
export interface TagOptions {
sequence: number;
tags?: Array<string>;
}
export interface AliasOptions {
sequence: number;
alias?: string;
}
/**
* @name jpush
* @description
* This plugin does something
*
* @usage
* ```typescript
* import { jpush } from '@ionic-native/jpush';
*
*
* constructor(private jpush: jpush) { }
*
* ...
*
*
* this.jpush.functionName('Hello', 123)
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
export declare class JPush extends IonicNativePlugin {
/**
* This function does something
* @param arg1 {string} Some param to configure something
* @param arg2 {number} Another param to configure something
* @return {Promise<any>} Returns a promise that resolves when something happens
*/
functionName(arg1: string, arg2: number): Promise<any>;
init(): void;
setDebugMode(enable: boolean): void;
getRegistrationID(): Promise<any>;
stopPush(): Promise<any>;
resumePush(): Promise<any>;
isPushStopped(): Promise<any>;
setTags(params: TagOptions): Promise<any>;
addTags(params: TagOptions): Promise<any>;
deleteTags(params: TagOptions): Promise<any>;
cleanTags(params: TagOptions): Promise<any>;
getAllTags(params: TagOptions): Promise<any>;
/**
* @param params { sequence: number, tag: string }
*/
checkTagBindState(params: object): Promise<any>;
setAlias(params: AliasOptions): Promise<any>;
deleteAlias(params: AliasOptions): Promise<any>;
getAlias(params: AliasOptions): Promise<any>;
/**
* Determinate whether the application notification has been opened.
*
* iOS: 0: closed; >1: opened.
* UIRemoteNotificationTypeNone = 0,
* UIRemoteNotificationTypeBadge = 1 << 0,
* UIRemoteNotificationTypeSound = 1 << 1,
* UIRemoteNotificationTypeAlert = 1 << 2,
* UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3
*
* Android: 0: closed; 1: opened.
*/
getUserNotificationSettings(): Promise<any>;
clearLocalNotifications(): Promise<any>;
setBadge(badge: number): void;
resetBadge(): void;
setApplicationIconBadgeNumber(badge: number): void;
getApplicationIconBadgeNumber(): Promise<any>;
addLocalNotificationForIOS(delayTime: number, content: string, badge: number, identifierKey: string, extras?: object): void;
deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey: string): void;
addDismissActions(actions: Array<object>, categoryId: string): void;
addNotificationActions(actions: Array<object>, categoryId: string): void;
setLocation(latitude: number, longitude: number): void;
startLogPageView(pageName: string): void;
stopLogPageView(pageName: string): void;
beginLogPageView(pageName: string, duration: number): void;
getConnectionState(): Promise<any>;
setBasicPushNotificationBuilder(): Promise<any>;
setCustomPushNotificationBuilder(): Promise<any>;
clearAllNotification(): Promise<any>;
clearNotificationById(id: number): Promise<any>;
setLatestNotificationNum(num: number): Promise<any>;
addLocalNotification(builderId: number, content: string, title: string, notificationId: number, broadcastTime: number, extras?: string): Promise<any>;
removeLocalNotification(notificationId: number): Promise<any>;
reportNotificationOpened(msgId: number): Promise<any>;
requestPermission(): Promise<any>;
setSilenceTime(startHour: number, startMinute: number, endHour: number, endMinute: number): Promise<any>;
setPushTime(weekdays: Array<string>, startHour: number, endHour: number): Promise<any>;
}

95
ionic/jpush/ngx/index.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
[{"__symbolic":"module","version":4,"metadata":{"TagOptions":{"__symbolic":"interface"},"AliasOptions":{"__symbolic":"interface"},"JPush":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@ionic-native/core","name":"IonicNativePlugin","line":67,"character":27},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":64,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"functionName":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"setDebugMode":[{"__symbolic":"method"}],"getRegistrationID":[{"__symbolic":"method"}],"stopPush":[{"__symbolic":"method"}],"resumePush":[{"__symbolic":"method"}],"isPushStopped":[{"__symbolic":"method"}],"setTags":[{"__symbolic":"method"}],"addTags":[{"__symbolic":"method"}],"deleteTags":[{"__symbolic":"method"}],"cleanTags":[{"__symbolic":"method"}],"getAllTags":[{"__symbolic":"method"}],"checkTagBindState":[{"__symbolic":"method"}],"setAlias":[{"__symbolic":"method"}],"deleteAlias":[{"__symbolic":"method"}],"getAlias":[{"__symbolic":"method"}],"getUserNotificationSettings":[{"__symbolic":"method"}],"clearLocalNotifications":[{"__symbolic":"method"}],"setBadge":[{"__symbolic":"method"}],"resetBadge":[{"__symbolic":"method"}],"setApplicationIconBadgeNumber":[{"__symbolic":"method"}],"getApplicationIconBadgeNumber":[{"__symbolic":"method"}],"addLocalNotificationForIOS":[{"__symbolic":"method"}],"deleteLocalNotificationWithIdentifierKeyInIOS":[{"__symbolic":"method"}],"addDismissActions":[{"__symbolic":"method"}],"addNotificationActions":[{"__symbolic":"method"}],"setLocation":[{"__symbolic":"method"}],"startLogPageView":[{"__symbolic":"method"}],"stopLogPageView":[{"__symbolic":"method"}],"beginLogPageView":[{"__symbolic":"method"}],"getConnectionState":[{"__symbolic":"method"}],"setBasicPushNotificationBuilder":[{"__symbolic":"method"}],"setCustomPushNotificationBuilder":[{"__symbolic":"method"}],"clearAllNotification":[{"__symbolic":"method"}],"clearNotificationById":[{"__symbolic":"method"}],"setLatestNotificationNum":[{"__symbolic":"method"}],"addLocalNotification":[{"__symbolic":"method"}],"removeLocalNotification":[{"__symbolic":"method"}],"reportNotificationOpened":[{"__symbolic":"method"}],"requestPermission":[{"__symbolic":"method"}],"setSilenceTime":[{"__symbolic":"method"}],"setPushTime":[{"__symbolic":"method"}]}}}}]

View File

@@ -1,15 +1,15 @@
{
"name": "@jiguang-ionic/jpush",
"version": "1.0.2",
"version": "2.0.0",
"description": "JPush support for ionic-native",
"module": "index.js",
"typings": "index.d.ts",
"author": "hevin",
"license": "MIT",
"peerDependencies": {
"@ionic-native/core": "^4.2.0",
"@ionic-native/core": "^5.1.0",
"@angular/core": "*",
"rxjs": "^5.0.1"
"rxjs": "^6.3.0"
},
"repository": {
"type": "git",

View File

@@ -1,6 +1,6 @@
{
"name": "jpush-phonegap-plugin",
"version": "3.3.0",
"version": "3.6.3",
"description": "JPush for cordova plugin",
"cordova": {
"id": "jpush-phonegap-plugin",
@@ -23,7 +23,7 @@
],
"devDependencies": {
"cordova-plugin-device": "*",
"cordova-plugin-jcore": "*"
"cordova-plugin-jcore": ">=1.2.0"
},
"author": "JiGuang",
"license": "MIT",

View File

@@ -2,7 +2,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="jpush-phonegap-plugin"
version="3.3.0">
version="3.6.3">
<name>JPush</name>
<description>JPush for cordova plugin</description>
@@ -11,6 +11,7 @@
<license>MIT License</license>
<preference name="APP_KEY" />
<preference name="CHANNEL" default="developer-default" />
<engines>
<engine name="cordova" version=">=3.0" />
@@ -30,7 +31,17 @@
<param name="ios-package" value="JPushPlugin" />
</feature>
</config-file>
<config-file target="*-Info.plist" parent="UIBackgroundModes">
<array>
<string>remote-notification</string>
</array>
</config-file>
<config-file target="*-Debug.plist" parent="aps-environment">
<string>development</string>
</config-file>
<config-file target="*-Release.plist" parent="aps-environment">
<string>production</string>
</config-file>
<header-file src="src/ios/Plugins/JPushDefine.h" />
<header-file src="src/ios/Plugins/JPushPlugin.h" />
<source-file src="src/ios/Plugins/JPushPlugin.m" />
@@ -38,7 +49,7 @@
<source-file src="src/ios/Plugins/AppDelegate+JPush.m" />
<header-file src="src/ios/lib/JPUSHService.h" />
<source-file src="src/ios/lib/jpush-ios-3.0.7.a" framework="true" />
<source-file src="src/ios/lib/jpush-ios-3.1.2.a" framework="true" />
<resource-file src="src/ios/JPushConfig.plist" />
<framework src="CFNetwork.framework" weak="true" />
@@ -57,10 +68,6 @@
<config-file target="*JPushConfig.plist" parent="Appkey">
<string>$APP_KEY</string>
</config-file>
<!-- <hook type="after_platform_add" src="hooks/iosEnablePush.js" />
<hook type="after_plugin_install" src="hooks/iosEnablePush.js" />
<hook type="before_plugin_uninstall" src="hooks/iosDisablePush.js" /> -->
</platform>
<platform name="android">
@@ -70,8 +77,8 @@
</feature>
</config-file>
<config-file target="AndroidManifest.xml" parent="/manifest">
<!-- Required 一些系统要求的权限,如访问网络等-->
<config-file target="AndroidManifest.xml" parent="/manifest" mode="merge">
<!-- Required 一些系统要求的权限,如访问网络等 -->
<permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
@@ -79,40 +86,20 @@
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</config-file>
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<!-- Required SDK核心功能-->
<activity android:name="cn.jpush.android.ui.PushActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<config-file target="AndroidManifest.xml" parent="/manifest/application" mode="merge">
<!-- Rich push 核心功能 since 2.0.6-->
<activity android:name="cn.jpush.android.ui.PopWinActivity"
android:theme="@style/MyDialogStyle"
android:exported="false">
</activity>
<!-- Required SDK核心功能-->
<service android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false">
</service>
<!-- Required SDK 核心功能-->
<service android:name="cn.jpush.android.service.PushService"
@@ -127,10 +114,33 @@
</intent-filter>
</service>
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="true" />
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 JPush 服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service android:name="cn.jpush.android.service.DaemonService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.DaemonService" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</service>
<!-- since 3.1.0 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DownloadProvider"
android:name="cn.jpush.android.service.DownloadProvider"
android:exported="true"
/>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false">
android:enabled="true">
<intent-filter android:priority="1000">
<!--Required 显示通知栏 -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
@@ -148,21 +158,52 @@
</intent-filter>
</receiver>
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service android:name="cn.jpush.android.service.DaemonService"
android:enabled="true"
android:exported="true">
<!-- Required SDK核心功能 -->
<activity android:name="cn.jpush.android.ui.PushActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.DaemonService" />
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</service>
</activity>
<!-- User defined. For test only 用户自定义的广播接收器 -->
<!-- SDK 核心功能-->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:theme="@style/MyDialogStyle">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- Required SDK 核心功能 -->
<service android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false">
</service>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.AlarmReceiver" />
<receiver android:name="cn.jiguang.cordova.push.JPushEventReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</receiver>
<!-- 插件通知广播接收器 -->
<receiver
android:name="cn.jiguang.cordova.push.JPushReceiver"
android:enabled="true">
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
@@ -173,49 +214,36 @@
</intent-filter>
</receiver>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.AlarmReceiver"
android:exported="false" />
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="true" />
<receiver android:name="cn.jiguang.cordova.push.JPushEventReceiver">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</receiver>
<!-- Required. Enable it you can get statistics data with channel -->
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default" />
<meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL" />
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" />
</config-file>
<source-file src="src/android/libs/jpush-android-3.1.1.jar" target-dir="libs" />
<lib-file src="src/android/libs/jpush-android-3.1.8.jar" />
<source-file src="src/android/JPushReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/JPushPlugin.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/JPushEventReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
target-dir="res/drawable" />
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml"
target-dir="res/drawable" />
<resource-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
target="res/drawable/jpush_richpush_btn_selector.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml"
target="res/drawable/jpush_richpush_progressbar.xml" />
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png"
target-dir="res/drawable-hdpi" />
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png"
target-dir="res/drawable-hdpi" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png"
target="res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png"
target="res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png" />
<source-file src="src/android/res/layout/jpush_popwin_layout.xml" target-dir="res/layout" />
<source-file src="src/android/res/layout/jpush_webview_layout.xml" target-dir="res/layout" />
<source-file src="src/android/res/layout/test_notification_layout.xml" target-dir="res/layout" />
<resource-file src="src/android/res/layout/jpush_popwin_layout.xml"
target="res/layout/jpush_popwin_layout.xml" />
<resource-file src="src/android/res/layout/jpush_webview_layout.xml"
target="res/layout/jpush_webview_layout.xml" />
<resource-file src="src/android/res/layout/test_notification_layout.xml"
target="res/layout/test_notification_layout.xml" />
<source-file src="src/android/res/values/jpush_style.xml" target-dir="res/values" />
<resource-file src="src/android/res/values/jpush_style.xml"
target="res/values/jpush_style.xml" />
</platform>
</plugin>

View File

@@ -14,7 +14,6 @@ import java.util.Set;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.service.JPushMessageReceiver;
public class JPushEventReceiver extends JPushMessageReceiver {
private static final String TAG = JPushEventReceiver.class.getSimpleName();

View File

@@ -1,8 +1,8 @@
package cn.jiguang.cordova.push;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AppOpsManager;
import android.app.NotificationManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.os.Build;
@@ -20,22 +20,17 @@ import org.json.JSONObject;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import cn.jpush.android.api.BasicPushNotificationBuilder;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;
import cn.jpush.android.data.JPushLocalNotification;
import cn.jpush.android.service.JPushMessageReceiver;
public class JPushPlugin extends CordovaPlugin {
@@ -64,33 +59,29 @@ public class JPushPlugin extends CordovaPlugin {
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
mContext = cordova.getActivity().getApplicationContext();
JPushInterface.init(mContext);
cordovaActivity = cordova.getActivity();
//如果同时缓存了打开事件 openNotificationAlert 和 消息事件 notificationAlert只向 UI 发打开事件。
//这样做是为了和 iOS 统一。
// 如果同时缓存了打开事件 openNotificationAlert 和 消息事件 notificationAlert只向 UI 发打开事件。
// 这样做是为了和 iOS 统一。
if (openNotificationAlert != null) {
notificationAlert = null;
transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
openNotificationExtras);
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
}
if (notificationAlert != null) {
transmitNotificationReceive(notificationTitle, notificationAlert,
notificationExtras);
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras);
}
}
public void onResume(boolean multitasking) {
if (openNotificationAlert != null) {
notificationAlert = null;
transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
openNotificationExtras);
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
}
if (notificationAlert != null) {
transmitNotificationReceive(notificationTitle, notificationAlert,
notificationExtras);
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras);
}
}
@@ -238,14 +229,13 @@ public class JPushPlugin extends CordovaPlugin {
}
@Override
public boolean execute(final String action, final JSONArray data,
final CallbackContext callbackContext) throws JSONException {
public boolean execute(final String action, final JSONArray data, final CallbackContext callbackContext)
throws JSONException {
cordova.getThreadPool().execute(new Runnable() {
@Override
public void run() {
try {
Method method = JPushPlugin.class.getDeclaredMethod(action,
JSONArray.class, CallbackContext.class);
Method method = JPushPlugin.class.getDeclaredMethod(action, JSONArray.class, CallbackContext.class);
method.invoke(JPushPlugin.this, data, callbackContext);
} catch (Exception e) {
Log.e(TAG, e.toString());
@@ -308,8 +298,7 @@ public class JPushPlugin extends CordovaPlugin {
callbackContext.error("error reading num json");
}
if (num != -1) {
JPushInterface.setLatestNotificationNumber(
mContext, num);
JPushInterface.setLatestNotificationNumber(mContext, num);
} else {
callbackContext.error("error num");
}
@@ -529,15 +518,18 @@ public class JPushPlugin extends CordovaPlugin {
void getConnectionState(JSONArray data, CallbackContext callback) {
boolean isConnected = JPushInterface.getConnectionState(cordovaActivity.getApplicationContext());
callback.success(String.valueOf(isConnected));
if (isConnected) {
callback.success(1);
} else {
callback.success(0);
}
}
/**
* 自定义通知行为,声音、震动、呼吸灯等。
* 自定义通知行为,声音、震动、呼吸灯等。
*/
void setBasicPushNotificationBuilder(JSONArray data, CallbackContext callbackContext) {
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(
this.cordova.getActivity());
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(this.cordova.getActivity());
builder.developerArg0 = "Basic builder 1";
JPushInterface.setPushNotificationBuilder(1, builder);
JSONObject obj = new JSONObject();
@@ -549,14 +541,12 @@ public class JPushPlugin extends CordovaPlugin {
}
/**
* 自定义推送通知栏样式,需要自己实现具体代码。
* http://docs.jiguang.cn/client/android_tutorials/#_11
* 自定义推送通知栏样式,需要自己实现具体代码。 http://docs.jiguang.cn/client/android_tutorials/#_11
*/
void setCustomPushNotificationBuilder(JSONArray data,
CallbackContext callbackContext) {
void setCustomPushNotificationBuilder(JSONArray data, CallbackContext callbackContext) {
// CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(
// this.cordova.getActivity(), R.layout.test_notification_layout,
// R.id.icon, R.id.title, R.id.text);
// this.cordova.getActivity(), R.layout.test_notification_layout,
// R.id.icon, R.id.title, R.id.text);
// JPushInterface.setPushNotificationBuilder(2, builder);
// JPushInterface.setDefaultPushNotificationBuilder(builder);
}
@@ -614,8 +604,7 @@ public class JPushPlugin extends CordovaPlugin {
}
/**
* 设置通知静默时间
* http://docs.jpush.io/client/android_api/#api_5
* 设置通知静默时间 http://docs.jpush.io/client/android_api/#api_5
*/
void setSilenceTime(JSONArray data, CallbackContext callbackContext) {
try {
@@ -631,14 +620,23 @@ public class JPushPlugin extends CordovaPlugin {
callbackContext.error("结束时间数值错误");
return;
}
JPushInterface.setSilenceTime(this.cordova.getActivity(), startHour, startMinute,
endHour, endMinute);
JPushInterface.setSilenceTime(this.cordova.getActivity(), startHour, startMinute, endHour, endMinute);
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error: reading json data.");
}
}
void setGeofenceInterval(JSONArray data, CallbackContext callbackContext) throws JSONException {
long interval = data.getLong(0);
JPushInterface.setGeofenceInterval(this.cordova.getActivity(), interval);
}
void setMaxGeofenceNumber(JSONArray data, CallbackContext callbackContext) throws JSONException {
int maxNumber = data.getInt(0);
JPushInterface.setMaxGeofenceNumber(mContext, maxNumber);
}
private boolean isValidHour(int hour) {
return !(hour < 0 || hour > 23);
}
@@ -666,8 +664,7 @@ public class JPushPlugin extends CordovaPlugin {
data.put("resultCode", code);
data.put("tags", tags);
data.put("alias", alias);
final String jsEvent = String.format(
"cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
final String jsEvent = String.format("cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
data.toString());
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
@@ -681,35 +678,43 @@ public class JPushPlugin extends CordovaPlugin {
}
};
@TargetApi(Build.VERSION_CODES.KITKAT)
private boolean hasPermission(String appOpsServiceId) {
Context context = cordova.getActivity().getApplicationContext();
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = context.getApplicationInfo();
if (Build.VERSION.SDK_INT >= 24) {
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
return mNotificationManager.areNotificationsEnabled();
} else {
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = context.getApplicationInfo();
String pkg = context.getPackageName();
int uid = appInfo.uid;
Class appOpsClazz;
String pkg = context.getPackageName();
int uid = appInfo.uid;
Class appOpsClazz;
try {
appOpsClazz = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClazz.getMethod("checkOpNoThrow",
Integer.TYPE, Integer.TYPE, String.class);
Field opValue = appOpsClazz.getDeclaredField(appOpsServiceId);
int value = opValue.getInt(Integer.class);
Object result = checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
return Integer.parseInt(result.toString()) == AppOpsManager.MODE_ALLOWED;
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
try {
appOpsClazz = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClazz.getMethod("checkOpNoThrow", Integer.TYPE, Integer.TYPE,
String.class);
Field opValue = appOpsClazz.getDeclaredField(appOpsServiceId);
int value = opValue.getInt(Integer.class);
Object result = checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
return Integer.parseInt(result.toString()) == AppOpsManager.MODE_ALLOWED;
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return true;
return false;
}
}

View File

@@ -13,13 +13,8 @@ import cn.jpush.android.api.JPushInterface;
public class JPushReceiver extends BroadcastReceiver {
private static final List<String> IGNORED_EXTRAS_KEYS =
Arrays.asList(
"cn.jpush.android.TITLE",
"cn.jpush.android.MESSAGE",
"cn.jpush.android.APPKEY",
"cn.jpush.android.NOTIFICATION_CONTENT_TITLE"
);
private static final List<String> IGNORED_EXTRAS_KEYS = Arrays.asList("cn.jpush.android.TITLE",
"cn.jpush.android.MESSAGE", "cn.jpush.android.APPKEY", "cn.jpush.android.NOTIFICATION_CONTENT_TITLE","key_show_entity","platform");
@Override
public void onReceive(Context context, Intent intent) {
@@ -54,8 +49,7 @@ public class JPushReceiver extends BroadcastReceiver {
JPushPlugin.transmitNotificationOpen(title, alert, extras);
Intent launch = context.getPackageManager().getLaunchIntentForPackage(
context.getPackageName());
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
if (launch != null) {
launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Binary file not shown.

View File

View File

0
src/android/res/layout/jpush_popwin_layout.xml Normal file → Executable file
View File

0
src/android/res/layout/jpush_webview_layout.xml Normal file → Executable file
View File

0
src/android/res/values/jpush_style.xml Normal file → Executable file
View File

View File

@@ -40,7 +40,8 @@ NSDictionary *_launchOptions;
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_receiveRegistrationId jsString:[event toJsonString]];
}];
if (notification) {
if (notification != nil &&
[[UIDevice currentDevice].systemVersion floatValue] < 10.0) {// iOS 10 openNotification
if (notification.userInfo) {
if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
@@ -50,27 +51,27 @@ NSDictionary *_launchOptions;
if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]) {
UILocalNotification *localNotification = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
NSDictionary* localNotificationEvent = @{@"content":localNotification.alertBody,
@"badge": @(localNotification.applicationIconBadgeNumber),
@"extras":localNotification.userInfo,
};
NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
localNotificationEvent[@"content"] = localNotification.alertBody;
localNotificationEvent[@"badge"] = @(localNotification.applicationIconBadgeNumber);
localNotificationEvent[@"extras"] = localNotification.userInfo;
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[localNotificationEvent toJsonString]];
}
}
[JPUSHService setDebugMode];
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSNumber *delay = [plistData valueForKey:JPushConfig_Delay];
_launchOptions = notification.userInfo;
if (![delay boolValue]) {
[self startJPushSDK];
}
}
[JPUSHService setDebugMode];
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSNumber *delay = [plistData valueForKey:JPushConfig_Delay];
_launchOptions = notification.userInfo;
if (![delay boolValue]) {
[self startJPushSDK];
}
}
-(void)startJPushSDK{
@@ -136,17 +137,12 @@ NSDictionary *_launchOptions;
[JPUSHService handleRemoteNotification:userInfo];
NSString *eventName;
switch ([UIApplication sharedApplication].applicationState) {
case UIApplicationStateInactive:
eventName = JPushDocumentEvent_OpenNotification;
break;
case UIApplicationStateActive:
eventName = JPushDocumentEvent_ReceiveNotification;
break;
case UIApplicationStateBackground:
eventName = JPushDocumentEvent_BackgroundNotification;
break;
default:
break;
case UIApplicationStateBackground:
eventName = JPushDocumentEvent_BackgroundNotification;
break;
default:
eventName = JPushDocumentEvent_ReceiveNotification;
break;
}
[JPushPlugin fireDocumentEvent:eventName jsString:[[self jpushFormatAPNSDic:userInfo] toJsonString]];
@@ -156,35 +152,39 @@ NSDictionary *_launchOptions;
}
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
NSMutableDictionary *userInfo = @[].mutableCopy;
NSMutableDictionary *userInfo = @{}.mutableCopy;
if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
} else {
UNNotificationContent *content = notification.request.content;
userInfo = [NSMutableDictionary dictionaryWithDictionary:@{@"content": content.body,
@"badge": content.badge,
@"extras": content.userInfo
}];
userInfo[@"content"] = content.body;
userInfo[@"badge"] = content.badge;
userInfo[@"extras"] = content.userInfo;
userInfo[@"identifier"] = notification.request.identifier;
}
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
if ([userInfo[@"aps"][@"content-available"] isEqualToNumber:@(1)]) {// content-available
return;
}
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
}
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
UNNotification *notification = response.notification;
NSMutableDictionary *userInfo = nil;
NSMutableDictionary *userInfo = @{}.mutableCopy;
if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
} else {
UNNotificationContent *content = notification.request.content;
userInfo = [NSMutableDictionary dictionaryWithDictionary:@{@"content": content.body,
@"badge": content.badge,
@"extras": content.userInfo
}];
userInfo[@"content"] = content.body;
userInfo[@"badge"] = content.badge;
userInfo[@"extras"] = content.userInfo;
userInfo[@"identifier"] = notification.request.identifier;
}
@@ -193,12 +193,12 @@ NSDictionary *_launchOptions;
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
NSDictionary* localNotificationEvent = @{@"content":notification.alertBody,
@"badge": @(notification.applicationIconBadgeNumber),
@"extras":notification.userInfo,
};
NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
localNotificationEvent[@"content"] = notification.alertBody;
localNotificationEvent[@"badge"] = @(notification.applicationIconBadgeNumber);
localNotificationEvent[@"extras"] = notification.userInfo;
[[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:localNotificationEvent];
[[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:localNotificationEvent];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {

View File

@@ -395,13 +395,14 @@
}
JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
// 0 android
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
if (delay) {
trigger.timeInterval = [delay doubleValue];
trigger.timeInterval = [delay doubleValue] + 0.000001;
}
} else {
if (delay) {
trigger.fireDate = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] intValue]];
trigger.fireDate = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] doubleValue] + 0.001];
}
}

View File

@@ -9,7 +9,7 @@
* Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
*/
#define JPUSH_VERSION_NUMBER 3.0.7
#define JPUSH_VERSION_NUMBER 3.1.2
#import <Foundation/Foundation.h>
@@ -21,6 +21,7 @@
@class UNNotificationRequest;
@class UNNotification;
@protocol JPUSHRegisterDelegate;
@protocol JPUSHGeofenceDelegate;
typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq);
typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind);
@@ -40,6 +41,11 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received
JPAuthorizationOptionSound = (1 << 1), // the application may play a sound upon a notification being received
JPAuthorizationOptionAlert = (1 << 2), // the application may display an alert upon a notification being received
JPAuthorizationOptionCarPlay = (1 << 3), // The ability to display notifications in a CarPlay environment.
JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts.
JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings.
JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center.
};
/*!
@@ -72,6 +78,17 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@end
/*!
* 推送通知声音实体类
* iOS10以上有效
*/
@interface JPushNotificationSound : NSObject <NSCopying, NSCoding>
@property (nonatomic, copy) NSString *soundName; //普通通知铃声
@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量有效值在0~1之间默认为1
@end
/*!
* 推送内容实体类
*/
@@ -85,12 +102,16 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识
@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo
@property (nonatomic, copy) NSString *sound; // 声音名称,不设置则为默认声音
@property (nonatomic, copy) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件iOS10以上有效需要传入UNNotificationAttachment对象数组类型
@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识iOS10以上有效可用来对推送进行分组
@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名iOS10以上有效从推送启动时将会用到
@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。
@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。
@end
/*!
* 推送触发方式实体类
* 注dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值如果同时传入值会根据优先级I、II、III使其中一种触发方式生效fireDate为iOS10以下根据时间触发时须传入的参数
@@ -304,23 +325,26 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @abstract 开始记录页面停留
*
* @param pageName 页面名称
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
*/
+ (void)startLogPageView:(NSString *)pageName;
+ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*!
* @abstract 停止记录页面停留
*
* @param pageName 页面
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
*/
+ (void)stopLogPageView:(NSString *)pageName;
+ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*!
* @abstract 直接上报在页面的停留时间
*
* @param pageName 页面
* @param seconds 停留的秒数
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
*/
+ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds;
+ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*!
* @abstract 开启Crash日志收集
@@ -347,6 +371,19 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (void)setLocation:(CLLocation *)location;
/**
设置地理围栏的最大个数
默认值为 10 iOS系统默认地理围栏最大个数为20
@param count 个数 count
*/
+ (void)setGeofenecMaxCount:(NSInteger)count;
/**
注册地理围栏的代理
@param delegate 代理
@param launchOptions app启动完成是收到的字段参数
*/
+ (void)registerLbsGeofenceDelegate:(id<JPUSHGeofenceDelegate>)delegate withLaunchOptions:(NSDictionary *)launchOptions;
///----------------------------------------------------
/// @name Local Notification 本地通知
@@ -375,7 +412,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @abstract 查找推送 (支持iOS10并兼容iOS10以下版本)
*
* JPush 2.1.9新接口
* @param identifier JPushNotificationIdentifier类型iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求iOS10以下identifier.delivered属性无效identifier.identifiers如果设置nil或空数组则返回所有推送。须要设置identifier.findCompletionHandler回调才能得到查找结果通过(NSArray *results)返回相应对象数组。
* @param identifier JPushNotificationIdentifier类型iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求iOS10以下identifier.delivered属性无效identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果通过(NSArray *results)返回相应对象数组。
* @discussion 旧的查找推送接口被废弃,使用此接口可以替换
*
*/
@@ -493,6 +530,20 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (void)resetBadge;
///----------------------------------------------------
/// @name Other Feature 其他功能
///----------------------------------------------------
/*!
* @abstract 设置手机号码(到服务器)
*
* @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码
* @param completion 响应回调。成功则error为空失败则error带有错误码及错误信息
*
* @discussion 设置手机号码后可实现“推送不到短信到”的通知方式提高推送达到率。结果信息通过completion异步返回也可将completion设置为nil不处理结果信息。
*
*/
+ (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion;
///----------------------------------------------------
/// @name Logs and others 日志与其他
@@ -536,7 +587,6 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (void)setLogOFF;
///----------------------------------------------------
///********************下列方法已过期********************
///**************请使用新版tag/alias操作接口**************
@@ -592,4 +642,33 @@ callbackSelector:(SEL)cbSelector
*/
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler;
/*
* @brief handle UserNotifications.framework [openSettingsForNotification:]
* @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
* @param notification 当前管理的通知对象
*/
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(nullable UNNotification *)notification NS_AVAILABLE_IOS(12.0);
@end
@protocol JPUSHGeofenceDelegate <NSObject>
/**
进入地理围栏区域
@param geofenceId 地理围栏id
@param userInfo 地理围栏触发时返回的信息
@param error 错误信息
*/
- (void)jpushGeofenceIdentifer:(NSString * _Nonnull)geofenceId didEnterRegion:(NSDictionary * _Nullable)userInfo error:(NSError * _Nullable)error;
/**
离开地理围栏区域
@param geofenceId 地理围栏id
@param userInfo 地理围栏触发时返回的信息
@param error 错误信息
*/
- (void)jpushGeofenceIdentifer:(NSString * _Nonnull)geofenceId didExitRegion:(NSDictionary * _Nullable)userInfo error:(NSError * _Nullable)error;
@end

Binary file not shown.

BIN
src/ios/lib/jpush-ios-3.1.2.a Executable file

Binary file not shown.

View File

@@ -1,157 +1,211 @@
var JPushPlugin = function () {}
var JPushPlugin = function() {};
// private plugin function
JPushPlugin.prototype.receiveMessage = {}
JPushPlugin.prototype.openNotification = {}
JPushPlugin.prototype.receiveNotification = {}
JPushPlugin.prototype.receiveMessage = {};
JPushPlugin.prototype.openNotification = {};
JPushPlugin.prototype.receiveNotification = {};
JPushPlugin.prototype.isPlatformIOS = function () {
return (device.platform === 'iPhone' ||
device.platform === 'iPad' ||
device.platform === 'iPod touch' ||
device.platform === 'iOS')
}
JPushPlugin.prototype.isPlatformIOS = function() {
return (
device.platform === "iPhone" ||
device.platform === "iPad" ||
device.platform === "iPod touch" ||
device.platform === "iOS"
);
};
JPushPlugin.prototype.errorCallback = function (msg) {
console.log('JPush Callback Error: ' + msg)
}
JPushPlugin.prototype.errorCallback = function(msg) {
console.log("JPush Callback Error: " + msg);
};
JPushPlugin.prototype.callNative = function (name, args, successCallback, errorCallback) {
JPushPlugin.prototype.callNative = function(
name,
args,
successCallback,
errorCallback
) {
if (errorCallback) {
cordova.exec(successCallback, errorCallback, 'JPushPlugin', name, args)
cordova.exec(successCallback, errorCallback, "JPushPlugin", name, args);
} else {
cordova.exec(successCallback, this.errorCallback, 'JPushPlugin', name, args)
cordova.exec(
successCallback,
this.errorCallback,
"JPushPlugin",
name,
args
);
}
}
};
// Common methods
JPushPlugin.prototype.init = function () {
JPushPlugin.prototype.init = function() {
if (this.isPlatformIOS()) {
this.callNative('initial', [], null)
this.callNative("initial", [], null);
} else {
this.callNative('init', [], null)
this.callNative("init", [], null);
}
}
};
JPushPlugin.prototype.setDebugMode = function (mode) {
if (device.platform === 'Android') {
this.callNative('setDebugMode', [mode], null)
JPushPlugin.prototype.setDebugMode = function(mode) {
if (device.platform === "Android") {
this.callNative("setDebugMode", [mode], null);
} else {
if (mode === true) {
this.setDebugModeFromIos()
this.setDebugModeFromIos();
} else {
this.setLogOFF()
this.setLogOFF();
}
}
}
};
JPushPlugin.prototype.getRegistrationID = function (successCallback) {
this.callNative('getRegistrationID', [], successCallback)
}
JPushPlugin.prototype.getRegistrationID = function(successCallback) {
this.callNative("getRegistrationID", [], successCallback);
};
JPushPlugin.prototype.stopPush = function () {
this.callNative('stopPush', [], null)
}
JPushPlugin.prototype.stopPush = function() {
this.callNative("stopPush", [], null);
};
JPushPlugin.prototype.resumePush = function () {
this.callNative('resumePush', [], null)
}
JPushPlugin.prototype.resumePush = function() {
this.callNative("resumePush", [], null);
};
JPushPlugin.prototype.isPushStopped = function (successCallback) {
this.callNative('isPushStopped', [], successCallback)
}
JPushPlugin.prototype.isPushStopped = function(successCallback) {
this.callNative("isPushStopped", [], successCallback);
};
JPushPlugin.prototype.clearLocalNotifications = function () {
if (device.platform === 'Android') {
this.callNative('clearLocalNotifications', [], null)
JPushPlugin.prototype.clearLocalNotifications = function() {
if (device.platform === "Android") {
this.callNative("clearLocalNotifications", [], null);
} else {
this.clearAllLocalNotifications()
this.clearAllLocalNotifications();
}
}
};
/**
* 设置标签。
* 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
*
*
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
*/
JPushPlugin.prototype.setTags = function (params, successCallback, errorCallback) {
this.callNative('setTags', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.setTags = function(
params,
successCallback,
errorCallback
) {
this.callNative("setTags", [params], successCallback, errorCallback);
};
/**
* 新增标签。
*
*
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
*/
JPushPlugin.prototype.addTags = function (params, successCallback, errorCallback) {
this.callNative('addTags', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.addTags = function(
params,
successCallback,
errorCallback
) {
this.callNative("addTags", [params], successCallback, errorCallback);
};
/**
* 删除指定标签。
*
*
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
*/
JPushPlugin.prototype.deleteTags = function (params, successCallback, errorCallback) {
this.callNative('deleteTags', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.deleteTags = function(
params,
successCallback,
errorCallback
) {
this.callNative("deleteTags", [params], successCallback, errorCallback);
};
/**
* 清除所有标签。
*
*
* @param params = { 'sequence': number }
*/
JPushPlugin.prototype.cleanTags = function (params, successCallback, errorCallback) {
this.callNative('cleanTags', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.cleanTags = function(
params,
successCallback,
errorCallback
) {
this.callNative("cleanTags", [params], successCallback, errorCallback);
};
/**
* 查询所有标签。
*
*
* @param params = { 'sequence': number }
*/
JPushPlugin.prototype.getAllTags = function (params, successCallback, errorCallback) {
this.callNative('getAllTags', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.getAllTags = function(
params,
successCallback,
errorCallback
) {
this.callNative("getAllTags", [params], successCallback, errorCallback);
};
/**
* 查询指定标签与当前用户的绑定状态。
*
*
* @param params = { 'sequence': number, 'tag': string }
*/
JPushPlugin.prototype.checkTagBindState = function (params, successCallback, errorCallback) {
this.callNative('checkTagBindState', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.checkTagBindState = function(
params,
successCallback,
errorCallback
) {
this.callNative(
"checkTagBindState",
[params],
successCallback,
errorCallback
);
};
/**
* 设置别名。
* 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
*
*
* @param params = { 'sequence': number, 'alias': string }
*/
JPushPlugin.prototype.setAlias = function (params, successCallback, errorCallback) {
this.callNative('setAlias', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.setAlias = function(
params,
successCallback,
errorCallback
) {
this.callNative("setAlias", [params], successCallback, errorCallback);
};
/**
* 删除别名。
*
*
* @param params = { 'sequence': number }
*/
JPushPlugin.prototype.deleteAlias = function (params, successCallback, errorCallback) {
this.callNative('deleteAlias', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.deleteAlias = function(
params,
successCallback,
errorCallback
) {
this.callNative("deleteAlias", [params], successCallback, errorCallback);
};
/**
* 查询当前绑定的别名。
*
*
* @param params = { 'sequence': number }
*/
JPushPlugin.prototype.getAlias = function (params, successCallback, errorCallback) {
this.callNative('getAlias', [params], successCallback, errorCallback)
}
JPushPlugin.prototype.getAlias = function(
params,
successCallback,
errorCallback
) {
this.callNative("getAlias", [params], successCallback, errorCallback);
};
// 判断系统设置中是否对本应用启用通知。
// iOS: 返回值如果大于 0代表通知开启0: 通知关闭。
@@ -161,224 +215,272 @@ JPushPlugin.prototype.getAlias = function (params, successCallback, errorCallbac
// UIRemoteNotificationTypeAlert = 1 << 2,
// UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,
// Android: 返回值 1 代表通知启用0: 通知关闭。
JPushPlugin.prototype.getUserNotificationSettings = function (successCallback) {
JPushPlugin.prototype.getUserNotificationSettings = function(successCallback) {
if (this.isPlatformIOS()) {
this.callNative('getUserNotificationSettings', [], successCallback)
} else if (device.platform === 'Android') {
this.callNative('areNotificationEnabled', [], successCallback)
this.callNative("getUserNotificationSettings", [], successCallback);
} else if (device.platform === "Android") {
this.callNative("areNotificationEnabled", [], successCallback);
}
}
};
// iOS methods
JPushPlugin.prototype.startJPushSDK = function () {
this.callNative('startJPushSDK', [], null)
}
JPushPlugin.prototype.startJPushSDK = function() {
this.callNative("startJPushSDK", [], null);
};
JPushPlugin.prototype.setBadge = function (value) {
JPushPlugin.prototype.setBadge = function(value) {
if (this.isPlatformIOS()) {
this.callNative('setBadge', [value], null)
this.callNative("setBadge", [value], null);
}
}
};
JPushPlugin.prototype.resetBadge = function () {
JPushPlugin.prototype.resetBadge = function() {
if (this.isPlatformIOS()) {
this.callNative('resetBadge', [], null)
this.callNative("resetBadge", [], null);
}
}
};
JPushPlugin.prototype.setDebugModeFromIos = function () {
JPushPlugin.prototype.setDebugModeFromIos = function() {
if (this.isPlatformIOS()) {
this.callNative('setDebugModeFromIos', [], null)
this.callNative("setDebugModeFromIos", [], null);
}
}
};
JPushPlugin.prototype.setLogOFF = function () {
JPushPlugin.prototype.setLogOFF = function() {
if (this.isPlatformIOS()) {
this.callNative('setLogOFF', [], null)
this.callNative("setLogOFF", [], null);
}
}
};
JPushPlugin.prototype.setCrashLogON = function () {
JPushPlugin.prototype.setCrashLogON = function() {
if (this.isPlatformIOS()) {
this.callNative('crashLogON', [], null)
this.callNative("crashLogON", [], null);
}
}
};
JPushPlugin.prototype.addLocalNotificationForIOS = function (delayTime, content,
badge, notificationID, extras) {
JPushPlugin.prototype.addLocalNotificationForIOS = function(
delayTime,
content,
badge,
notificationID,
extras
) {
if (this.isPlatformIOS()) {
this.callNative('setLocalNotification', [delayTime, content, badge, notificationID, extras], null)
this.callNative(
"setLocalNotification",
[delayTime, content, badge, notificationID, extras],
null
);
}
}
};
JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function (identifierKey) {
JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function(
identifierKey
) {
if (this.isPlatformIOS()) {
this.callNative('deleteLocalNotificationWithIdentifierKey', [identifierKey], null)
this.callNative(
"deleteLocalNotificationWithIdentifierKey",
[identifierKey],
null
);
}
}
};
JPushPlugin.prototype.clearAllLocalNotifications = function () {
JPushPlugin.prototype.clearAllLocalNotifications = function() {
if (this.isPlatformIOS()) {
this.callNative('clearAllLocalNotifications', [], null)
this.callNative("clearAllLocalNotifications", [], null);
}
}
};
JPushPlugin.prototype.setLocation = function (latitude, longitude) {
JPushPlugin.prototype.setLocation = function(latitude, longitude) {
if (this.isPlatformIOS()) {
this.callNative('setLocation', [latitude, longitude], null)
this.callNative("setLocation", [latitude, longitude], null);
}
}
};
JPushPlugin.prototype.startLogPageView = function (pageName) {
JPushPlugin.prototype.startLogPageView = function(pageName) {
if (this.isPlatformIOS()) {
this.callNative('startLogPageView', [pageName], null)
this.callNative("startLogPageView", [pageName], null);
}
}
};
JPushPlugin.prototype.stopLogPageView = function (pageName) {
JPushPlugin.prototype.stopLogPageView = function(pageName) {
if (this.isPlatformIOS()) {
this.callNative('stopLogPageView', [pageName], null)
this.callNative("stopLogPageView", [pageName], null);
}
}
};
JPushPlugin.prototype.beginLogPageView = function (pageName, duration) {
JPushPlugin.prototype.beginLogPageView = function(pageName, duration) {
if (this.isPlatformIOS()) {
this.callNative('beginLogPageView', [pageName, duration], null)
this.callNative("beginLogPageView", [pageName, duration], null);
}
}
};
JPushPlugin.prototype.setApplicationIconBadgeNumber = function (badge) {
JPushPlugin.prototype.setApplicationIconBadgeNumber = function(badge) {
if (this.isPlatformIOS()) {
this.callNative('setApplicationIconBadgeNumber', [badge], null)
this.callNative("setApplicationIconBadgeNumber", [badge], null);
}
}
};
JPushPlugin.prototype.getApplicationIconBadgeNumber = function (callback) {
JPushPlugin.prototype.getApplicationIconBadgeNumber = function(callback) {
if (this.isPlatformIOS()) {
this.callNative('getApplicationIconBadgeNumber', [], callback)
this.callNative("getApplicationIconBadgeNumber", [], callback);
}
}
};
JPushPlugin.prototype.addDismissActions = function (actions, categoryId) {
this.callNative('addDismissActions', [actions, categoryId])
}
JPushPlugin.prototype.addDismissActions = function(actions, categoryId) {
this.callNative("addDismissActions", [actions, categoryId]);
};
JPushPlugin.prototype.addNotificationActions = function (actions, categoryId) {
this.callNative('addNotificationActions', [actions, categoryId])
}
JPushPlugin.prototype.addNotificationActions = function(actions, categoryId) {
this.callNative("addNotificationActions", [actions, categoryId]);
};
// Android methods
JPushPlugin.prototype.getConnectionState = function (successCallback) {
if (device.platform === 'Android') {
this.callNative('getConnectionState', [], successCallback)
JPushPlugin.prototype.getConnectionState = function(successCallback) {
if (device.platform === "Android") {
this.callNative("getConnectionState", [], successCallback);
}
}
};
JPushPlugin.prototype.setBasicPushNotificationBuilder = function () {
if (device.platform === 'Android') {
this.callNative('setBasicPushNotificationBuilder', [], null)
JPushPlugin.prototype.setBasicPushNotificationBuilder = function() {
if (device.platform === "Android") {
this.callNative("setBasicPushNotificationBuilder", [], null);
}
}
};
JPushPlugin.prototype.setCustomPushNotificationBuilder = function () {
if (device.platform === 'Android') {
this.callNative('setCustomPushNotificationBuilder', [], null)
JPushPlugin.prototype.setCustomPushNotificationBuilder = function() {
if (device.platform === "Android") {
this.callNative("setCustomPushNotificationBuilder", [], null);
}
}
};
JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function (data) {
if (device.platform === 'Android') {
data = JSON.stringify(data)
var event = JSON.parse(data)
cordova.fireDocumentEvent('jpush.receiveRegistrationId', event)
JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function(data) {
if (device.platform === "Android") {
data = JSON.stringify(data);
var event = JSON.parse(data);
cordova.fireDocumentEvent("jpush.receiveRegistrationId", event);
}
}
};
JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) {
data = JSON.stringify(data)
this.receiveMessage = JSON.parse(data)
cordova.fireDocumentEvent('jpush.receiveMessage', this.receiveMessage)
}
JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) {
data = JSON.stringify(data);
this.receiveMessage = JSON.parse(data);
cordova.fireDocumentEvent("jpush.receiveMessage", this.receiveMessage);
};
JPushPlugin.prototype.openNotificationInAndroidCallback = function (data) {
data = JSON.stringify(data)
this.openNotification = JSON.parse(data)
cordova.fireDocumentEvent('jpush.openNotification', this.openNotification)
}
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
data = JSON.stringify(data);
this.openNotification = JSON.parse(data);
cordova.fireDocumentEvent("jpush.openNotification", this.openNotification);
};
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function (data) {
data = JSON.stringify(data)
this.receiveNotification = JSON.parse(data)
cordova.fireDocumentEvent('jpush.receiveNotification', this.receiveNotification)
}
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data) {
data = JSON.stringify(data);
this.receiveNotification = JSON.parse(data);
cordova.fireDocumentEvent(
"jpush.receiveNotification",
this.receiveNotification
);
};
JPushPlugin.prototype.clearAllNotification = function () {
if (device.platform === 'Android') {
this.callNative('clearAllNotification', [], null)
JPushPlugin.prototype.clearAllNotification = function() {
if (device.platform === "Android") {
this.callNative("clearAllNotification", [], null);
}
}
};
JPushPlugin.prototype.clearNotificationById = function (id) {
if (device.platform === 'Android') {
this.callNative('clearNotificationById', [id], null)
JPushPlugin.prototype.clearNotificationById = function(id) {
if (device.platform === "Android") {
this.callNative("clearNotificationById", [id], null);
}
}
};
JPushPlugin.prototype.setLatestNotificationNum = function (num) {
if (device.platform === 'Android') {
this.callNative('setLatestNotificationNum', [num], null)
JPushPlugin.prototype.setLatestNotificationNum = function(num) {
if (device.platform === "Android") {
this.callNative("setLatestNotificationNum", [num], null);
}
}
};
JPushPlugin.prototype.addLocalNotification = function (builderId, content, title,
notificationID, broadcastTime, extras) {
if (device.platform === 'Android') {
this.callNative('addLocalNotification',
[builderId, content, title, notificationID, broadcastTime, extras], null)
JPushPlugin.prototype.addLocalNotification = function(
builderId,
content,
title,
notificationID,
broadcastTime,
extras
) {
if (device.platform === "Android") {
this.callNative(
"addLocalNotification",
[builderId, content, title, notificationID, broadcastTime, extras],
null
);
}
}
};
JPushPlugin.prototype.removeLocalNotification = function (notificationID) {
if (device.platform === 'Android') {
this.callNative('removeLocalNotification', [notificationID], null)
JPushPlugin.prototype.removeLocalNotification = function(notificationID) {
if (device.platform === "Android") {
this.callNative("removeLocalNotification", [notificationID], null);
}
}
};
JPushPlugin.prototype.reportNotificationOpened = function (msgID) {
if (device.platform === 'Android') {
this.callNative('reportNotificationOpened', [msgID], null)
JPushPlugin.prototype.reportNotificationOpened = function(msgID) {
if (device.platform === "Android") {
this.callNative("reportNotificationOpened", [msgID], null);
}
}
};
/**
* 用于在 Android 6.0 及以上系统,申请一些权限
* 具体可看http://docs.jpush.io/client/android_api/#android-60
*/
JPushPlugin.prototype.requestPermission = function () {
if (device.platform === 'Android') {
this.callNative('requestPermission', [], null)
JPushPlugin.prototype.requestPermission = function() {
if (device.platform === "Android") {
this.callNative("requestPermission", [], null);
}
}
};
JPushPlugin.prototype.setSilenceTime = function (startHour, startMinute, endHour, endMinute) {
if (device.platform === 'Android') {
this.callNative('setSilenceTime', [startHour, startMinute, endHour, endMinute], null)
JPushPlugin.prototype.setSilenceTime = function(
startHour,
startMinute,
endHour,
endMinute
) {
if (device.platform === "Android") {
this.callNative(
"setSilenceTime",
[startHour, startMinute, endHour, endMinute],
null
);
}
}
};
JPushPlugin.prototype.setPushTime = function (weekdays, startHour, endHour) {
if (device.platform === 'Android') {
this.callNative('setPushTime', [weekdays, startHour, endHour], null)
JPushPlugin.prototype.setPushTime = function(weekdays, startHour, endHour) {
if (device.platform === "Android") {
this.callNative("setPushTime", [weekdays, startHour, endHour], null);
}
}
};
JPushPlugin.prototype.setGeofenceInterval = function(interval) {
if (device.platform === "Android") {
this.callNative("setGeofenceInterval", [interval], null);
}
};
JPushPlugin.prototype.setMaxGeofenceNumber = function(maxNumber) {
if (device.platform === "Android") {
this.callNative("setMaxGeofenceNumber", [maxNumber], null);
}
};
if (!window.plugins) {
window.plugins = {}
window.plugins = {};
}
if (!window.plugins.jPushPlugin) {
window.plugins.jPushPlugin = new JPushPlugin()
window.plugins.jPushPlugin = new JPushPlugin();
}
module.exports = new JPushPlugin()
module.exports = new JPushPlugin();