Compare commits

...

46 Commits

Author SHA1 Message Date
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
22 changed files with 728 additions and 443 deletions

View File

@@ -13,8 +13,11 @@
>注意:插件从 v3.4.0 开始支持 cordova-android 7.0.0,因 cordova-android 7.0.0 修改了 Android 项目结构,因此不兼容之前的版本,升级前请务必注意。 >注意:插件从 v3.4.0 开始支持 cordova-android 7.0.0,因 cordova-android 7.0.0 修改了 Android 项目结构,因此不兼容之前的版本,升级前请务必注意。
> >
>如果需要安装之前版本的插件,请先安装 v1.2.0 以下版本(建议安装 v1.1.12)的 cordova-plugin-jcore再安装插件否则运行会报错。 >如果需要在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 ## Install
> 注意: > 注意:
@@ -38,6 +41,27 @@
```shell ```shell
cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey 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 ### Ionic
@@ -120,6 +144,10 @@ Android 的推送通过长连接的方式实现,只有在保持连接的情况
### iOS ### iOS
#### XCode 10 收不到推送怎么办?
打开 xcode -> file -> WorkSpace Settings… -> Build System 改成 Legacy Build System 然后卸载 App 重新运行。
#### 打包时遇到 i386 打包失败怎么办? #### 打包时遇到 i386 打包失败怎么办?
```shell ```shell

View File

@@ -6,6 +6,8 @@
- [通知栏样式定制](#通知栏样式定制) - [通知栏样式定制](#通知栏样式定制)
- [设置保留最近通知条数](#设置保留最近通知条数) - [设置保留最近通知条数](#设置保留最近通知条数)
- [本地通知](#本地通知) - [本地通知](#本地通知)
- [获取推送连接状态](#获取推送连接状态)
- [地理围栏](#地理围栏)
## 获取集成日志(同时适用于 iOS ## 获取集成日志(同时适用于 iOS
@@ -185,4 +187,62 @@ window.JPush.clearLocalNotifications() // 同时适用于 iOS
- title: 设置本地通知的 title。 - title: 设置本地通知的 title。
- notificationID: 设置本地通知的 ID不要为 0 - notificationID: 设置本地通知的 ID不要为 0
- broadcastTime: 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒。 - 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 提供的推送服务。 调用此 API用来开启 JPush SDK 提供的推送服务。
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
#### 接口定义 #### 接口定义
```js ```js
@@ -63,6 +55,14 @@ window.JPush.init()
### API - stopPush ### API - stopPush
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
- 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。 - 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。
- 推荐:设置一个 UI 界面,提醒用户在 设置-通知 中关闭推送服务。 - 推荐:设置一个 UI 界面,提醒用户在 设置-通知 中关闭推送服务。

View File

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

View File

@@ -1,6 +1,6 @@
{ {
"name": "jpush-phonegap-plugin", "name": "jpush-phonegap-plugin",
"version": "3.4.1", "version": "3.6.1",
"description": "JPush for cordova plugin", "description": "JPush for cordova plugin",
"cordova": { "cordova": {
"id": "jpush-phonegap-plugin", "id": "jpush-phonegap-plugin",

View File

@@ -2,7 +2,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
id="jpush-phonegap-plugin" id="jpush-phonegap-plugin"
version="3.4.1"> version="3.6.1">
<name>JPush</name> <name>JPush</name>
<description>JPush for cordova plugin</description> <description>JPush for cordova plugin</description>
@@ -11,6 +11,7 @@
<license>MIT License</license> <license>MIT License</license>
<preference name="APP_KEY" /> <preference name="APP_KEY" />
<preference name="CHANNEL" default="developer-default" />
<engines> <engines>
<engine name="cordova" version=">=3.0" /> <engine name="cordova" version=">=3.0" />
@@ -30,7 +31,17 @@
<param name="ios-package" value="JPushPlugin" /> <param name="ios-package" value="JPushPlugin" />
</feature> </feature>
</config-file> </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/JPushDefine.h" />
<header-file src="src/ios/Plugins/JPushPlugin.h" /> <header-file src="src/ios/Plugins/JPushPlugin.h" />
<source-file src="src/ios/Plugins/JPushPlugin.m" /> <source-file src="src/ios/Plugins/JPushPlugin.m" />
@@ -38,7 +49,7 @@
<source-file src="src/ios/Plugins/AppDelegate+JPush.m" /> <source-file src="src/ios/Plugins/AppDelegate+JPush.m" />
<header-file src="src/ios/lib/JPUSHService.h" /> <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.1.a" framework="true" />
<resource-file src="src/ios/JPushConfig.plist" /> <resource-file src="src/ios/JPushConfig.plist" />
<framework src="CFNetwork.framework" weak="true" /> <framework src="CFNetwork.framework" weak="true" />
@@ -75,40 +86,20 @@
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" /> <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.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_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.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <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.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</config-file> </config-file>
<config-file target="AndroidManifest.xml" parent="/manifest/application" mode="merge"> <config-file target="AndroidManifest.xml" parent="/manifest/application" mode="merge">
<!-- 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>
<!-- 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 核心功能--> <!-- Required SDK 核心功能-->
<service android:name="cn.jpush.android.service.PushService" <service android:name="cn.jpush.android.service.PushService"
@@ -123,10 +114,33 @@
</intent-filter> </intent-filter>
</service> </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核心功能--> <!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.PushReceiver" <receiver android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true" android:enabled="true">
android:exported="false">
<intent-filter android:priority="1000"> <intent-filter android:priority="1000">
<!--Required 显示通知栏 --> <!--Required 显示通知栏 -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
@@ -144,18 +158,46 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 JPush 服务相互拉起的功能 --> <!-- Required SDK核心功能 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 --> <activity android:name="cn.jpush.android.ui.PushActivity"
<service android:name="cn.jpush.android.service.DaemonService" android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:enabled="true" android:configChanges="orientation|keyboardHidden"
android:exported="true"> android:exported="false" >
<intent-filter> <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" /> <category android:name="$PACKAGE_NAME" />
</intent-filter> </intent-filter>
</service> </activity>
<!-- 通知广播接收器 --> <!-- 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">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</receiver>
<!-- 插件通知广播接收器 -->
<receiver <receiver
android:name="cn.jiguang.cordova.push.JPushReceiver" android:name="cn.jiguang.cordova.push.JPushReceiver"
android:enabled="true"> android:enabled="true">
@@ -169,34 +211,17 @@
</intent-filter> </intent-filter>
</receiver> </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 --> <!-- 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" /> <meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" />
</config-file> </config-file>
<lib-file src="src/android/libs/jpush-android-3.1.1.jar" /> <lib-file src="src/android/libs/jpush-android-3.1.8.jar" />
<source-file src="src/android/JPushReceiver.java" target-dir="app/src/main/java/cn/jiguang/cordova/push" /> <source-file src="src/android/JPushReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/JPushPlugin.java" target-dir="app/src/main/java/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="app/src/main/java/cn/jiguang/cordova/push" /> <source-file src="src/android/JPushEventReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
<resource-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml" <resource-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
target="res/drawable/jpush_richpush_btn_selector.xml" /> target="res/drawable/jpush_richpush_btn_selector.xml" />

View File

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

View File

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

View File

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

@@ -51,11 +51,11 @@ NSDictionary *_launchOptions;
if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]) { if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]) {
UILocalNotification *localNotification = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]; UILocalNotification *localNotification = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
NSDictionary* localNotificationEvent = @{@"content":localNotification.alertBody, localNotificationEvent[@"content"] = localNotification.alertBody;
@"badge": @(localNotification.applicationIconBadgeNumber), localNotificationEvent[@"badge"] = @(localNotification.applicationIconBadgeNumber);
@"extras":localNotification.userInfo, localNotificationEvent[@"extras"] = localNotification.userInfo;
};
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[localNotificationEvent toJsonString]]; [JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[localNotificationEvent toJsonString]];
} }
} }
@@ -158,10 +158,9 @@ NSDictionary *_launchOptions;
userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo]; userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
} else { } else {
UNNotificationContent *content = notification.request.content; UNNotificationContent *content = notification.request.content;
userInfo = [NSMutableDictionary dictionaryWithDictionary:@{@"content": content.body, userInfo[@"content"] = content.body;
@"badge": content.badge, userInfo[@"badge"] = content.badge;
@"extras": content.userInfo userInfo[@"extras"] = content.userInfo;
}];
userInfo[@"identifier"] = notification.request.identifier; userInfo[@"identifier"] = notification.request.identifier;
} }
@@ -177,16 +176,15 @@ NSDictionary *_launchOptions;
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{ -(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
UNNotification *notification = response.notification; UNNotification *notification = response.notification;
NSMutableDictionary *userInfo = nil; NSMutableDictionary *userInfo = @{}.mutableCopy;
if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo]; userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
} else { } else {
UNNotificationContent *content = notification.request.content; UNNotificationContent *content = notification.request.content;
userInfo = [NSMutableDictionary dictionaryWithDictionary:@{@"content": content.body, userInfo[@"content"] = content.body;
@"badge": content.badge, userInfo[@"badge"] = content.badge;
@"extras": content.userInfo userInfo[@"extras"] = content.userInfo;
}];
userInfo[@"identifier"] = notification.request.identifier; userInfo[@"identifier"] = notification.request.identifier;
} }
@@ -195,12 +193,12 @@ NSDictionary *_launchOptions;
} }
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
NSDictionary* localNotificationEvent = @{@"content":notification.alertBody, NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
@"badge": @(notification.applicationIconBadgeNumber), localNotificationEvent[@"content"] = notification.alertBody;
@"extras":notification.userInfo, 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 { - (void)applicationWillEnterForeground:(UIApplication *)application {

View File

@@ -395,13 +395,14 @@
} }
JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init]; JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
// 0 android
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
if (delay) { if (delay) {
trigger.timeInterval = [delay doubleValue]; trigger.timeInterval = [delay doubleValue] + 0.000001;
} }
} else { } else {
if (delay) { 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. * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
*/ */
#define JPUSH_VERSION_NUMBER 3.0.7 #define JPUSH_VERSION_NUMBER 3.1.1
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@@ -40,6 +40,11 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received 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 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 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 +77,17 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@end @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 +101,16 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识 @property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识
@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo @property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo
@property (nonatomic, copy) NSString *sound; // 声音名称,不设置则为默认声音 @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) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件iOS10以上有效需要传入UNNotificationAttachment对象数组类型
@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识iOS10以上有效可用来对推送进行分组 @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 *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 @end
/*! /*!
* 推送触发方式实体类 * 推送触发方式实体类
* 注dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值如果同时传入值会根据优先级I、II、III使其中一种触发方式生效fireDate为iOS10以下根据时间触发时须传入的参数 * 注dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值如果同时传入值会根据优先级I、II、III使其中一种触发方式生效fireDate为iOS10以下根据时间触发时须传入的参数
@@ -304,23 +324,26 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @abstract 开始记录页面停留 * @abstract 开始记录页面停留
* *
* @param pageName 页面名称 * @param pageName 页面名称
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
*/ */
+ (void)startLogPageView:(NSString *)pageName; + (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*! /*!
* @abstract 停止记录页面停留 * @abstract 停止记录页面停留
* *
* @param pageName 页面 * @param pageName 页面
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
*/ */
+ (void)stopLogPageView:(NSString *)pageName; + (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*! /*!
* @abstract 直接上报在页面的停留时间 * @abstract 直接上报在页面的停留时间
* *
* @param pageName 页面 * @param pageName 页面
* @param seconds 停留的秒数 * @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日志收集 * @abstract 开启Crash日志收集
@@ -375,7 +398,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @abstract 查找推送 (支持iOS10并兼容iOS10以下版本) * @abstract 查找推送 (支持iOS10并兼容iOS10以下版本)
* *
* JPush 2.1.9新接口 * 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 旧的查找推送接口被废弃,使用此接口可以替换 * @discussion 旧的查找推送接口被废弃,使用此接口可以替换
* *
*/ */
@@ -493,6 +516,20 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (void)resetBadge; + (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 日志与其他 /// @name Logs and others 日志与其他
@@ -536,7 +573,6 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (void)setLogOFF; + (void)setLogOFF;
///---------------------------------------------------- ///----------------------------------------------------
///********************下列方法已过期******************** ///********************下列方法已过期********************
///**************请使用新版tag/alias操作接口************** ///**************请使用新版tag/alias操作接口**************
@@ -592,4 +628,11 @@ callbackSelector:(SEL)cbSelector
*/ */
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler; - (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 @end

Binary file not shown.

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

Binary file not shown.

View File

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