Compare commits

...

65 Commits

Author SHA1 Message Date
Hevin
031acb9631 Merge branch 'dev' 2017-10-13 13:11:12 +08:00
Hevin
0ee5f8b1a0 Update iOS SDK to v3.0.7 2017-10-13 13:10:47 +08:00
Hevin
259ec0a03a Update API doc 2017-10-13 13:09:19 +08:00
Hevin
6283cb26f6 Remove deprecated method
setTagsWithAlias
2017-10-13 10:12:16 +08:00
Hevin
8d098d29b1 Merge branch 'dev' 2017-10-11 14:49:23 +08:00
Hevin
1c3228848b build: v3.2.7 2017-10-11 14:49:07 +08:00
huangminlinux
a9343ac776 Merge pull request #278 from jpush/dev
fix open local notification to launch app event bug
2017-10-11 01:43:19 -05:00
huangminlinux
585e2a5084 fix open local notification to launch app event bug 2017-10-11 14:28:56 +08:00
huangminlinux
de58071773 Merge pull request #277 from jpush/dev
remove jpush.startLocalNotification event in iOS docs
2017-10-10 22:30:56 -05:00
huangminlinux
c726477cfb remove jpush.startLocalNotification event in iOS docs 2017-10-11 11:29:40 +08:00
huangminlinux
13341fd68a Merge pull request #276 from jpush/dev
Dev
2017-10-10 22:28:05 -05:00
huangminlinux
3f00143a5a update doc remove startLocalNotification event 2017-10-11 11:26:46 +08:00
huangminlinux
f5ea2b5b10 ios add jpush.receiveRegistrationId event 2017-10-11 11:15:13 +08:00
Hevin
edf29bbc8d Merge branch 'dev' 2017-09-28 10:25:03 +08:00
Hevin
266d0cb28f Add JPushEventReceiver in manifest 2017-09-28 10:22:40 +08:00
Hevin
ae54960da4 Merge branch 'dev' 2017-09-26 18:28:44 +08:00
Hevin
9f156727e7 Remove unused code 2017-09-26 17:51:25 +08:00
Hevin
155f1e2f6c Update Android SDK to v3.0.9 2017-09-26 17:48:18 +08:00
Hevin
9680e685e3 Remove unused console.log 2017-09-25 12:33:08 +08:00
Hevin
ea6011635f Merge branch 'dev' 2017-09-25 12:32:36 +08:00
Hevin
2eefd1c247 Fixed android api doc 2017-09-25 12:32:27 +08:00
Hevin
0829104534 Merge branch 'dev' 2017-09-23 09:11:34 +08:00
Hevin
fa256bfb46 Format api doc 2017-09-23 09:11:21 +08:00
Hevin
592d5a5fb9 Merge branch 'dev' 2017-09-22 21:16:11 +08:00
Hevin
83293656da Optimize api doc 2017-09-22 21:15:37 +08:00
Hevin
4753174bda Merge branch 'dev' 2017-09-22 20:24:21 +08:00
Hevin
8a55aaa429 Update README 2017-09-22 20:13:25 +08:00
Hevin
b5f32e5107 Update example 2017-09-22 20:13:15 +08:00
Hevin
7afb705555 Update tag & alias api 2017-09-22 20:08:37 +08:00
Hevin
e71c6f3505 build: v3.2.4 2017-09-22 16:23:21 +08:00
Hevin
ff65c09d4e Update tag & alias api of iOS 2017-09-22 16:12:23 +08:00
Hevin
8398bb56f1 Improve example 2017-09-22 16:06:44 +08:00
Hevin
291aa7b8bf Update tag & alias methods 2017-09-21 19:20:53 +08:00
Hevin
5c00243986 Update JPUSHService.h to v3.0.6 2017-09-20 19:03:31 +08:00
Hevin
3ce2babd9b Add new tag and alias methods 2017-09-19 17:48:22 +08:00
Hevin
a27cc445ee Update Android sdk to v3.0.8 2017-09-19 17:46:49 +08:00
Hevin
3f077e32fd Merge branch 'dev' 2017-09-19 14:33:24 +08:00
Hevin
e9ddd798ad Add FAQ 2017-09-19 14:33:06 +08:00
Hevin
5c569d00da Merge branch 'dev' 2017-09-08 14:32:18 +08:00
Hevin
5fca83c8b7 Optimize iOS API doc 2017-09-08 14:17:24 +08:00
Hevin
d50b74cfab Add FAQ of Android 2017-09-08 11:04:31 +08:00
Hevin
c7bc0ea4c2 Remove unused doc 2017-09-08 11:04:10 +08:00
Hevin
c5f7963425 Merge branch 'dev' 2017-07-21 14:15:57 +08:00
Hevin
021725e054 Add janalytics 2017-07-21 14:11:24 +08:00
Hevin
a4eaf51455 Merge branch 'dev' 2017-07-21 14:00:30 +08:00
Hevin
5d27dca472 Foramt README 2017-07-21 13:53:07 +08:00
Hevin
09f98f7c38 Update version number to 3.2.3 2017-07-21 13:52:54 +08:00
Hevin
7b1a77aecb Update ios sdk to 3.0.6 2017-07-21 13:52:37 +08:00
Hevin
04fae7d538 Merge branch 'dev' 2017-07-12 10:16:49 +08:00
Hevin
0436cfcf3e Update version to 3.2.2 2017-07-12 10:16:10 +08:00
huangminlinux
3c70127405 fix notification in backgroup bug 2017-07-12 10:14:50 +08:00
Hevin
8e087e102a Merge branch 'dev' 2017-07-07 11:26:20 +08:00
Hevin
9f5fccefec Update version to 3.2.1 2017-07-07 11:26:04 +08:00
Hevin
be07c7383b Update setTagsWithAlias callback. 2017-07-07 11:23:56 +08:00
huangminlinux
2df6ea47a8 fix setTags/Alias bug 2017-07-07 11:21:14 +08:00
Hevin
35c09c0c92 Merge branch 'dev' 2017-07-04 17:51:51 +08:00
Hevin
c72cde6632 Add new qq group & how to custom notification sound. 2017-07-04 17:43:24 +08:00
Hevin
f0a87962e7 Merge branch 'dev' 2017-06-30 15:44:35 +08:00
Hevin
f31881d88a Add install note. 2017-06-30 15:43:58 +08:00
Hevin
31eef706e4 Update version number 2017-06-30 15:43:38 +08:00
Hevin
2cf2bcf970 Rm ios hook 2017-06-30 15:41:14 +08:00
Hevin
5d42764438 Merge branch 'master' into dev 2017-06-30 10:57:54 +08:00
Hevin
a5a03a3214 Merge pull request #249 from snipking/master
check does `com.apple.Push` attribute exist in .pbxproj
2017-06-30 10:52:56 +08:00
DerekChia jingqiang.jia@hand-china.com
7b70564f82 add: check does com.apple.Push attribute exist in .pbxproj to avoid not found error. 2017-06-29 15:15:12 +08:00
DerekChia jingqiang.jia@hand-china.com
6059f546f6 Merge remote-tracking branch 'jpush/master' 2017-06-29 15:07:28 +08:00
22 changed files with 1841 additions and 1522 deletions

View File

@@ -1,64 +1,83 @@
# JPush PhoneGap / Cordova Plugin # 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) [![Build Status](https://travis-ci.org/jpush/jpush-phonegap-plugin.svg?branch=master)](https://travis-ci.org/jpush/jpush-phonegap-plugin)
[![QQ Group](https://img.shields.io/badge/QQ%20Group-413602425-red.svg)]() [![release](https://img.shields.io/badge/release-3.2.8-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![release](https://img.shields.io/badge/release-3.1.9-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) [![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) [![weibo](https://img.shields.io/badge/weibo-JPush-blue.svg)](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)
支持 iOS, Android Cordova 推送插件。 极光官方支持的 cordova 推送插件。
> 如需要 IM 功能的插件,可关注 [JMessage PhoneGap Plugin](https://github.com/jpush/jmessage-phonegap-plugin)。
> 如需要短信验证码功能的插件,可关注 [JSMS Cordova Plugin](https://github.com/jpush/cordova-plugin-jsms)。 - 如需要 IM 功能的插件,可关注 [jmessage-phonegap-plugin](https://github.com/jpush/jmessage-phonegap-plugin)
- 如需要短信验证码功能插件,可关注 [cordova-plugin-jsms](https://github.com/jpush/cordova-plugin-jsms)
> QQ 交流群413602425。 - 如需要统计分析功能插件,可关注 [cordova-plugin-janalytics](https://github.com/jpush/cordova-plugin-janalytics)
## Install ## Install
- 通过 Cordova Plugins 安装,要求 Cordova CLI 5.0+ - 通过 Cordova Plugins 安装,要求 Cordova CLI 5.0+
``` ```shell
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey
``` ```
- 或直接通过 url 安装: - 或直接通过 url 安装:
``` ```shell
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey
``` ```
- 或下载到本地安装: - 或下载到本地安装:
``` ```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
``` ```
> 如果你的 Cordova 版本 >= v7.0.0,在安装插件和添加 platform 时,在命令行最后加上 --nofetch否则极大可能会报错 > 在使用 Xcode 8 调试 iOS 项目时,需要先在项目配置界面的 Capabilities 中打开 Push Notifications 开关
## Usage ## Usage
### API ### API
- [Common](/doc/Common_detail_api.md) - [Common](/doc/Common_detail_api.md)
- [iOS](/doc/iOS_API.md) - [iOS](/doc/iOS_API.md)
- [Android](/doc/Android_detail_api.md) - [Android](/doc/Android_detail_api.md)
### Demo ### Demo
插件项目中包含一个简单的 Demo。若想参考可以在 */example* 文件夹内找到并拷贝以下文件: 插件项目中包含一个简单的 Demo。若想参考可以在 */example* 文件夹内找到并拷贝以下文件:
example/index.html -> www/index.html example/index.html -> www/index.html
example/css/* -> www/css example/css/* -> www/css
example/js/* -> www/js example/js/* -> www/js
### 关于 PhoneGap build 云服务 ### 关于 PhoneGap build 云服务
该项目基于 Cordova 实现,目前无法使用 PhoneGap build 云服务进行打包,建议使用本地环境进行打包。 该项目基于 Cordova 实现,目前无法使用 PhoneGap build 云服务进行打包,建议使用本地环境进行打包。
## FAQ ## FAQ
> 如果遇到了疑问,请优先参考 Demo 和 API 文档。若还无法解决,可到 [Issues](https://github.com/jpush/jpush-phonegap-plugin/issues) 提问。 > 如果遇到了疑问,请优先参考 Demo 和 API 文档。若还无法解决,可到 [Issues](https://github.com/jpush/jpush-phonegap-plugin/issues) 提问。
### Android ### Android
#### 在 Eclipse 中 import 工程之后出现:*Type CallbackContext cannot be resolved to a type* #### 在 Eclipse 中 import 工程之后出现:*Type CallbackContext cannot be resolved to a type*
右键单击工程名 -> Build Path -> Config Build Path -> Projects -> 选中工程名称 -> CordovaLib -> 点击 add。 右键单击工程名 -> Build Path -> Config Build Path -> Projects -> 选中工程名称 -> CordovaLib -> 点击 add。
#### 无法获取到 Registration Id
检查 AppKey 和应用包名是否对应、是否调用了 `init` 方法。
#### 如何自定义通知声音?
Android 因为各 Rom 的高度定制化,不像 iOS 一样能有一个统一的管理,如果在 Android 中想自定义通知铃声,推荐通过 JPush 推送自定义
消息,之后在 `jpush.receiveMessage` 事件监听中通过 [Cordova Local-Notification Plugin](https://github.com/katzer/cordova-plugin-local-notifications) 触发通知,再配合 [Cordova Background Plugin](https://github.com/katzer/cordova-plugin-background-mode) 插件保证应用的后台运行。
#### 如果让通知内容像 iOS 一样换行展示?
[#267](https://github.com/jpush/jpush-phonegap-plugin/issues/267)
#### 关闭 App 后收不到通知 #### 关闭 App 后收不到通知
Android 的推送通过长连接的方式实现,只有在连接保持的情况下才能收到通知。而有的第三方 ROM 会限制一般应用服务的自启动,也就是 Android 的推送通过长连接的方式实现,只有在连接保持的情况下才能收到通知。而有的第三方 ROM 会限制一般应用服务的自启动,也就是
在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。 在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。
@@ -75,7 +94,7 @@ Android 的推送通过长连接的方式实现,只有在连接保持的情况
#### 打包时遇到 i386 打包失败怎么办? #### 打包时遇到 i386 打包失败怎么办?
``` ```shell
cordova platform update ios cordova platform update ios
``` ```
@@ -91,22 +110,26 @@ cordova platform update ios
- IsIDFA是否使用 IDFA 启动 SDK。 - IsIDFA是否使用 IDFA 启动 SDK。
#### 刚集成完插件收不到推送怎么办? #### 刚集成完插件收不到推送怎么办?
请首先按照正确方式再次配置证书、描述文件,具体可参考 [iOS 证书设置指南](https://docs.jiguang.cn/jpush/client/iOS/ios_cer_guide/)。 请首先按照正确方式再次配置证书、描述文件,具体可参考 [iOS 证书设置指南](https://docs.jiguang.cn/jpush/client/iOS/ios_cer_guide/)。
#### iOS 集成插件白屏、或无法启动插件、或打包报错无法找到需要引入的文件怎么办? #### iOS 集成插件白屏、或无法启动插件、或打包报错无法找到需要引入的文件怎么办
按照以下步骤逐个尝试: 按照以下步骤逐个尝试:
- 升级至 Xcode 8 - 升级至最新版本 Xcode
- 删除插件、再重装插件 - 删除插件、再重装插件(先使用 `cordova platform add ios`,后使用 `cordova plugin add`
- 先使用 `cordova platform add ios`,后使用 `cordova plugin add`
## Support ## Support
- QQ 群413602425
- QQ 群413602425 / 524248013
- [JPush 官网文档](https://docs.jiguang.cn/jpush/guideline/intro/) - [JPush 官网文档](https://docs.jiguang.cn/jpush/guideline/intro/)
- [极光社区](http://community.jiguang.cn/) - [极光社区](http://community.jiguang.cn/)
## Contribute ## Contribute
Please contribute! [Look at the issues](https://github.com/jpush/jpush-phonegap-plugin/issues). Please contribute! [Look at the issues](https://github.com/jpush/jpush-phonegap-plugin/issues).
## License ## License
MIT © [JiGuang](/license) MIT © [JiGuang](/license)

View File

@@ -1,19 +1,13 @@
# Android API 简介 # Android API 简介
- [注册成功事件](#注册成功事件) - [注册成功事件](#注册成功事件)
- [接收通知时获得通知的内容](#接收通知时获得通知的内容)
- [打开通知时获得通知的内容](#打开通知时获得通知的内容)
- [收到自定义消息时获取消息的内容](#收到自定义消息时获取消息的内容)
- [获取集成日志(同时适用于 iOS](#获取集成日志同时适用于-ios) - [获取集成日志(同时适用于 iOS](#获取集成日志同时适用于-ios)
- [接收消息和点击通知事件](#接收消息和点击通知事件)
- [统计分析](#统计分析)
- [清除通知](#清除通知) - [清除通知](#清除通知)
- [设置允许推送时间](#设置允许推送时间) - [设置允许推送时间](#设置允许推送时间)
- [设置通知静默时间](#设置通知静默时间) - [设置通知静默时间](#设置通知静默时间)
- [通知栏样式定制](#通知栏样式定制) - [通知栏样式定制](#通知栏样式定制)
- [设置保留最近通知条数](#设置保留最近通知条数) - [设置保留最近通知条数](#设置保留最近通知条数)
- [本地通知](#本地通知) - [本地通知](#本地通知)
- [富媒体页面 JavaScript 回调 API](#富媒体页面-javascript-回调-api)
## 注册成功事件 ## 注册成功事件
### jpush.receiveRegistrationId ### jpush.receiveRegistrationId
@@ -21,37 +15,13 @@
就会触发这个事件(注意只有第一次会触发该事件,之后如果想要取到 registrationId可以直接调用 *getRegistrationID* 方法)。 就会触发这个事件(注意只有第一次会触发该事件,之后如果想要取到 registrationId可以直接调用 *getRegistrationID* 方法)。
#### 代码示例 #### 代码示例
```Javascript
```js
document.addEventListener('jpush.receiveRegistrationId', function (event) { document.addEventListener('jpush.receiveRegistrationId', function (event) {
console.log(event.registrationId) console.log(event.registrationId)
}, false) }, false)
``` ```
## 接收通知时获得通知的内容
- 内容:
window.plugins.jPushPlugin.receiveNotification.alert
- 标题:
window.plugins.jPushPlugin.receiveNotification.title
- 附加字段:
window.plugins.jPushPlugin.receiveNotification.extras.yourKey
## 打开通知时获得通知的内容
- 内容:
window.plugins.jPushPlugin.openNotification.alert
- 标题:
window.plugins.jPushPlugin.openNotification.title
- 附加字段
window.plugins.jPushPlugin.openNotification.extras.yourKey
## 收到自定义消息时获取消息的内容
- 内容:
window.plugins.jPushPlugin.receiveMessage.message
- 附加字段:
window.plugins.jPushPlugin.receiveMessage.extras.yourKey
## 获取集成日志(同时适用于 iOS ## 获取集成日志(同时适用于 iOS
### API - setDebugMode ### API - setDebugMode
@@ -60,88 +30,15 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.setDebugMode(mode) ```js
window.JPush.setDebugMode(mode)
```
#### 参数说明 #### 参数说明
- mode: - mode:
- true 显示集成日志。 - true 显示集成日志。
- false 不显示集成日志。 - false 不显示集成日志。
## 接收消息和点击通知事件
### API - receiveMessageInAndroidCallback
用于 Android 收到应用内消息的回调函数(请注意和通知的区别),该函数不需要主动调用。
#### 接口定义
window.plugins.jPushPlugin.receiveMessageInAndroidCallback(data)
#### 参数说明
- data: 接收到的 js 字符串,包含的 key:value 请进入该函数体查看。
### API - openNotificationInAndroidCallback
当点击 Android 手机的通知栏进入应用程序时,会调用这个函数,这个函数不需要主动调用,是作为回调函数来用的。
#### 接口定义
window.plugins.jPushPlugin.openNotificationInAndroidCallback(data)
#### 参数说明
- data: js 字符串。
## 统计分析
### API - onResume / onPause
这是一个 Android Local API不是 js 的 API请注意。
本 API 用于“用户使用时长”,“活跃用户”,“用户打开次数”的统计,并上报到服务器,在 Portal 上展示给开发者。
#### 接口定义
public static void onResume(final Activity activity)
public static void onPause(final Activity activity)
#### 参数说明
- Activity: 当前所在的 Activity。
#### 调用说明
应在所有的 Activity 的 onResume / onPause 方法里调用。
#### 代码示例
@Override
protected void onResume() {
super.onResume();
JPushInterface.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
JPushInterface.onPause(this);
}
### API - setStatisticsOpen
用于在 js 中控制是否打开应用的统计分析功能,但如果已经添加了上面的 onResume / onPause 方法,
就不能再通过这个方法来控制统计分析功能了。
#### 接口定义
window.plugins.jPushPlugin.setStatisticsOpen(boolean)
#### 参数说明
- boolean:
- true: 打开统计分析功能。
- false: 关闭统计分析功能。
### API - reportNotificationOpened ### API - reportNotificationOpened
@@ -149,13 +46,14 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.reportNotificationOpened(msgID) ```js
window.JPush.reportNotificationOpened(msgID)
```
#### 参数说明 #### 参数说明
- msgID: 收到的通知或者自定义消息的 id。 - msgID: 收到的通知或者自定义消息的 id。
## 清除通知 ## 清除通知
### API - clearAllNotification ### API - clearAllNotification
@@ -166,34 +64,44 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.clearAllNotification() ```js
window.JPush.clearAllNotification()
```
### API - clearNotificationById ### API - clearNotificationById
根据通知 Id 清除通知(包括本地通知)。 根据通知 Id 清除通知(包括本地通知)。
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.clearNotificationById(notificationId) ```js
window.JPush.clearNotificationById(notificationId)
```
#### 参数说明 #### 参数说明
- notificationIdint通知的 id。 - notificationIdint通知的 id。
#### 代码示例 #### 代码示例
window.plugins.jPushPlugin.clearNotificationById(1) ```js
window.JPush.clearNotificationById(1)
```
## 设置允许推送时间 ## 设置允许推送时间
### API - setPushTime ### API - setPushTime
默认情况下用户在任何时间都允许推送。即任何时候有推送下来,客户端都会收到,并展示。 默认情况下用户在任何时间都允许推送。即任何时候有推送下来,客户端都会收到,并展示。
开发者可以调用此 API 来设置允许推送的时间。 开发者可以调用此 API 来设置允许推送的时间。
如果不在该时间段内收到消息,当前的行为是:推送到的通知会被扔掉。 如果不在该时间段内收到消息,当前的行为是:推送到的通知会被扔掉。
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.setPushTime(days, startHour, endHour) ```js
window.JPush.setPushTime(days, startHour, endHour)
```
#### 参数说明 #### 参数说明
- days: 数组0 表示星期天1 表示星期一以此类推7天制数组中值的范围为 0 到 6 )。 - days: 数组0 表示星期天1 表示星期一以此类推7天制数组中值的范围为 0 到 6 )。
数组的值为 null, 表示任何时间都可以收到消息和通知,数组的 size 为 0则表示任何时间都收不到消息和通知。 数组的值为 null, 表示任何时间都可以收到消息和通知,数组的 size 为 0则表示任何时间都收不到消息和通知。
- startHour: 整形,允许推送的开始时间 24 小时制startHour 的范围为 0 到 23 - startHour: 整形,允许推送的开始时间 24 小时制startHour 的范围为 0 到 23
@@ -208,7 +116,9 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.setSilenceTime(startHour, startMinute, endHour, endMinute) ```js
window.JPush.setSilenceTime(startHour, startMinute, endHour, endMinute)
```
#### 参数说明 #### 参数说明
@@ -217,9 +127,13 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
- endHour: 整形,静音时段的结束时间 - 小时 24小时制范围0~23 )。 - endHour: 整形,静音时段的结束时间 - 小时 24小时制范围0~23 )。
- endMinute: 整形,静音时段的结束时间 - 分钟范围0~59 )。 - endMinute: 整形,静音时段的结束时间 - 分钟范围0~59 )。
## 通知栏样式定制 ## 通知栏样式定制
目前 REST API 与极光控制台均已支持「大文本通知栏样」、「文本条目通知栏样式」和「大图片通知栏样式」。可直接推送对应样式
的通知。
此外也能够通过设置 Notification 的 flag 来控制通知提醒方式,具体用法可参考 [后台 REST API](https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#notification)。
### API - setBasicPushNotificationBuilder, setCustomPushNotificationBuilder ### API - setBasicPushNotificationBuilder, setCustomPushNotificationBuilder
当用户需要定制默认的通知栏样式时,则可调用此方法。 当用户需要定制默认的通知栏样式时,则可调用此方法。
@@ -238,9 +152,10 @@ JPush SDK 提供了 2 个用于定制通知栏样式的构建类:
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.setBasicPushNotificationBuilder() ```js
window.plugins.jPushPlugin.setCustomPushNotificationBuilder() window.JPush.setBasicPushNotificationBuilder()
window.JPush.setCustomPushNotificationBuilder()
```
## 设置保留最近通知条数 ## 设置保留最近通知条数
@@ -252,13 +167,14 @@ JPush SDK 提供了 2 个用于定制通知栏样式的构建类:
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.setLatestNotificationNum(num) ```js
window.JPush.setLatestNotificationNum(num)
```
#### 参数说明 #### 参数说明
- num: 保存的条数。 - num: 保存的条数。
## 本地通知 ## 本地通知
### API - addLocalNotification, removeLocalNotification, clearLocalNotifications ### API - addLocalNotification, removeLocalNotification, clearLocalNotifications
本地通知 API 不依赖于网络,无网条件下依旧可以触发。 本地通知 API 不依赖于网络,无网条件下依旧可以触发。
@@ -271,77 +187,17 @@ JPush SDK 提供了 2 个用于定制通知栏样式的构建类:
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.addLocalNotification(builderId, content, title, ```js
notificaitonID, broadcastTime, extras) window.JPush.addLocalNotification(builderId, content, title, notificationID, broadcastTime, extras)
window.plugins.jPushPlugin.removeLocalNotification(notificationID) window.JPush.removeLocalNotification(notificationID)
window.plugins.jPushPlugin.clearLocalNotifications() // 同时适用于 iOS window.JPush.clearLocalNotifications() // 同时适用于 iOS
```
#### 参数说明 #### 参数说明
- builderId: 设置本地通知样式。 - builderId: 设置本地通知样式。
- content: 设置本地通知的 content。 - content: 设置本地通知的 content。
- title: 设置本地通知的 title。 - title: 设置本地通知的 title。
- notificaitonID: 设置本地通知的 ID不要为 0 - notificationID: 设置本地通知的 ID不要为 0
- broadcastTime: 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒。 - broadcastTime: 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒。
- extras: 设置额外的数据信息 extras 为 json 字符串。 - extras: 设置额外的数据信息 extras 为 json 字符串。
## 富媒体页面 JavaScript 回调 API
富媒体推送通知时用户可以用自定义的Javascript 函数来控制页面,如关闭当前页面,点击按钮跳转到指定的 Activity通知应用程序做一些指定的动作等。
此 API 提供的回调函数包括:关闭当前页面、打开应用的主 Activity、根据 Activity 名字打开对应的 Activity、以广播的形式传递页面参数到应用程序等功能。
### API - 关闭当前页面
JPushWeb.close(); // 在富文本 HTML 页面中调用后会关闭当前页面。
### API - 打开主 Activity
JPushWeb.startMainActivity(String params);
在HTML中调用此函数后,会打开程序的主Activity 并在对应的 Intent 传入参数 ”params“ Key 为 JPushInterface.EXTRA_EXTRA。
对应 Activity 获取 params 示例代码:
Intent intent = getIntent();
if (null != intent ) {
String params = intent.getStringExtra(JPushInterface.EXTRA_EXTRA);
}
### API - 触发应用中的操作
JPushWeb.triggerNativeAction(String params);
调用了该方法后需要在 MyReceiver.java 中实现后面的业务逻辑:
if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
Log.d(TAG, "用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
//在这里根据 JPushInterface.EXTRA_EXTRA 的内容触发客户端动作比如打开新的Activity 、打开一个网页等。
}
#### 代码示例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>JPush Webview Test</title>
<script>
function clickButton() {
JPushWeb.close();
}
function openUrl() {
var json = "{'action':'open', 'url':'www.jpush.cn'}";
JPushWeb.triggerNativeAction(json);
JPushWeb.close(); //客服端在广播中收到json 后可以打开对应的URL。
}
</script>
</head>
<body>
<button onclick="javascript:clickButton(this);return false;">Close</button>
<button onclick="javascript:JPushWeb.startMainActivity('test - startMainActivity');return false;">StartMainActivity</button>
<button onclick="javascript:JPushWeb.triggerNativeAction('test - triggerNativeAction');Javascript:JPushWeb.close();">triggerNativeAction and Close current webwiew</button>
<button onclick="javascript:JPushWeb.startActivityByName('com.example.jpushdemo.TestActivity','test - startActivityByName');">startActivityByName</button>
<button onclick="javascript:openUrl();">open a url</button>
</body>
</html>

View File

@@ -1,135 +0,0 @@
#Android 手动安装
下载 JPush PhoneGap 插件,并解压缩,标记插件目录为:`$JPUSH_PLUGIN_DIR`
1. 复制:$JPUSH_PLUGIN_DIR/src/android/*.java 到 cn/jpush/phonega/ 目录下(即cn.jpush.phonegap 的包下)
2. 复制:$JPUSH_PLUGIN_DIR/src/android/armeabi/libjpush.so 到 lib/armeabi/
3. 复制:$JPUSH_PLUGIN_DIR/src/android/jpush-sdk-release2.0.6.jar 到 lib/
4. 复制:$JPUSH_PLUGIN_DIR/src/android/test_notification_layout.xml 到 res/layout/
5. 复制:$JPUSH_PLUGIN_DIR/src/android/jpush_notification_icon.png 到 res/drawable/
6. 复制:$JPUSH_PLUGIN_DIR/www/JPushPlugin.js 到 assets/www/plugins/cn.jpush.phonegap.JPushPlugin.www/
和 platform_www/plugins/cn.jpush.phonegap.JPushPlugin/www/
并在 JPushPlugin.js 文件的代码外添加:
cordova.define("cn.jpush.phonegap.JPushPlugin.JPushPlugin", function(require, exports, module) {
// 代码
});
7. 修改 AndroidManifest.xml 在 manifest 节点下添加以下权限
<!-- Required 一些系统要求的权限,如访问网络等-->
<uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"/>
<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.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.SYSTEM_ALERT_WINDOW"/>
<permission
android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
android:protectionLevel="signature"/>
7. 修改 AndroidManifest.xml 在 manifest/application 节点下添加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>
<!-- 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"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER"/>
<action android:name="cn.jpush.android.intent.REPORT"/>
<action android:name="cn.jpush.android.intent.PushService"/>
<action android:name="cn.jpush.android.intent.PUSH_TIME"/>
</intent-filter>
</service>
<!-- Required SDK 核心功能-->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
<!--Required 显示通知栏 -->
<category android:name="$PACKAGE_NAME"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
<!-- Optional -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
<!-- User defined. For test only 用户自定义的广播接收器 -->
<receiver
android:name="cn.jpush.phonegap.MyReceiver"
android:enabled="true">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
<!-- Required 显示通知栏 -->
<category android:name="$PACKAGE_NAME"/>
</intent-filter>
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION"/>
<!-- Required 用户注册 SDK 的intent -->
<action android:name="cn.jpush.android.intent.UNREGISTRATION"/>
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED"/>
<!-- Required 用户接收 SDK 消息的intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/>
<!-- Required 用户接收 SDK 通知栏信息的intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/>
<!-- Required 用户打开自定义通知栏的intent -->
<action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"/>
<!-- Optional 用户接受 Rich Push Javascript 回调函数的intent -->
<category android:name="$PACKAGE_NAME"/>
</intent-filter>
</receiver>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.AlarmReceiver"/>
<!-- 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_APPKEY" android:value="299d0fee887820e7d90a68b2"/>

View File

@@ -23,87 +23,88 @@
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.init() ```js
window.JPush.init()
```
### API - stopPush ### API - stopPush
+ Android 平台:
+ 开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。 - Android:
- 开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
- 调用了本 API 后JPush 推送服务完全被停止,具体表现为:
- JPush Service 不在后台运行。
- 收不到推送消息。
- 不能通过 `init` 方法恢复,而需要调用 `resumePush` 恢复。
- 极光推送其他所有的 API 调用都无效。
+ 调用了本 API 后JPush 推送服务完全被停止,具体表现为: - iOS:
- 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。**建议设置一个 UI 界面, 提醒用户在 设置-通知 中关闭推送服务**。
+ JPush Service 不在后台运行。
+ 收不到推送消息。
+ 不能通过 JPushInterface.init 恢复,需要调用 resumePush 恢复。
+ 极光推送所有的其他 API 调用都无效。
+ iOS 平台:
+ 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。**建议设置一个 UI 界面, 提醒用户在 设置-通知 中关闭推送服务**。
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.stopPush() ```js
window.JPush.stopPush()
```
### API - resumePush ### API - resumePush
恢复推送服务。调用了此 API 后: 恢复推送服务。调用了此 API 后:
+ Android 平台: - Android 平台:
- 极光推送完全恢复正常工作。
+ 极光推送完全恢复正常工作。 - iOS 平台:
- 重新去 APNS 注册。
+ iOS 平台:
+ 重新去 APNS 注册。
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.resumePush() ```js
window.JPush.resumePush()
```
### API - isPushStopped ### API - isPushStopped
+ Android 平台: - Android 平台:
- 用来检查 Push Service 是否已经被停止。
+ 用来检查 Push Service 是否已经被停止。 - iOS 平台:
- 平台检查推送服务是否注册。
+ iOS 平台:
+ 平台检查推送服务是否注册。
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.isPushStopped(callback) ```js
window.JPush.isPushStopped(callback)
```
#### 参数说明 #### 参数说明
+ callback: 回调函数,用来通知 JPush 的推送服务是否开启。 - callback: 回调函数,用来通知 JPush 的推送服务是否开启。
#### 代码示例 #### 代码示例
window.plugins.jPushPlugin.isPushStopped(function (result) { ```js
if (result == 0) { window.JPush.isPushStopped(function (result) {
// 开启 if (result == 0) {
} else { // 开启
// 关闭 } else {
} // 关闭
}) }
})
```
## 开启 Debug 模式 ## 开启 Debug 模式
### API - setDebugMode ### API - setDebugMode
用于开启 Debug 模式,显示更多的日志信息。 用于开启 Debug 模式,显示更多的日志信息。
#### 接口定义 #### 代码示例
JPushPlugin.prototype.setDebugMode(isOpen) ```js
window.JPush.setDebugMode(true)
```
#### 参数说明 #### 参数说明
- isOpen: true开启 Debug 模式false关闭 Debug 模式,不显示错误信息之外的日志信息。 - isOpen: true开启 Debug 模式false关闭 Debug 模式,不显示错误信息之外的日志信息。
#### 代码示例
window.plugins.jPushPlugin.setDebugMode(true)
## 获取 RegistrationID ## 获取 RegistrationID
### API - getRegistrationID ### API - getRegistrationID
@@ -117,7 +118,9 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
#### 接口定义 #### 接口定义
JPushPlugin.prototype.getRegistrationID(callback) ```js
window.JPush.getRegistrationID(callback)
```
#### 返回值 #### 返回值
@@ -125,14 +128,14 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
#### 代码示例 #### 代码示例
window.plugins.jPushPlugin.getRegistrationID(function(data) { ```js
console.log("JPushPlugin:registrationID is " + data) window.JPush.getRegistrationID(function(rId) {
}) console.log("JPushPlugin:registrationID is " + rId)
})
```
## 设置别名与标签 ## 设置别名与标签
### API - setTagsWithAlias, setTags, setAlias
提供几个相关 API 用来设置别名alias与标签tags 提供几个相关 API 用来设置别名alias与标签tags
这几个 API 可以在 App 里任何地方调用。 这几个 API 可以在 App 里任何地方调用。
@@ -159,54 +162,200 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
举例: game, old_page, women。 举例: game, old_page, women。
#### 接口定义 > 以下方法的错误回调均包含 `sequence` 和 `code` 属性。其中 code 为错误码,具体定义可参考[官方文档](https://docs.jiguang.cn/jpush/client/Android/android_api/#_133)。
```js ### setAlias
JPushPlugin.prototype.setTagsWithAlias(tags, alias, successCallback, errorCallback)
JPushPlugin.prototype.setTags(tags, successCallback, errorCallback)
JPushPlugin.prototype.setAlias(alias, successCallback, errorCallback)
```
#### 参数说明 设置别名。注意这个接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
* tags:
* 参数类型为数组。
* nil 此次调用不设置此值。
* 空集合表示取消之前的设置。
* 每次调用至少设置一个 tag覆盖之前的设置不是新增。
* 有效的标签组成:字母(区分大小写)、数字、下划线、汉字。
* 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 100 个 tag但总长度不得超过1K字节判断长度需采用 UTF-8 编码)。
* 单个设备最多支持设置 100 个 tagApp 全局 tag 数量无限制。
* alias:
* 参数类型为字符串。
* nil 此次调用不设置此值。
* 空字符串 "")表示取消之前的设置。
* 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
* 限制alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
#### 代码示例 #### 代码示例
```js ```js
window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () { window.JPush.setAlias({ sequence: 1, alias: 'your_alias' },
// success callback. (result) => {
}, function (errorMsg) { var sequence = result.sequence
// errorMsg 格式为 'errorCode: error message'. var alias = result.alias
}) }, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
``` ```
#### 错误码定义 #### 参数说明
|Code|描述 |详细解释 | - sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
|----|:----------------------------------------|:--------| - alias: string
|6001|无效的设置tag / alias 不应参数都为 null。 | | - 每次调用设置有效的别名将覆盖之前的设置。
|6002|设置超时。 |建议重试。| - 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|。
|6003|alias 字符串不合法。 |有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。| - 限制alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
|6004|alias超长。 |最多 40个字节中文 UTF-8 是 3 个字节。|
|6005|某一个 tag 字符串不合法。 |有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。|
|6006|某一个 tag 超长。 |一个 tag 最多 40个字节中文 UTF-8 是 3 个字节。|
|6007|tags 数量超出限制,最多 100 个。 |这是一台设备的限制,一个应用全局的标签数量无限制。|
|6008|tag / alias 超出总长度限制。 |总长度最多 1K 字节。|
|6011|10s内设置 tag 或 alias 大于 3 次。 |短时间内操作过于频繁。|
### deleteAlias
删除别名。
#### 代码示例
```js
window.JPush.deleteAlias({ sequence: 1 },
(result) => {
var sequence = result.sequence
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
### getAlias
查询别名。
#### 代码示例
```js
window.JPush.getAlias({ sequence: 1 },
(result) => {
var sequence = result.sequence
var alias = result.alias
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
### setTags
设置标签。注意这个接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
#### 代码示例
```js
window.JPush.setTags({ sequence: 1, tags: ['tag1', 'tag2'] },
(result) => {
var sequence = result.sequence
var tags = result.tags // 数组类型
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- tags: Array标签数组。
### addTags
新增标签。
#### 代码示例
```js
window.JPush.addTags({ sequence: 1, tags: ['tag1', 'tag2'] },
(result) => {
var sequence = result.sequence
var tags = result.tags // 数组类型
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- tags: Array标签数组。
### deleteTags
删除指定标签。
#### 代码示例
```js
window.JPush.deleteTags({ sequence: 1, tags: ['tag1', 'tag2'] },
(result) => {
var sequence = result.sequence
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- tags: Array标签数组。
### cleanTags
清除所有标签。
#### 代码示例
```js
window.JPush.cleanTags({ sequence: 1 },
(result) => {
var sequence = result.sequence
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
### getAllTags
获取当前绑定的所有标签。
#### 代码示例
```js
window.JPush.getAllTags({ sequence: 1 },
(result) => {
var sequence = result.sequence
var tags = result.tags
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
### checkTagBindState
查询指定tag与当前用户绑定的状态。
#### 代码示例
```js
window.JPush.checkTagBindState({ sequence: 1, tag: 'tag1' },
(result) => {
var sequence = result.sequence
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- tag: string待查询的 tag。
## 获取点击通知内容 ## 获取点击通知内容
@@ -218,46 +367,52 @@ window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () {
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
document.addEventListener("jpush.openNotification", function (event) { ```js
var alertContent document.addEventListener("jpush.openNotification", function (event) {
if(device.platform == "Android") { var alertContent
alertContent = event.alert if(device.platform == "Android") {
} else { alertContent = event.alert
alertContent = event.aps.alert } else {
} alertContent = event.aps.alert
}, false) }
}, false)
```
> ps点击通知后传递的 json object 保存在 window.plugins.jPushPlugin.openNotification直接访问即可字段示例根据实际推送情况可能略有差别请注意。 > ps点击通知后传递的 json object 保存在 window.JPush.openNotification直接访问即可字段示例根据实际推送情况可能略有差别请注意。
+ Android: - Android:
{ ```json
"title": "title", {
"alert":"ding", "title": "title",
"extras":{ "alert":"ding",
"yourKey": "yourValue", "extras":{
"cn.jpush.android.MSG_ID": "1691785879", "yourKey": "yourValue",
"app": "com.thi.pushtest", "cn.jpush.android.MSG_ID": "1691785879",
"cn.jpush.android.ALERT": "ding", "app": "com.thi.pushtest",
"cn.jpush.android.EXTRA": {}, "cn.jpush.android.ALERT": "ding",
"cn.jpush.android.PUSH_ID": "1691785879", "cn.jpush.android.EXTRA": {},
"cn.jpush.android.NOTIFICATION_ID": 1691785879, "cn.jpush.android.PUSH_ID": "1691785879",
"cn.jpush.android.NOTIFICATION_TYPE": "0" "cn.jpush.android.NOTIFICATION_ID": 1691785879,
} "cn.jpush.android.NOTIFICATION_TYPE": "0"
} }
}
```
+ iOS: - iOS:
{ ```json
"aps":{ {
"badge": 1, "aps": {
"sound": "default", "badge": 1,
"alert": "今天去哪儿" "sound": "default",
}, "alert": "今天去哪儿"
"key1": "value1", },
"key2": "value2", "key1": "value1",
"_j_msgid": 154604475 "key2": "value2",
} "_j_msgid": 154604475
}
```
## 获取通知内容 ## 获取通知内容
@@ -269,49 +424,53 @@ window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () {
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
document.addEventListener("jpush.receiveNotification", function (event) { ```js
var alertContent document.addEventListener("jpush.receiveNotification", function (event) {
if(device.platform == "Android") { var alertContent
alertContent = event.alert if(device.platform == "Android") {
} else { alertContent = event.alert
alertContent = event.aps.alert } else {
} alertContent = event.aps.alert
alert("open Notificaiton:" + alertContent) }
}, false) alert("open Notification:" + alertContent)
}, false)
```
> ps点击通知后传递的 json object 保存在 window.JPush.receiveNotification直接访问即可字段示例根据实际推送情况可能略有差别请注意。
> ps点击通知后传递的 json object 保存在 window.plugins.jPushPlugin.receiveNotification直接访问即可字段示例根据实际推送情况可能略有差别请注意。 - Android:
+ Android: ```json
{
"title": "title",
"alert":"ding",
"extras":{
"yourKey": "yourValue",
"cn.jpush.android.MSG_ID":"1691785879",
"app":"com.thi.pushtest",
"cn.jpush.android.ALERT":"ding",
"cn.jpush.android.EXTRA":{},
"cn.jpush.android.PUSH_ID":"1691785879",
"cn.jpush.android.NOTIFICATION_ID":1691785879,
"cn.jpush.android.NOTIFICATION_TYPE":"0"
}
}
```
{ - iOS:
"title": "title",
"alert":"ding",
"extras":{
"yourKey": "yourValue",
"cn.jpush.android.MSG_ID":"1691785879",
"app":"com.thi.pushtest",
"cn.jpush.android.ALERT":"ding",
"cn.jpush.android.EXTRA":{},
"cn.jpush.android.PUSH_ID":"1691785879",
"cn.jpush.android.NOTIFICATION_ID":1691785879,
"cn.jpush.android.NOTIFICATION_TYPE":"0"
}
}
+ iOS:
{
"aps":{
"badge":1,
"sound":"default",
"alert":"今天去哪儿"
},
"key1":"value1",
"key2":"value2",
"_j_msgid":154604475
}
```json
{
"aps":{
"badge":1,
"sound":"default",
"alert":"今天去哪儿"
},
"key1":"value1",
"key2":"value2",
"_j_msgid":154604475
}
```
## 获取自定义消息推送内容 ## 获取自定义消息推送内容
@@ -319,41 +478,47 @@ window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () {
收到自定义消息时触发这个事件,推荐使用事件的方式传递。 收到自定义消息时触发这个事件,推荐使用事件的方式传递。
但同时保留了 receiveMessageIniOSCallback 的回调函数,兼容以前的代码。 但同时保留了 `receiveMessageIniOSCallback` 的回调函数,兼容以前的代码。
#### 代码示例 #### 代码示例
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
document.addEventListener("jpush.receiveMessage", function (event) { ```js
var message document.addEventListener("jpush.receiveMessage", function (event) {
if(device.platform == "Android") { var message
message = event.message; if(device.platform == "Android") {
} else { message = event.message;
message = event.content; } else {
} message = event.content;
}, false) }
}, false)
```
> ps点击通知后传递的 json object 保存在 window.plugins.jPushPlugin.receiveMessage直接访问即可字段示例根据实际推送情况可能略有差别请注意。 > ps点击通知后传递的 json object 保存在 window.JPush.receiveMessage直接访问即可字段示例根据实际推送情况可能略有差别请注意。
+ Android: - Android:
{ ```json
"message":"今天去哪儿", {
"extras"{ "message":"今天去哪儿",
"yourKey": "yourValue", "extras"{
"cn.jpush.android.MSG_ID":"154378013", "yourKey": "yourValue",
"cn.jpush.android.CONTENT_TYPE":"", "cn.jpush.android.MSG_ID":"154378013",
"cn.jpush.android.EXTRA":{"key":"不添没有"} "cn.jpush.android.CONTENT_TYPE":"",
} "cn.jpush.android.EXTRA":{ "key":"不添加没有" }
} }
}
```
+ iOS - iOS
{ ```json
"content":"今天去哪儿", {
"extras":{"key":"不填写没有"} "content":"今天去哪儿",
} "extras":{ "key":"不添加没有" }
}
```
## 判断系统设置中是否允许当前应用推送 ## 判断系统设置中是否允许当前应用推送
### API - getUserNotificationSettings ### API - getUserNotificationSettings
@@ -363,17 +528,21 @@ window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () {
在 iOS 中,返回值为 0 时,代表系统设置中关闭了推送;大于 0 时,代表打开了推送,且能够根据返回值判断具体通知形式: 在 iOS 中,返回值为 0 时,代表系统设置中关闭了推送;大于 0 时,代表打开了推送,且能够根据返回值判断具体通知形式:
UIRemoteNotificationTypeNone = 0, // 0 ```js
UIRemoteNotificationTypeBadge = 1 << 0, // 1 UIRemoteNotificationTypeNone = 0, // 0
UIRemoteNotificationTypeSound = 1 << 1, // 2 UIRemoteNotificationTypeBadge = 1 << 0, // 1
UIRemoteNotificationTypeAlert = 1 << 2, // 4 UIRemoteNotificationTypeSound = 1 << 1, // 2
UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3 // 8 UIRemoteNotificationTypeAlert = 1 << 2, // 4
UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3 // 8
```
#### 代码示例 #### 代码示例
window.plugins.jPushPlugin.getUserNotificationSettings(function(result) { ```js
if(result == 0) { window.JPush.getUserNotificationSettings(function(result) {
// 系统设置中已关闭应用推送。 if(result == 0) {
} else if(result > 0) { // 系统设置中已关闭应用推送。
// 系统设置中打开了应用推送。 } else if(result > 0) {
}) // 系统设置中打开了应用推送。
})
```

View File

@@ -3,7 +3,6 @@
- [延迟注册和启动推送通知服务](#延迟注册和启动推送通知服务) - [延迟注册和启动推送通知服务](#延迟注册和启动推送通知服务)
- [开始与停止推送服务](#开始与停止推送服务) - [开始与停止推送服务](#开始与停止推送服务)
- [获取 RegistrationID](#获取-registrationid) - [获取 RegistrationID](#获取-registrationid)
- [别名与标签](#别名与标签)
- [获取 APNS 推送内容](#获取-apns-推送内容) - [获取 APNS 推送内容](#获取-apns-推送内容)
- [点击推送通知](#点击推送通知) - [点击推送通知](#点击推送通知)
- [前台收到推送](#前台收到推送) - [前台收到推送](#前台收到推送)
@@ -20,7 +19,6 @@
- [获取用户推送设置](#获取用户推送设置) - [获取用户推送设置](#获取用户推送设置)
- [监听事件统一说明](#监听事件统一说明) - [监听事件统一说明](#监听事件统一说明)
## 延迟注册和启动推送通知服务 ## 延迟注册和启动推送通知服务
本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」其中 本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」其中
@@ -30,8 +28,8 @@
开发者可以根据自己的需求,延迟注册和启动,需做以下操作: 开发者可以根据自己的需求,延迟注册和启动,需做以下操作:
1. 查找并配置 `PushConfig.plist` 文件中的 `Delay` 字段为 `YES`,表明会延迟使用,此时插件不再自动注册、启动通知。 1.查找并配置 `PushConfig.plist` 文件中的 `Delay` 字段为 `YES`,表明会延迟使用,此时插件不再自动注册、启动通知。
2. 在需要注册并启动通知的地方调用 API - startJPushSDK。 2.在需要注册并启动通知的地方调用 API - `startJPushSDK`
### API - startJPushSDK ### API - startJPushSDK
@@ -39,10 +37,9 @@
#### 接口定义 #### 接口定义
```js
window.JPush.startJPushSDK()
``` ```
window.plugins.jPushPlugin.startJPushSDK()
```
## 开始与停止推送服务 ## 开始与停止推送服务
@@ -52,18 +49,16 @@ window.plugins.jPushPlugin.startJPushSDK()
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。 开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
```
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。 本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据, 如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。 JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息, 本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。 恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
```
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.init() window.JPush.init()
``` ```
### API - stopPush ### API - stopPush
@@ -73,7 +68,9 @@ window.plugins.jPushPlugin.init()
#### 接口定义 #### 接口定义
window.plugins.jPushPlugin.stopPush() ```js
window.JPush.stopPush()
```
### API - resumePush ### API - resumePush
@@ -81,8 +78,8 @@ window.plugins.jPushPlugin.init()
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.resumePush() window.JPush.resumePush()
``` ```
### API - isPushStopped ### API - isPushStopped
@@ -91,8 +88,8 @@ iOS平台检查推送服务是否停止。
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.isPushStopped(callback) window.JPush.isPushStopped(callback)
``` ```
#### 参数说明 #### 参数说明
@@ -102,13 +99,13 @@ window.plugins.jPushPlugin.isPushStopped(callback)
#### 代码示例 #### 代码示例
```js ```js
window.plugins.jPushPlugin.isPushStopped(function(data) { window.JPush.isPushStopped(function(data) {
if(data > 0) { if(data > 0) {
// 已关闭 // 已关闭
} else { } else {
// 已开启 // 已开启
} }
}) })
``` ```
## 获取 RegistrationID ## 获取 RegistrationID
@@ -125,7 +122,7 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
#### 接口定义 #### 接口定义
```js ```js
JPushPlugin.prototype.getRegistrationID(callback) JPushPlugin.getRegistrationID(callback)
``` ```
#### 返回值 #### 返回值
@@ -135,97 +132,11 @@ JPushPlugin.prototype.getRegistrationID(callback)
#### 调用示例 #### 调用示例
```js ```js
window.plugins.jPushPlugin.getRegistrationID(function(data) { window.JPush.getRegistrationID(function(data) {
console.log("JPushPlugin:registrationID is " + data) console.log("JPushPlugin:registrationID is " + data)
}) })
``` ```
## 别名与标签
### API - setTagsWithAlias, setTags, setAlias
提供几个相关 API 用来设置别名alias与标签tags
这几个 API 可以在 App 里任何地方调用。
**别名 Alias**
为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。
每个用户只能指定一个别名。
同一个应用程序内,对不同的用户,建议取不同的别名。这样,尽可能根据别名来唯一确定用户。
系统不限定一个别名只能指定一个用户。如果一个别名被指定到了多个用户,当给指定这个别名发消息时,服务器端 API 会同时给这多个用户发送消息。
举例:在一个用户要登录的游戏中,可能设置别名为 userid。游戏运营时发现该用户 3 天没有玩游戏了,则根据 userid 调用服务器端 API 发通知到客户端提醒用户。
**标签 Tag**
为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。
可为每个用户打多个标签。
不同应用程序、不同的用户,可以打同样的标签。
举例: game, old_page, women。
#### 接口定义
```
JPushPlugin.prototype.setTagsWithAlias(tags, alias)
JPushPlugin.prototype.setTags(tags)
JPushPlugin.prototype.setAlias(alias)
```
#### 参数说明
- tags:
- 参数类型为数组。
- nil 此次调用不设置此值。
- 空集合表示取消之前的设置。
- 每次调用至少设置一个 tag覆盖之前的设置不是新增。
- 有效的标签组成:字母(区分大小写)、数字、下划线、汉字。
- 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 100 个 tag但总长度不得超过1K字节判断长度需采用UTF-8编码
- 单个设备最多支持设置 100 个 tagApp 全局 tag 数量无限制。
- alias:
- 参数类型为字符串。
- nil 此次调用不设置此值。
- 空字符串 "")表示取消之前的设置。
- 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
- 限制alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
#### 返回值说明
函数本身无返回值,但需要注册 `jpush.setTagsWithAlias` 事件来监听设置结果。
```js
var onTagsWithAlias = function(event) {
console.log("onTagsWithAlias")
var result = "result code:"+event.resultCode + " "
result += "tags:" + event.tags + " "
result += "alias:" + event.alias + " "
$("#tagAliasResult").html(result)
}
document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false)
```
#### 错误码定义
| Code | 描述 | 详细解释 |
| ---- | :-------------------------- | :-------------------------------- |
| 6001 | 无效的设置tag/alias 不应参数都为 null | |
| 6002 | 设置超时 | 建议重试。 |
| 6003 | alias 字符串不合法 | 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。 |
| 6004 | alias超长 | 最多 40个字节 中文 UTF-8 是 3 个字节。 |
| 6005 | 某一个 tag 字符串不合法 | 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。 |
| 6006 | 某一个 tag 超长 | 一个 tag 最多 40个字节 中文 UTF-8 是 3 个字节。 |
| 6007 | tags 数量超出限制(最多 100 个) | 这是一台设备的限制。一个应用全局的标签数量无限制。 |
| 6008 | tag/alias 超出总长度限制 | 总长度最多 1K 字节。 |
| 6011 | 10s内设置tag或alias大于3次 | 短时间内操作过于频繁。 |
## 获取 APNS 推送内容 ## 获取 APNS 推送内容
### 点击推送通知 ### 点击推送通知
@@ -238,34 +149,33 @@ document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false)
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
```js ```js
document.addEventListener("jpush.openNotification", onOpenNotification, false) document.addEventListener("jpush.openNotification", onOpenNotification, false)
``` ```
- onOpenNotification 需要这样写: - onOpenNotification 需要这样写:
```js ```js
var onOpenNotification = function(event) { var onOpenNotification = function(event) {
var alertContent var alertContent = event.aps.alert
alertContent = event.aps.alert alert("open notification:" + alertContent)
alert("open Notificaiton:" + alertContent) }
} ```
```
- event 举例: - event 举例:
```json ```json
{ {
"aps":{ "aps":{
"badge":1, "badge":1,
"sound":"default", "sound":"default",
"alert":"今天去哪儿" "alert":"今天去哪儿"
}, },
"key1":"value1", "key1":"value1",
"key2":"value2", "key2":"value2",
"_j_msgid":154604475 "_j_msgid":154604475
} }
``` ```
### 前台收到推送 ### 前台收到推送
@@ -277,34 +187,33 @@ document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false)
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
```js ```js
document.addEventListener("jpush.receiveNotification", onReceiveNotification, false) document.addEventListener("jpush.receiveNotification", onReceiveNotification, false)
``` ```
- onReceiveNotification 需要这样写: - onReceiveNotification 需要这样写:
```js ```js
var onReceiveNotification = function(event) { var onReceiveNotification = function(event) {
var alertContent var alertContent = event.aps.alert
alertContent = event.aps.alert alert("open Notification:" + alertContent)
alert("open Notificaiton:" + alertContent) }
} ```
```
- event 举例 - event 举例
```json ```json
{ {
"aps":{ "aps":{
"badge":1, "badge":1,
"sound":"default", "sound":"default",
"alert":"今天去哪儿" "alert":"今天去哪儿"
}, },
"key1":"value1", "key1":"value1",
"key2":"value2", "key2":"value2",
"_j_msgid":154604475 "_j_msgid":154604475
} }
``` ```
### 后台收到推送 ### 后台收到推送
@@ -316,100 +225,92 @@ document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false)
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
```js ```js
document.addEventListener("jpush.backgroundNotification", onBackgroundNotification, false) document.addEventListener("jpush.backgroundNotification", onBackgroundNotification, false)
``` ```
- onBackgroundNotification 需要这样写: - onBackgroundNotification 需要这样写:
```js ```js
var onBackgroundNotification = function(event) { var onBackgroundNotification = function(event) {
var alertContent var alertContent = event.aps.alert
alertContent = event.aps.alert alert("open Notification:" + alertContent)
alert("open Notificaiton:" + alertContent) }
} ```
```
- event 举例 - event 举例
```json ```json
{ {
"aps":{ "aps":{
"badge":1, "badge":1,
"sound":"default", "sound":"default",
"alert":"今天去哪儿" "alert":"今天去哪儿"
}, },
"key1":"value1", "key1":"value1",
"key2":"value2", "key2":"value2",
"_j_msgid":154604475 "_j_msgid":154604475
} }
``` ```
## 获取自定义消息内容
### event - jpush.receiveMessage ### event - jpush.receiveMessage
收到应用内消息时触发这个事件, 推荐使用事件的方式传递,但同时保留了 receiveMessageIniOSCallback 的回调函数,兼容以前的代码。 收到应用内消息时触发这个事件, 推荐使用事件的方式传递,但同时保留了 `receiveMessageIniOSCallback` 的回调函数,兼容以前的代码。
#### 代码示例 #### 代码示例
- 在你需要接收通知的的 js 文件中加入: - 在你需要接收通知的的 js 文件中加入:
```js ```js
document.addEventListener("jpush.receiveMessage", onReceiveMessage, false) document.addEventListener("jpush.receiveMessage", onReceiveMessage, false)
``` ```
- onReceiveMessage 需要这样写: - onReceiveMessage 需要这样写:
```js ```js
var onReceiveMessage = function(event) { var onReceiveMessage = function(event) {
try { try {
var message = event.content var message = event.content
$("#messageResult").html(message) $("#messageResult").html(message)
} catch(exception) { } catch(exception) {
console.log("JPushPlugin:onReceiveMessage-->" + exception); console.log("JPushPlugin:onReceiveMessage-->" + exception);
}
} }
``` }
```
- event 举例: - event 举例:
```json ```json
{
"content":"今天去哪儿",
"extras":
{ {
"content":"今天去哪儿", "key":"不填写没有"
"extras":
{
"key":"不填写没有"
}
} }
``` }
```
## 设置Badge ## 设置Badge
### API - setBadge, resetBadge ### API - setBadge, resetBadge
JPush 封装 badge 功能,允许应用上传 badge 值至 JPush 服务器,由 JPush 后台帮助管理每个用户所对应的推送 badge 值,简化了设置推送 badge 的操作。 JPush 封装 badge 功能,允许应用上传 badge 值至 JPush 服务器,由 JPush 后台帮助管理每个用户所对应的推送 badge 值,简化了设置推送 badge 的操作。
(本接口不会直接改变应用本地的角标值. 要修改本地 badege 值,使用 setApplicationIconBadgeNumber (本接口不会直接改变应用本地的角标值. 要修改本地 badge 值,使用 `setApplicationIconBadgeNumber`
实际应用中,开发者可以直接对 badge 值做增减操作,无需自己维护用户与 badge 值之间的对应关系。 实际应用中,开发者可以直接对 badge 值做增减操作,无需自己维护用户与 badge 值之间的对应关系。
#### 接口定义 #### 接口定义
```js ```js
window.plugins.jPushPlugin.prototype.setBadge(value) window.JPush.setBadge(value)
window.plugins.jPushPlugin.prototype.resetBadge() window.JPush.resetBadge()
``` ```
resetBadge 相当于 setBadge(0)。 `resetBadge` 相当于 `setBadge(0)`
#### 参数说明 #### 参数说明
value 取值范围:[0,99999] value 取值范围:0 ~ 99999。
#### 返回值 #### 返回值
@@ -418,8 +319,8 @@ value 取值范围:[0,99999]。
#### 代码示例 #### 代码示例
```js ```js
window.plugins.jPushPlugin.setBadge(5) window.JPush.setBadge(5)
window.plugins.jPushPlugin.resetBadge() window.JPush.resetBadge()
``` ```
### API - setApplicationIconBadgeNumber ### API - setApplicationIconBadgeNumber
@@ -429,17 +330,17 @@ window.plugins.jPushPlugin.resetBadge()
#### 接口定义 #### 接口定义
```js ```js
window.plugins.jPushPlugin.prototype.setApplicationIconBadgeNumber(badge) window.JPush.setApplicationIconBadgeNumber(badge)
``` ```
#### 参数说明 #### 参数说明
- badge: 整型,例如 012当 badge 为 0 时,角标被清除)。 - badge: 整型,例如 0, 1, 2当 badge 为 0 时,角标被清除)。
#### 代码示例 #### 代码示例
``` ```js
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0) window.JPush.setApplicationIconBadgeNumber(0)
``` ```
### API - getApplicationIconBadgeNumber ### API - getApplicationIconBadgeNumber
@@ -448,8 +349,8 @@ window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0)
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.getApplicationIconBadgeNumber(callback) window.JPush.getApplicationIconBadgeNumber(callback)
``` ```
#### 参数说明 #### 参数说明
@@ -459,8 +360,8 @@ window.plugins.jPushPlugin.prototype.getApplicationIconBadgeNumber(callback)
#### 代码示例 #### 代码示例
```js ```js
window.plugins.jPushPlugin.getApplicationIconBadgeNumber(function(data) { window.JPush.getApplicationIconBadgeNumber(function(badgeNum) {
console.log(data) console.log(badgeNum)
}) })
``` ```
@@ -473,7 +374,7 @@ window.plugins.jPushPlugin.getApplicationIconBadgeNumber(function(data) {
#### 接口定义 #### 接口定义
```js ```js
window.plugins.jPushPlugin.prototype.addLocalNotificationForIOS(delayTime, content, badge, notificationID, extras) window.JPush.addLocalNotificationForIOS(delayTime, content, badge, notificationID, extras)
``` ```
#### 参数说明 #### 参数说明
@@ -487,7 +388,7 @@ window.plugins.jPushPlugin.prototype.addLocalNotificationForIOS(delayTime, conte
#### 代码示例 #### 代码示例
```js ```js
window.plugins.jPushPlugin.addLocalNotificationForIOS(24*60*60, "本地推送内容", 1, "notiId", {"key":"value"}); window.JPush.addLocalNotificationForIOS(24*60*60, "本地推送内容", 1, "notiId", {"key":"value"});
``` ```
### API - deleteLocalNotificationWithIdentifierKeyInIOS ### API - deleteLocalNotificationWithIdentifierKeyInIOS
@@ -497,7 +398,7 @@ window.plugins.jPushPlugin.addLocalNotificationForIOS(24*60*60, "本地推送内
#### 接口定义 #### 接口定义
```js ```js
window.plugins.jPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey) window.JPush.deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey)
``` ```
#### 参数说明 #### 参数说明
@@ -506,8 +407,8 @@ window.plugins.jPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInI
#### 代码示例 #### 代码示例
``` ```js
window.plugins.jPushPlugin.deleteLocalNotificationWithIdentifierKeyInIOS("identifier") window.JPush.deleteLocalNotificationWithIdentifierKeyInIOS("identifier")
``` ```
### API - clearAllLocalNotifications ### API - clearAllLocalNotifications
@@ -516,17 +417,15 @@ window.plugins.jPushPlugin.deleteLocalNotificationWithIdentifierKeyInIOS("identi
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.clearAllLocalNotifications() window.JPush.clearAllLocalNotifications()
``` ```
#### 代码示例 #### 代码示例
```js
window.JPush.clearAllLocalNotifications()
``` ```
window.plugins.jPushPlugin.clearAllLocalNotifications()
```
## 获取本地通知内容 ## 获取本地通知内容
@@ -534,20 +433,12 @@ window.plugins.jPushPlugin.clearAllLocalNotifications()
监听 `jpush.receiveLocalNotification` 事件获取「App 在后台时点击通知横幅」或「App 在前台时收到」均会触发该事件。 监听 `jpush.receiveLocalNotification` 事件获取「App 在后台时点击通知横幅」或「App 在前台时收到」均会触发该事件。
### iOS 10 收到本地通知 ### iOS 10 收到本地通知
监听 [jpush.receiveNotification](#前台收到推送)、[jpush.openNotification](点击推送通知),获取推送内容后,通过获取到的 `__JPUSHNotificationKey` 字段([本地通知](#本地通知) 设置的 `notificationID`)来判断是本地通知,并处理。 监听 [jpush.receiveNotification](#前台收到推送)、[jpush.openNotification](点击推送通知),获取推送内容后,通过获取到的 `__JPUSHNotificationKey` 字段([本地通知](#本地通知) 设置的 `notificationID`)来判断是本地通知,并处理。
### 点击本地通知横幅启动 App
监听 `jpush.startLocalNotification` 事件。
## 页面的统计 ## 页面的统计
### API - startLogPageView, stopLogPageView, beginLogPageView ### API - startLogPageView, stopLogPageView, beginLogPageView
@@ -557,16 +448,16 @@ window.plugins.jPushPlugin.clearAllLocalNotifications()
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.startLogPageView(pageName) window.JPush.startLogPageView(pageName)
window.plugins.jPushPlugin.prototype.stopLogPageView(pageName) window.JPush.stopLogPageView(pageName)
window.plugins.jPushPlugin.prototype.beginLogPageView(pageName, duration) window.JPush.beginLogPageView(pageName, duration)
``` ```
#### 参数说明 #### 参数说明
- pageName: 需要统计页面自定义名称 - pageName: 需要统计页面自定义名称
- duration: 自定义的页面时间 - duration: 自定义的页面时间
#### 调用说明 #### 调用说明
@@ -576,10 +467,10 @@ window.plugins.jPushPlugin.prototype.beginLogPageView(pageName, duration)
#### 代码示例 #### 代码示例
``` ```js
window.plugins.jPushPlugin.beginLogPageView("newPage", 5); window.JPush.beginLogPageView("newPage", 5);
window.plugins.jPushPlugin.startLogPageView("onePage"); window.JPush.startLogPageView("onePage");
window.plugins.jPushPlugin.stopLogPageView("onePage"); window.JPush.stopLogPageView("onePage");
``` ```
## 日志等级设置 ## 日志等级设置
@@ -588,18 +479,12 @@ window.plugins.jPushPlugin.stopLogPageView("onePage");
用于开启 Debug 模式,显示更多的日志信息。 用于开启 Debug 模式,显示更多的日志信息。
建议调试时开启这个选项,不调试的时候注释这句代码,这个函数 setLogOFF 是相反的一对。 建议调试时开启这个选项,不调试的时候注释这句代码,这个函数 `setLogOFF` 是相反的一对。
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.setDebugModeFromIos() window.JPush.setDebugModeFromIos();
```
#### 代码示例
```
window.plugins.jPushPlugin.setDebugModeFromIos();
``` ```
### API - setLogOFF ### API - setLogOFF
@@ -610,14 +495,8 @@ window.plugins.jPushPlugin.setDebugModeFromIos();
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.setLogOFF() window.JPush.setLogOFF();
```
#### 代码示例
```
window.plugins.jPushPlugin.setLogOFF();
``` ```
### API - setCrashLogON ### API - setCrashLogON
@@ -628,14 +507,8 @@ window.plugins.jPushPlugin.setLogOFF();
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.setCrashLogON() window.JPush.setCrashLogON();
```
#### 代码示例
```
window.plugins.jPushPlugin.setCrashLogON();
``` ```
## 地理位置上报 ## 地理位置上报
@@ -646,8 +519,8 @@ window.plugins.jPushPlugin.setCrashLogON();
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.setLocation(latitude, longitude) window.JPush.prototype.setLocation(latitude, longitude)
``` ```
#### 参数说明 #### 参数说明
@@ -655,12 +528,6 @@ window.plugins.jPushPlugin.prototype.setLocation(latitude, longitude)
- latitude: 地理位置纬度,数值类型或纯数字的字符型均可。 - latitude: 地理位置纬度,数值类型或纯数字的字符型均可。
- longitude: 地理位置精度,数值类型或纯数字的字符型均可。 - longitude: 地理位置精度,数值类型或纯数字的字符型均可。
#### 代码示例
```
window.plugins.jPushPlugin.setLocation(39.26,115.25);
```
## 设备平台判断 ## 设备平台判断
### API - isPlatformIOS ### API - isPlatformIOS
@@ -669,22 +536,20 @@ window.plugins.jPushPlugin.setLocation(39.26,115.25);
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.isPlatformIOS() window.JPush.isPlatformIOS()
``` ```
#### 代码示例 #### 代码示例
```js ```js
if(window.plugins.jPushPlugin.isPlatformIOS()) { if(window.JPush.isPlatformIOS()) {
// iOS // iOS
} else { } else {
// Android // Android
} }
``` ```
## iOS 10 进阶推送特性 ## iOS 10 进阶推送特性
### API - addDismissActions ### API - addDismissActions
@@ -701,8 +566,8 @@ if(window.plugins.jPushPlugin.isPlatformIOS()) {
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.addDismissActions(actions, categoryId); window.JPush.addDismissActions(actions, categoryId);
``` ```
#### 参数说明 #### 参数说明
@@ -723,7 +588,9 @@ window.plugins.jPushPlugin.prototype.addDismissActions(actions, categoryId);
#### 代码示例 #### 代码示例
```js ```js
window.plugins.jPushPlugin.addDismissActions([{"title":"t1", "identifier":"id1", "option":"0"}, {"title":"t2", "identifier":"id2", "option":"3", "type":"textInput", "textInputButtonTitle":"回复", "textInputPlaceholder":"点此输入回复内容"}], "categoryId_t1_t2"); window.JPush.addDismissActions([
{"title":"t1", "identifier":"id1", "option":"0"},
{"title":"t2", "identifier":"id2", "option":"3", "type":"textInput", "textInputButtonTitle":"回复", "textInputPlaceholder":"点此输入回复内容"}], "categoryId_t1_t2");
``` ```
### API - addNotificationActions ### API - addNotificationActions
@@ -740,8 +607,8 @@ iPhone 6s 及以后设备且 iOS 9 以后系统支持 3d-touch。
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId) window.JPush.addNotificationActions(actions, categoryId)
``` ```
#### 参数说明 #### 参数说明
@@ -760,23 +627,23 @@ window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
#### 配置方法 #### 配置方法
1. 首先配置好 iOS 项目的证书。如下图所示没有任何异常警告: 1.首先配置好 iOS 项目的证书。如下图所示没有任何异常警告:
![](res/MediaAttachments_01.png) ![](res/MediaAttachments_01.png)
2. 打开 iOS Xcode Project - File - New - Target - iOS - Notification Service Extension - Next - Product Name 填写 `jpushNotificationService` - Finish如下图所示 ![](res/MediaAttachments_02.png) 2.打开 iOS Xcode Project - File - New - Target - iOS - Notification Service Extension - Next - Product Name 填写 `jpushNotificationService` - Finish如下图所示 ![](res/MediaAttachments_02.png)
![MediaAttachments_03](res/MediaAttachments_03.png) ![MediaAttachments_03](res/MediaAttachments_03.png)
![MediaAttachments_04](res/MediaAttachments_04.png) ![MediaAttachments_04](res/MediaAttachments_04.png)
3. 在 Xcode 工程目录左侧系统自动创建了 jpushNotificationService 文件夹及三个文件,下载本插件目录 `jpush-phonegap-plugin/src/ios/notificationService/` 下的 `NotificationService.h`、`NotificationService.m` 文件,全部复制替换对应文件内代码。 3.在 Xcode 工程目录左侧系统自动创建了 jpushNotificationService 文件夹及三个文件,下载本插件目录 `jpush-phonegap-plugin/src/ios/notificationService/` 下的 `NotificationService.h``NotificationService.m` 文件,全部复制替换对应文件内代码。
4. 在 Xcode 中拖拽图片、gif、audio、video 等资源文件至 `jpushNotificationService` 文件夹目录下,弹出菜单选择如下: ![MediaAttachments_06](res/MediaAttachments_06.png) 4.在 Xcode 中拖拽图片、gif、audio、video 等资源文件至 `jpushNotificationService` 文件夹目录下,弹出菜单选择如下: ![MediaAttachments_06](res/MediaAttachments_06.png)
5. 在极光控制台 - 发送通知 - 可选设置 - mutable-content 打勾。 5.在极光控制台 - 发送通知 - 可选设置 - mutable-content 打勾。
6. 添加附加字段, key 为 `JPushPluginAttachment` value 为资源名称如 `aPic.png`,该资源必须在第 4 步中已经添加至工程且文件名和拓展名完全对应。5、6 如下图所示: 6.添加附加字段, key 为 `JPushPluginAttachment` value 为资源名称如 `aPic.png`,该资源必须在第 4 步中已经添加至工程且文件名和拓展名完全对应。5、6 如下图所示:
![MediaAttachments_05](res/MediaAttachments_05.png) ![MediaAttachments_05](res/MediaAttachments_05.png)
@@ -784,15 +651,15 @@ window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
```json ```json
{ {
aps:{ aps:{
alert:{...}, alert:{...},
mutable-content:1 //必须 mutable-content:1 //必须
} }
JPushPluginAttachment:aPic.png //必须 JPushPluginAttachment:aPic.png //必须
} }
``` ```
7. 立即发送。 7.立即发送。
## 获取用户推送设置 ## 获取用户推送设置
@@ -802,8 +669,8 @@ window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
#### 接口定义 #### 接口定义
``` ```js
window.plugins.jPushPlugin.prototype.getUserNotificationSettings(callback) window.JPush.getUserNotificationSettings(callback)
``` ```
#### 返回值 #### 返回值
@@ -829,52 +696,30 @@ window.plugins.jPushPlugin.prototype.getUserNotificationSettings(callback)
- UNAlertStyleAlert = 2 - UNAlertStyleAlert = 2
## 监听事件统一说明 ## 监听事件统一说明
可在 js 监听全部事件如下: 可在 js 监听全部事件如下:
##### jpush.receiveNotification ### jpush.receiveNotification
> [前台收到远程通知](#前台收到推送) [前台收到远程通知](#前台收到推送)
>
> [iOS 10 前台收到本地通知](#ios-10-收到本地通知)
[iOS 10 前台收到本地通知](#ios-10-收到本地通知)
### jpush.openNotification
##### jpush.openNotification [点击远程通知横幅使 App「进入前台」或「启动」](#点击推送通知)
> [点击远程通知横幅使 App「进入前台」或「启动」](#点击推送通知) [iOS 10 点击本地通知横幅使 App「进入前台」或「启动」](#ios-10-收到本地通知)
>
> [iOS 10 点击本地通知横幅使 App「进入前台」或「启动」](#ios-10-收到本地通知)
### jpush.backgroundNotification
[iOS 7 以后后台收到远程通知](#后台收到推送)
##### jpush.backgroundNotification ### jpush.receiveMessage
> [iOS 7 以后后台收到远程通知](#后台收到推送) [获取自定义消息内容](#获取自定义消息内容)
### jpush.receiveLocalNotification
[iOS 10 before 收到本地通知](#ios-10-before-收到本地通知)
##### jpush.setTagsWithAlias
> [设置标签别名回调](#返回值说明)
##### jpush.receiveMessage
> [获取自定义消息内容](#获取自定义消息内容)
##### jpush.startLocalNotification
> [点击本地通知横幅启动 App](#点击本地通知横幅启动-app)
##### jpush.receiveLocalNotification
> [iOS 10 before 收到本地通知](#ios-10-before-收到本地通知)

View File

@@ -1,41 +0,0 @@
## iOS 手动安装
> **不建议使用手动安装,请参照 README.md 进行自动安装。**
1. 下载 JPush PhoneGap Plugin 插件,并解压
2. 将 [/src/ios](/src/ios) 文件夹及内容在 xcode 中拖到你的工程里,并配置 [/src/ios/PushConfig.plist](/src/ios/PushConfig.plist) 中相应参数:
Appkey 应用标识
Channel 渠道标识
IsProduction是否生产环境
IsIDFA 是否使用 IDFA 启动 sdk
3. 打开 xcode点击工程目录中顶部的 工程,选择(Target -> Build Phases -> Link Binary With Libraries),添加以下框架:
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
AdSupport.framework
libz.tbd(若存在 libz.dylib 则替换为 libz.tbd)
UserNotifications.framework
libresolv.tbd
4. 修改 phonegap config.xml 文件以添加 JPushPlugin 插件
```xml
<feature name="JPushPlugin">
<param name="ios-package" value="JPushPlugin" />
<param name="onload" value="true" />
</feature>
```
5. 将 [/www/JPushPlugin.js](/www/JPushPlugin.js) 在 xcode 中拖到工程的 www 目录下面
6. 在需要使用插件处加入以下代码,并根据 [iOS API](/doc/iOS_API.md) 文档说明调用相应接口
```xml
<script type="text/javascript" src="JPushPlugin.js"></script>
```

View File

@@ -1,201 +1,262 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>JPush Phonegap Simple Demo</title> <title>JPush Phonegap Simple Demo</title>
<link href="css/jquery.mobile-1.1.1.css" rel="stylesheet" type="text/css" /> <link href="css/jquery.mobile-1.1.1.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.mobile-1.1.1.js"></script> <script type="text/javascript" src="js/jquery.mobile-1.1.1.js"></script>
<script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var onDeviceReady = function() { var onDeviceReady = function() {
console.log("JPushPlugin:Device ready!"); initiateUI();
initiateUI();
}; };
var getRegistrationID = function() { var getRegistrationID = function() {
window.plugins.jPushPlugin.getRegistrationID(onGetRegistrationID); window.JPush.getRegistrationID(onGetRegistrationID);
}; };
var onGetRegistrationID = function(data) { var onGetRegistrationID = function(data) {
try { try {
console.log("JPushPlugin:registrationID is " + data); console.log("JPushPlugin:registrationID is " + data);
if (data.length == 0) { if (data.length == 0) {
var t1 = window.setTimeout(getRegistrationID, 1000); var t1 = window.setTimeout(getRegistrationID, 1000);
}
$("#registrationId").html(data);
} catch (exception) {
console.log(exception);
} }
};
$("#registrationId").html(data);
} catch (exception) {
console.log(exception);
}
};
var onTagsWithAlias = function(event) { var onTagsWithAlias = function(event) {
try { try {
console.log("onTagsWithAlias"); console.log("onTagsWithAlias");
var result = "result code:" + event.resultCode + " "; var result = "result code:" + event.resultCode + " ";
result += "tags:" + event.tags + " "; result += "tags:" + event.tags + " ";
result += "alias:" + event.alias + " "; result += "alias:" + event.alias + " ";
$("#tagAliasResult").html(result); $("#tagAliasResult").html(result);
} catch (exception) { } catch (exception) {
console.log(exception) console.log(exception)
} }
}; };
var onOpenNotification = function(event) { var onOpenNotification = function(event) {
try { try {
var alertContent; var alertContent;
if (device.platform == "Android") { if (device.platform == "Android") {
alertContent = event.alert; alertContent = event.alert;
} else { } else {
alertContent = event.aps.alert; alertContent = event.aps.alert;
}
alert("open Notification:" + alertContent);
} catch (exception) {
console.log("JPushPlugin:onOpenNotification" + exception);
} }
alert("open Notification:" + alertContent);
} catch (exception) {
console.log("JPushPlugin:onOpenNotification" + exception);
}
}; };
var onReceiveNotification = function(event) { var onReceiveNotification = function(event) {
try { try {
var alertContent; var alertContent;
if (device.platform == "Android") { if (device.platform == "Android") {
alertContent = event.alert; alertContent = event.alert;
} else { } else {
alertContent = event.aps.alert; alertContent = event.aps.alert;
}
$("#notificationResult").html(alertContent);
} catch (exception) {
console.log(exception)
} }
$("#notificationResult").html(alertContent);
} catch (exception) {
console.log(exception)
}
}; };
var onReceiveMessage = function(event) { var onReceiveMessage = function(event) {
try { try {
var message; var message;
if (device.platform == "Android") { if (device.platform == "Android") {
message = event.message; message = event.message;
} else { } else {
message = event.content; message = event.content;
}
$("#messageResult").html(message);
} catch (exception) {
console.log("JPushPlugin:onReceiveMessage-->" + exception);
} }
$("#messageResult").html(message);
} catch (exception) {
console.log("JPushPlugin:onReceiveMessage-->" + exception);
}
}; };
var initiateUI = function() { var initiateUI = function() {
try { try {
window.plugins.jPushPlugin.init(); window.JPush.init();
window.setTimeout(getRegistrationID, 1000); window.setTimeout(getRegistrationID, 1000);
if (device.platform != "Android") { if (device.platform != "Android") {
window.plugins.jPushPlugin.setDebugModeFromIos(); window.JPush.setDebugModeFromIos();
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0); window.JPush.setApplicationIconBadgeNumber(0);
} else { } else {
window.plugins.jPushPlugin.setDebugMode(true); window.JPush.setDebugMode(true);
window.plugins.jPushPlugin.setStatisticsOpen(true); window.JPush.setStatisticsOpen(true);
}
} catch (exception) {
console.log(exception);
} }
$("#setTagWithAliasButton").click(function(ev) { } catch (exception) {
try { console.log(exception);
var tag1 = $("#tagText1").attr("value"); }
var tag2 = $("#tagText2").attr("value");
var tag3 = $("#tagText3").attr("value");
var alias = $("#aliasText").attr("value");
var tags = [];
if (tag1 != "") { $("#setTags").click(function(ev) {
tags.push(tag1); try {
} var tag1 = $("#tagText1").val()
if (tag2 != "") { var tag2 = $("#tagText2").val()
tags.push(tag2); var tag3 = $("#tagText3").val()
} var tags = []
if (tag3 != "") {
tags.push(tag3); if (tag1) {
} tags.push(tag1)
window.plugins.jPushPlugin.setTagsWithAlias(tags, alias, function () { }
// Success callback if (tag2) {
console.log(tags + ' - ' + alias) tags.push(tag2)
}); }
} catch (exception) { if (tag3) {
console.log(exception); tags.push(tag3)
} }
})
window.JPush.setTags({ sequence: 1, tags: tags },
(result) => {
$("#tagsResult").html(result.tags)
}, (error) => {
alert(error.code)
})
} catch (exception) {
console.log(exception)
}
})
$("#getAllTags").click(function (event) {
window.JPush.getAllTags({ sequence: 2 },
(result) => {
$("#tagsResult").html(result.tags)
}, (error) => {
alert(error.code)
})
})
$("#cleanTags").click(function (event) {
window.JPush.cleanTags({ sequence: 2 },
(result) => {
alert(result.sequence)
$("#tagsResult").html("")
}, (error) => {
alert(error.code)
})
})
$("#setAlias").click(function (event) {
var alias = $("#aliasText").val()
window.JPush.setAlias({ sequence: 1, alias: alias },
(result) => {
$("#aliasResult").html(result.alias)
}, (error) => {
alert(error.code)
})
})
$("#getAlias").click(function (event) {
window.JPush.getAlias({ sequence: 2 },
(result) => {
alert(JSON.stringify(result));
}, (error) => {
alert(error.code)
})
});
$("#deleteAlias").click(function (event) {
window.JPush.deleteAlias({ sequence: 3 },
(result) => {
alert(JSON.stringify(result));
}, (error) => {
alert(error.code)
})
});
}; };
document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false);
document.addEventListener("deviceready", onDeviceReady, false); document.addEventListener("deviceready", onDeviceReady, false);
document.addEventListener("jpush.openNotification", onOpenNotification, false); document.addEventListener("jpush.openNotification", onOpenNotification, false);
document.addEventListener("jpush.receiveNotification", onReceiveNotification, false); document.addEventListener("jpush.receiveNotification", onReceiveNotification, false);
document.addEventListener("jpush.receiveMessage", onReceiveMessage, false); document.addEventListener("jpush.receiveMessage", onReceiveMessage, false);
</script> </script>
</head> </head>
<body> <body>
<div data-role="page" id="page"> <div data-role="page" id="page">
<div data-role="content"> <div data-role="content">
<form> <form>
<div class="ui-body ui-body-b"> <div class="ui-body ui-body-b">
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<center> <center>
<h3>JPushPlugin Example</h3> <h3>JPushPlugin Example</h3>
</center> </center>
<span name="alias" id="alias"></span> <span name="alias" id="alias"></span>
<hr/> <hr/>
<label>RegistrationID: </label> <label>RegistrationID: </label>
<label id="registrationId">null</label> <label id="registrationId">null</label>
</div> </div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label>Tags: </label> <label>Tags: </label>
<table> <table>
<tr> <tr>
<td> <td>
<input type="text" id="tagText1" /> <input type="text" id="tagText1" />
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<input type="text" id="tagText2" /> <input type="text" id="tagText2" />
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<input type="text" id="tagText3" /> <input type="text" id="tagText3" />
</td> </td>
</tr> </tr>
</table> </table>
<label>Alias: </label> <label>Alias: </label>
<table> <table>
<tr> <tr>
<td> <td>
<input type="text" id="aliasText" /> <input type="text" id="aliasText" />
</td> </td>
</tr> </tr>
</table> </table>
</div> </div>
<div data-role="fieldcontain">
<input type="button" id="setTagWithAliasButton"
value="Add tag and alias" />
</div>
<div data-role="fieldcontain">
<label id="tagAliasPrompt">设置tag/alias结果:</label>
<label id="tagAliasResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="notificationPrompt">接受的通知内容:</label>
<label id="notificationResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="messagePrompt">接受的自定义消息:</label>
<label id="messageResult">null</label>
</div>
</div>
</form>
</div>
</div>
</body>
</html> <div data-role="fieldcontain">
<input type="button" id="setTags" value="Set tags" />
<input type="button" id="getAllTags" value="Get all tags" />
<input type="button" id="cleanTags" value="Clean tags" />
</div>
<div data-role="fieldcontain">
<input type="button" id="setAlias" value="Set alias" />
<input type="button" id="getAlias" value="Get alias" />
<input type="button" id="deleteAlias" value="Delete alias" />
</div>
<div data-role="fieldcontain">
<label id="tagsPrompt">设置 Tag 的结果:</label>
<label id="tagsResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="aliasPrompt">设置 Alias 的结果:</label>
<label id="aliasResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="notificationPrompt">接受的通知内容:</label>
<label id="notificationResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="messagePrompt">接受的自定义消息:</label>
<label id="messageResult">null</label>
</div>
</div>
</form>
</div>
</div>
</body>
</html>

View File

@@ -1,4 +1,4 @@
/* /*
* Author: Derek Chia <snipking@gmail.com> * Author: Derek Chia <snipking@gmail.com>
* Cordova plugin after hook to disable `Push Notification` capability for XCode 8 * Cordova plugin after hook to disable `Push Notification` capability for XCode 8
*/ */
@@ -27,7 +27,7 @@ let disablePushNotificationForXCode = (entitlementsPath, pbxprojPath) => {
if( fs.existsSync(entitlementsPath) ) { if( fs.existsSync(entitlementsPath) ) {
commonFuncs.removeAPNSinEntitlements(entitlementsPath); commonFuncs.removeAPNSinEntitlements(entitlementsPath);
} }
/** /**
* disable Push Notification capability in .pbxproj file * disable Push Notification capability in .pbxproj file
* equally disable "Push Notification" switch in xcode * equally disable "Push Notification" switch in xcode
@@ -37,19 +37,21 @@ let disablePushNotificationForXCode = (entitlementsPath, pbxprojPath) => {
throw err; throw err;
} }
console.log("Reading pbxproj file asynchronously"); console.log("Reading pbxproj file asynchronously");
// turn off Push Notification Capability // turn off Push Notification Capability
let re4rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*com\.apple\.Push = {(.|[\r\n])*enabled = [01]'); let re4rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*com\.apple\.Push = {(.|[\r\n])*enabled = [01]');
let parts = re4rep.exec(data); let parts = re4rep.exec(data);
result = data.replace(re4rep, parts[0].substr(0, parts[0].length - 1) + '0'); if(parts !== null && parts !== undefined && parts.length > 0) {
result = data.replace(re4rep, parts[0].substr(0, parts[0].length - 1) + '0');
// write result to project.pbxproj // write result to project.pbxproj
fs.writeFile(pbxprojPath, result, {"encoding": 'utf8'}, function(err) { fs.writeFile(pbxprojPath, result, {"encoding": 'utf8'}, function(err) {
if (err) { if (err) {
throw err; throw err;
} }
console.log(pbxprojPath + " written successfully"); console.log(pbxprojPath + " written successfully");
}); });
}
}); });
} }
@@ -61,4 +63,4 @@ let entitlementsPath = basePath + xcodeprojName + '/' + xcodeprojName + '.entitl
disablePushNotificationForCI(basePath, xcodeprojName); disablePushNotificationForCI(basePath, xcodeprojName);
disablePushNotificationForXCode(entitlementsPath, pbxprojPath); disablePushNotificationForXCode(entitlementsPath, pbxprojPath);

View File

@@ -1,6 +1,6 @@
{ {
"name": "jpush-phonegap-plugin", "name": "jpush-phonegap-plugin",
"version": "3.1.9", "version": "3.2.8",
"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.1.9"> version="3.2.8">
<name>JPush</name> <name>JPush</name>
<description>JPush for cordova plugin</description> <description>JPush for cordova plugin</description>
@@ -38,7 +38,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.5.a" framework="true" /> <source-file src="src/ios/lib/jpush-ios-3.0.7.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" />
@@ -58,9 +58,9 @@
<string>$APP_KEY</string> <string>$APP_KEY</string>
</config-file> </config-file>
<hook type="after_platform_add" src="hooks/iosEnablePush.js" /> <!-- <hook type="after_platform_add" src="hooks/iosEnablePush.js" />
<hook type="after_plugin_install" src="hooks/iosEnablePush.js" /> <hook type="after_plugin_install" src="hooks/iosEnablePush.js" />
<hook type="before_plugin_uninstall" src="hooks/iosDisablePush.js" /> <hook type="before_plugin_uninstall" src="hooks/iosDisablePush.js" /> -->
</platform> </platform>
<platform name="android"> <platform name="android">
@@ -72,20 +72,22 @@
<config-file target="AndroidManifest.xml" parent="/manifest"> <config-file target="AndroidManifest.xml" parent="/manifest">
<!-- Required 一些系统要求的权限,如访问网络等--> <!-- Required 一些系统要求的权限,如访问网络等-->
<permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" /> <uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" />
<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.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.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.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
</config-file> </config-file>
<config-file target="AndroidManifest.xml" parent="/manifest/application"> <config-file target="AndroidManifest.xml" parent="/manifest/application">
@@ -187,15 +189,29 @@
android:name="cn.jpush.android.service.AlarmReceiver" android:name="cn.jpush.android.service.AlarmReceiver"
android:exported="false" /> 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"></category>
</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="developer-default" />
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" /> <meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" />
</config-file> </config-file>
<source-file src="src/android/libs/jpush-android_v3.0.6.jar" target-dir="libs" /> <source-file src="src/android/libs/jpush-android-3.0.9.jar" target-dir="libs" />
<source-file src="src/android/MyReceiver.java" target-dir="src/cn/jiguang/cordova/push" /> <source-file src="src/android/MyReceiver.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/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" <source-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
target-dir="res/drawable" /> target-dir="res/drawable" />

View File

@@ -0,0 +1,156 @@
package cn.jiguang.cordova.push;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
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();
@Override
public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
super.onTagOperatorResult(context, jPushMessage);
JSONObject resultJson = new JSONObject();
int sequence = jPushMessage.getSequence();
try {
resultJson.put("sequence", sequence);
} catch (JSONException e) {
e.printStackTrace();
}
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!");
return;
}
if (jPushMessage.getErrorCode() == 0) { // success
Set<String> tags = jPushMessage.getTags();
JSONArray tagsJsonArr = new JSONArray();
for (String tag : tags) {
tagsJsonArr.put(tag);
}
try {
if (tagsJsonArr.length() != 0) {
resultJson.put("tags", tagsJsonArr);
}
} catch (JSONException e) {
e.printStackTrace();
}
callback.success(resultJson);
} else {
try {
resultJson.put("code", jPushMessage.getErrorCode());
} catch (JSONException e) {
e.printStackTrace();
}
callback.error(resultJson);
}
JPushPlugin.eventCallbackMap.remove(sequence);
}
@Override
public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
super.onCheckTagOperatorResult(context, jPushMessage);
JSONObject resultJson = new JSONObject();
int sequence = jPushMessage.getSequence();
try {
resultJson.put("sequence", sequence);
} catch (JSONException e) {
e.printStackTrace();
}
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!");
return;
}
if (jPushMessage.getErrorCode() == 0) {
try {
resultJson.put("tag", jPushMessage.getCheckTag());
resultJson.put("isBind", jPushMessage.getTagCheckStateResult());
} catch (JSONException e) {
e.printStackTrace();
}
} else {
try {
resultJson.put("code", jPushMessage.getErrorCode());
} catch (JSONException e) {
e.printStackTrace();
}
callback.error(resultJson);
}
JPushPlugin.eventCallbackMap.remove(sequence);
}
@Override
public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
super.onAliasOperatorResult(context, jPushMessage);
JSONObject resultJson = new JSONObject();
int sequence = jPushMessage.getSequence();
try {
resultJson.put("sequence", sequence);
} catch (JSONException e) {
e.printStackTrace();
}
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!");
return;
}
if (jPushMessage.getErrorCode() == 0) { // success
try {
if (!TextUtils.isEmpty(jPushMessage.getAlias())) {
resultJson.put("alias", jPushMessage.getAlias());
}
} catch (JSONException e) {
e.printStackTrace();
}
callback.success(resultJson);
} else {
try {
resultJson.put("code", jPushMessage.getErrorCode());
} catch (JSONException e) {
e.printStackTrace();
}
callback.error(resultJson);
}
JPushPlugin.eventCallbackMap.remove(sequence);
}
}

View File

@@ -35,53 +35,26 @@ 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 {
private final static List<String> methodList =
Arrays.asList(
"addLocalNotification",
"areNotificationEnabled",
"clearAllNotification",
"clearLocalNotifications",
"clearNotificationById",
"getNotification",
"getRegistrationID",
"init",
"isPushStopped",
"onPause",
"onResume",
"requestPermission",
"removeLocalNotification",
"reportNotificationOpened",
"resumePush",
"setAlias",
"setBasicPushNotificationBuilder",
"setCustomPushNotificationBuilder",
"setDebugMode",
"setLatestNotificationNum",
"setPushTime",
"setTags",
"setTagsWithAlias",
"setSilenceTime",
"setStatisticsOpen",
"stopPush"
);
private ExecutorService threadPool = Executors.newFixedThreadPool(1); private static final String TAG = JPushPlugin.class.getSimpleName();
private Context mContext;
private static JPushPlugin instance; private static JPushPlugin instance;
private static Activity cordovaActivity; private static Activity cordovaActivity;
private static String TAG = "JPushPlugin";
private static boolean shouldCacheMsg = false; static String notificationTitle;
private static boolean isStatisticsOpened = false; // 是否开启统计分析功能 static String notificationAlert;
static Map<String, Object> notificationExtras = new HashMap<String, Object>();
public static String notificationTitle; static String openNotificationTitle;
public static String notificationAlert; static String openNotificationAlert;
public static Map<String, Object> notificationExtras = new HashMap<String, Object>(); static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
public static String openNotificationTitle; static Map<Integer, CallbackContext> eventCallbackMap = new HashMap<Integer, CallbackContext>();
public static String openNotificationAlert;
public static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
public JPushPlugin() { public JPushPlugin() {
instance = this; instance = this;
@@ -89,10 +62,10 @@ public class JPushPlugin extends CordovaPlugin {
@Override @Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) { public void initialize(CordovaInterface cordova, CordovaWebView webView) {
Log.i(TAG, "JPush initialize.");
super.initialize(cordova, webView); super.initialize(cordova, webView);
JPushInterface.init(cordova.getActivity().getApplicationContext()); mContext = cordova.getActivity().getApplicationContext();
JPushInterface.init(mContext);
cordovaActivity = cordova.getActivity(); cordovaActivity = cordova.getActivity();
@@ -109,21 +82,7 @@ public class JPushPlugin extends CordovaPlugin {
} }
} }
public void onPause(boolean multitasking) {
Log.i(TAG, "---------------- onPause");
shouldCacheMsg = true;
if (isStatisticsOpened && multitasking) {
JPushInterface.onPause(this.cordova.getActivity());
}
}
public void onResume(boolean multitasking) { public void onResume(boolean multitasking) {
shouldCacheMsg = false;
Log.i(TAG, "---------------- onResume" + "-" + openNotificationAlert
+ "-" + notificationAlert);
if (isStatisticsOpened && multitasking) {
JPushInterface.onResume(this.cordova.getActivity());
}
if (openNotificationAlert != null) { if (openNotificationAlert != null) {
notificationAlert = null; notificationAlert = null;
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
@@ -142,15 +101,14 @@ public class JPushPlugin extends CordovaPlugin {
instance = null; instance = null;
} }
private static JSONObject getMessageObject(String message, private static JSONObject getMessageObject(String message, Map<String, Object> extras) {
Map<String, Object> extras) {
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
try { try {
data.put("message", message); data.put("message", message);
JSONObject jExtras = new JSONObject(); JSONObject jExtras = new JSONObject();
for (Entry<String, Object> entry : extras.entrySet()) { for (Entry<String, Object> entry : extras.entrySet()) {
if (entry.getKey().equals("cn.jpush.android.EXTRA")) { if (entry.getKey().equals("cn.jpush.android.EXTRA")) {
JSONObject jo = null; JSONObject jo;
if (TextUtils.isEmpty((String) entry.getValue())) { if (TextUtils.isEmpty((String) entry.getValue())) {
jo = new JSONObject(); jo = new JSONObject();
} else { } else {
@@ -176,8 +134,7 @@ public class JPushPlugin extends CordovaPlugin {
return data; return data;
} }
private static JSONObject getNotificationObject(String title, private static JSONObject getNotificationObject(String title, String alert, Map<String, Object> extras) {
String alert, Map<String, Object> extras) {
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
try { try {
data.put("title", title); data.put("title", title);
@@ -226,8 +183,7 @@ public class JPushPlugin extends CordovaPlugin {
}); });
} }
static void transmitNotificationOpen(String title, String alert, static void transmitNotificationOpen(String title, String alert, Map<String, Object> extras) {
Map<String, Object> extras) {
if (instance == null) { if (instance == null) {
return; return;
} }
@@ -244,8 +200,7 @@ public class JPushPlugin extends CordovaPlugin {
JPushPlugin.openNotificationAlert = null; JPushPlugin.openNotificationAlert = null;
} }
static void transmitNotificationReceive(String title, String alert, static void transmitNotificationReceive(String title, String alert, Map<String, Object> extras) {
Map<String, Object> extras) {
if (instance == null) { if (instance == null) {
return; return;
} }
@@ -285,10 +240,7 @@ 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) throws JSONException { final CallbackContext callbackContext) throws JSONException {
if (!methodList.contains(action)) { cordova.getThreadPool().execute(new Runnable() {
return false;
}
threadPool.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
@@ -304,7 +256,7 @@ public class JPushPlugin extends CordovaPlugin {
} }
void init(JSONArray data, CallbackContext callbackContext) { void init(JSONArray data, CallbackContext callbackContext) {
JPushInterface.init(this.cordova.getActivity().getApplicationContext()); JPushInterface.init(mContext);
} }
void setDebugMode(JSONArray data, CallbackContext callbackContext) { void setDebugMode(JSONArray data, CallbackContext callbackContext) {
@@ -319,18 +271,17 @@ public class JPushPlugin extends CordovaPlugin {
} }
void stopPush(JSONArray data, CallbackContext callbackContext) { void stopPush(JSONArray data, CallbackContext callbackContext) {
JPushInterface.stopPush(this.cordova.getActivity().getApplicationContext()); JPushInterface.stopPush(mContext);
callbackContext.success(); callbackContext.success();
} }
void resumePush(JSONArray data, CallbackContext callbackContext) { void resumePush(JSONArray data, CallbackContext callbackContext) {
JPushInterface.resumePush(this.cordova.getActivity().getApplicationContext()); JPushInterface.resumePush(mContext);
callbackContext.success(); callbackContext.success();
} }
void isPushStopped(JSONArray data, CallbackContext callbackContext) { void isPushStopped(JSONArray data, CallbackContext callbackContext) {
boolean isStopped = JPushInterface.isPushStopped( boolean isStopped = JPushInterface.isPushStopped(mContext);
this.cordova.getActivity().getApplicationContext());
if (isStopped) { if (isStopped) {
callbackContext.success(1); callbackContext.success(1);
} else { } else {
@@ -358,7 +309,7 @@ public class JPushPlugin extends CordovaPlugin {
} }
if (num != -1) { if (num != -1) {
JPushInterface.setLatestNotificationNumber( JPushInterface.setLatestNotificationNumber(
this.cordova.getActivity().getApplicationContext(), num); mContext, num);
} else { } else {
callbackContext.error("error num"); callbackContext.error("error num");
} }
@@ -384,13 +335,13 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
callbackContext.error("error reading hour json"); callbackContext.error("error reading hour json");
} }
Context context = this.cordova.getActivity().getApplicationContext(); Context context = mContext;
JPushInterface.setPushTime(context, days, startHour, endHour); JPushInterface.setPushTime(context, days, startHour, endHour);
callbackContext.success(); callbackContext.success();
} }
void getRegistrationID(JSONArray data, CallbackContext callbackContext) { void getRegistrationID(JSONArray data, CallbackContext callbackContext) {
Context context = this.cordova.getActivity().getApplicationContext(); Context context = mContext;
String regID = JPushInterface.getRegistrationID(context); String regID = JPushInterface.getRegistrationID(context);
callbackContext.success(regID); callbackContext.success(regID);
} }
@@ -413,49 +364,167 @@ public class JPushPlugin extends CordovaPlugin {
} }
} }
void setTags(JSONArray data, CallbackContext callbackContext) {
try {
HashSet<String> tags = new HashSet<String>();
for (int i = 0; i < data.length(); i++) {
tags.add(data.getString(i));
}
JPushInterface.setTags(this.cordova.getActivity().getApplicationContext(),
tags, mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading tags JSON");
}
}
void setAlias(JSONArray data, CallbackContext callbackContext) { void setAlias(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
String alias = null;
try { try {
String alias = data.getString(0); JSONObject params = data.getJSONObject(0);
JPushInterface.setAlias(this.cordova.getActivity().getApplicationContext(), sequence = params.getInt("sequence");
alias, mTagWithAliasCallback); alias = params.getString("alias");
callbackContext.success();
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Error reading alias JSON"); callbackContext.error("Parameters error.");
} }
JPushInterface.setAlias(mContext, sequence, alias);
eventCallbackMap.put(sequence, callbackContext);
} }
void setTagsWithAlias(JSONArray data, CallbackContext callbackContext) { void deleteAlias(JSONArray data, CallbackContext callbackContext) {
HashSet<String> tags = new HashSet<String>(); int sequence = -1;
String alias;
try { try {
alias = data.getString(0); JSONObject params = data.getJSONObject(0);
JSONArray tagsArray = data.getJSONArray(1); sequence = params.getInt("sequence");
for (int i = 0; i < tagsArray.length(); i++) {
tags.add(tagsArray.getString(i));
}
JPushInterface.setAliasAndTags(this.cordova.getActivity().getApplicationContext(),
alias, tags, mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Error reading tagAlias JSON"); callbackContext.error("Parameters error.");
} }
JPushInterface.deleteAlias(mContext, sequence);
eventCallbackMap.put(sequence, callbackContext);
}
void getAlias(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.getAlias(mContext, sequence);
eventCallbackMap.put(sequence, callbackContext);
}
void setTags(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
Set<String> tags = new HashSet<String>();
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
JSONArray tagsArr = params.getJSONArray("tags");
for (int i = 0; i < tagsArr.length(); i++) {
tags.add(tagsArr.getString(i));
}
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.setTags(mContext, sequence, tags);
eventCallbackMap.put(sequence, callbackContext);
}
void addTags(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
Set<String> tags = new HashSet<String>();
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
JSONArray tagsArr = params.getJSONArray("tags");
for (int i = 0; i < tagsArr.length(); i++) {
tags.add(tagsArr.getString(i));
}
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.addTags(mContext, sequence, tags);
eventCallbackMap.put(sequence, callbackContext);
}
void deleteTags(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
Set<String> tags = new HashSet<String>();
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
JSONArray tagsArr = params.getJSONArray("tags");
for (int i = 0; i < tagsArr.length(); i++) {
tags.add(tagsArr.getString(i));
}
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.deleteTags(mContext, sequence, tags);
eventCallbackMap.put(sequence, callbackContext);
}
void cleanTags(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.cleanTags(mContext, sequence);
eventCallbackMap.put(sequence, callbackContext);
}
void getAllTags(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.getAllTags(mContext, sequence);
eventCallbackMap.put(sequence, callbackContext);
}
void checkTagBindState(JSONArray data, CallbackContext callbackContext) {
int sequence = -1;
String tag = null;
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
tag = params.getString("tag");
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
}
JPushInterface.checkTagBindState(mContext, sequence, tag);
eventCallbackMap.put(sequence, callbackContext);
} }
void getConnectionState(JSONArray data, CallbackContext callback) { void getConnectionState(JSONArray data, CallbackContext callback) {
@@ -466,8 +535,7 @@ public class JPushPlugin extends CordovaPlugin {
/** /**
* 自定义通知行为,声音、震动、呼吸灯等。 * 自定义通知行为,声音、震动、呼吸灯等。
*/ */
void setBasicPushNotificationBuilder(JSONArray data, void setBasicPushNotificationBuilder(JSONArray data, CallbackContext callbackContext) {
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";
@@ -513,8 +581,7 @@ public class JPushPlugin extends CordovaPlugin {
} }
} }
void addLocalNotification(JSONArray data, CallbackContext callbackContext) void addLocalNotification(JSONArray data, CallbackContext callbackContext) throws JSONException {
throws JSONException {
int builderId = data.getInt(0); int builderId = data.getInt(0);
String content = data.getString(1); String content = data.getString(1);
String title = data.getString(2); String title = data.getString(2);
@@ -537,8 +604,7 @@ public class JPushPlugin extends CordovaPlugin {
JPushInterface.addLocalNotification(this.cordova.getActivity(), ln); JPushInterface.addLocalNotification(this.cordova.getActivity(), ln);
} }
void removeLocalNotification(JSONArray data, CallbackContext callbackContext) void removeLocalNotification(JSONArray data, CallbackContext callbackContext) throws JSONException {
throws JSONException {
int notificationID = data.getInt(0); int notificationID = data.getInt(0);
JPushInterface.removeLocalNotification(this.cordova.getActivity(), notificationID); JPushInterface.removeLocalNotification(this.cordova.getActivity(), notificationID);
} }
@@ -547,17 +613,6 @@ public class JPushPlugin extends CordovaPlugin {
JPushInterface.clearLocalNotifications(this.cordova.getActivity()); JPushInterface.clearLocalNotifications(this.cordova.getActivity());
} }
/**
* 决定是否启用统计分析功能。
*/
void setStatisticsOpen(JSONArray data, CallbackContext callbackContext) {
try {
isStatisticsOpened = data.getBoolean(0);
} catch (JSONException e) {
e.printStackTrace();
}
}
/** /**
* 设置通知静默时间 * 设置通知静默时间
* http://docs.jpush.io/client/android_api/#api_5 * http://docs.jpush.io/client/android_api/#api_5
@@ -634,7 +689,7 @@ public class JPushPlugin extends CordovaPlugin {
String pkg = context.getPackageName(); String pkg = context.getPackageName();
int uid = appInfo.uid; int uid = appInfo.uid;
Class appOpsClazz = null; Class appOpsClazz;
try { try {
appOpsClazz = Class.forName(AppOpsManager.class.getName()); appOpsClazz = Class.forName(AppOpsManager.class.getName());

Binary file not shown.

View File

@@ -1,154 +1,170 @@
// //
// AppDelegate+JPush.m // AppDelegate+JPush.m
// delegateExtention // delegateExtention
// //
// Created by on 15/8/3. // Created by on 15/8/3.
// Copyright (c) 2015 JPush. All rights reserved. // Copyright (c) 2015 JPush. All rights reserved.
// //
#import "AppDelegate+JPush.h" #import "AppDelegate+JPush.h"
#import "JPushPlugin.h" #import "JPushPlugin.h"
#import <objc/runtime.h> #import <objc/runtime.h>
#import <AdSupport/AdSupport.h> #import <AdSupport/AdSupport.h>
#import <UserNotifications/UserNotifications.h> #import <UserNotifications/UserNotifications.h>
#import "JPushDefine.h" #import "JPushDefine.h"
@implementation AppDelegate (JPush) @implementation AppDelegate (JPush)
+(void)load{ +(void)load{
Method origin1; Method origin1;
Method swizzle1; Method swizzle1;
origin1 = class_getInstanceMethod([self class],@selector(init)); origin1 = class_getInstanceMethod([self class],@selector(init));
swizzle1 = class_getInstanceMethod([self class], @selector(init_plus)); swizzle1 = class_getInstanceMethod([self class], @selector(init_plus));
method_exchangeImplementations(origin1, swizzle1); method_exchangeImplementations(origin1, swizzle1);
} }
-(instancetype)init_plus{ -(instancetype)init_plus{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidLaunch:) name:UIApplicationDidFinishLaunchingNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidLaunch:) name:UIApplicationDidFinishLaunchingNotification object:nil];
return [self init_plus]; return [self init_plus];
} }
-(void)fireOpenNotification:(NSTimer*)timer{ -(void)fireOpenNotification:(NSTimer*)timer{
if (SharedJPushPlugin) { if (SharedJPushPlugin) {
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[timer.userInfo toJsonString]]; [JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[timer.userInfo toJsonString]];
[timer invalidate]; [timer invalidate];
} }
} }
NSDictionary *_launchOptions; NSDictionary *_launchOptions;
-(void)applicationDidLaunch:(NSNotification *)notification{ -(void)applicationDidLaunch:(NSNotification *)notification{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jpushSDKDidLoginNotification) name:kJPFNetworkDidLoginNotification object:nil];
if (notification) {
if (notification.userInfo) { if (notification) {
NSDictionary *userInfo1 = [notification.userInfo valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (notification.userInfo) {
if (userInfo1.count > 0) {
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(fireOpenNotification:) userInfo:userInfo1 repeats:YES]; if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
} [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(fireOpenNotification:)
userInfo:[notification.userInfo
NSDictionary *userInfo2 = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]; valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey] repeats:YES];
if (userInfo2.count > 0) { }
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(fireOpenNotification:) userInfo:userInfo2 repeats:YES];
} if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]) {
} UILocalNotification *localNotification = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
[JPUSHService setDebugMode];
NSDictionary* localNotificationEvent = @{@"content":localNotification.alertBody,
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"]; @"badge": @(localNotification.applicationIconBadgeNumber),
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; @"extras":localNotification.userInfo,
NSNumber *delay = [plistData valueForKey:JPushConfig_Delay]; };
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(fireOpenNotification:) userInfo:localNotificationEvent repeats:YES];
_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];
-(void)startJPushSDK{
[self registerForRemoteNotification]; _launchOptions = notification.userInfo;
[JPushPlugin setupJPushSDK:_launchOptions];
} if (![delay boolValue]) {
[self startJPushSDK];
-(void)registerForRemoteNotification{ }
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { }
#ifdef NSFoundationVersionNumber_iOS_9_x_Max }
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound; -(void)startJPushSDK{
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; [self registerForRemoteNotification];
#endif [JPushPlugin setupJPushSDK:_launchOptions];
}else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { }
//categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | - (void)jpushSDKDidLoginNotification {
UIUserNotificationTypeSound | NSDictionary *event = @{@"registrationId": JPUSHService.registrationID};
UIUserNotificationTypeAlert) [JPushPlugin fireDocumentEvent:JPushDocumentEvent_receiveRegistrationId jsString:[event toJsonString]];
categories:nil]; }
} else if([[UIDevice currentDevice].systemVersion floatValue] < 8.0){
//categories nil -(void)registerForRemoteNotification{
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
UIRemoteNotificationTypeSound | #ifdef NSFoundationVersionNumber_iOS_9_x_Max
UIRemoteNotificationTypeAlert) JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
categories:nil]; entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
} [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
} #endif
}else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { //categories
[JPUSHService registerDeviceToken:deviceToken]; [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
} UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ categories:nil];
[JPUSHService handleRemoteNotification:userInfo]; } else if([[UIDevice currentDevice].systemVersion floatValue] < 8.0){
//categories nil
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]]; [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
} UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ categories:nil];
[JPUSHService handleRemoteNotification:userInfo]; }
NSString *eventName; }
switch ([UIApplication sharedApplication].applicationState) {
case UIApplicationStateInactive: - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
eventName = JPushDocumentEvent_OpenNotification; [JPUSHService registerDeviceToken:deviceToken];
break; }
case UIApplicationStateActive:
eventName = JPushDocumentEvent_ReceiveNotification; -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
break; [JPUSHService handleRemoteNotification:userInfo];
case UIApplicationStateBackground:
eventName = JPushDocumentEvent_BackgroundNotification; [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
break; }
default:
break; -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
} [JPUSHService handleRemoteNotification:userInfo];
[JPushPlugin fireDocumentEvent:eventName jsString:[userInfo toJsonString]]; NSString *eventName;
completionHandler(UIBackgroundFetchResultNewData); switch ([UIApplication sharedApplication].applicationState) {
} case UIApplicationStateInactive:
eventName = JPushDocumentEvent_OpenNotification;
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{ break;
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:notification.request.content.userInfo]; case UIApplicationStateActive:
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]]; eventName = JPushDocumentEvent_ReceiveNotification;
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); break;
} case UIApplicationStateBackground:
eventName = JPushDocumentEvent_BackgroundNotification;
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{ break;
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:response.notification.request.content.userInfo]; default:
@try { break;
[userInfo setValue:[response valueForKey:@"userText"] forKey:@"userText"]; }
} @catch (NSException *exception) { } [JPushPlugin fireDocumentEvent:eventName jsString:[userInfo toJsonString]];
[userInfo setValue:response.actionIdentifier forKey:@"actionIdentifier"]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[userInfo toJsonString]]; completionHandler(UIBackgroundFetchResultNewData);
completionHandler(); });
} }
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { -(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
[[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:notification.userInfo]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:notification.request.content.userInfo];
} [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
- (void)applicationWillEnterForeground:(UIApplication *)application { }
// [application setApplicationIconBadgeNumber:0];
// [application cancelAllLocalNotifications]; -(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
} NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:response.notification.request.content.userInfo];
@try {
- (void)applicationDidEnterBackground:(UIApplication *)application { [userInfo setValue:[response valueForKey:@"userText"] forKey:@"userText"];
// [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } @catch (NSException *exception) { }
} [userInfo setValue:response.actionIdentifier forKey:@"actionIdentifier"];
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[userInfo toJsonString]];
@end completionHandler();
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:notification.userInfo];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// [application setApplicationIconBadgeNumber:0];
// [application cancelAllLocalNotifications];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
@end

View File

@@ -27,7 +27,6 @@ static NSString *const JPushDocumentEvent_OpenNotification = @"openNoti
static NSString *const JPushDocumentEvent_BackgroundNotification = @"backgroundNotification"; static NSString *const JPushDocumentEvent_BackgroundNotification = @"backgroundNotification";
static NSString *const JPushDocumentEvent_SetTagsWithAlias = @"setTagsWithAlias"; static NSString *const JPushDocumentEvent_SetTagsWithAlias = @"setTagsWithAlias";
static NSString *const JPushDocumentEvent_ReceiveMessage = @"receiveMessage"; static NSString *const JPushDocumentEvent_ReceiveMessage = @"receiveMessage";
static NSString *const JPushDocumentEvent_StartLocalNotification = @"startLocalNotification";
static NSString *const JPushDocumentEvent_ReceiveLocalNotification = @"receiveLocalNotification"; static NSString *const JPushDocumentEvent_ReceiveLocalNotification = @"receiveLocalNotification";
static NSString *const JPushDocumentEvent_receiveRegistrationId = @"receiveRegistrationId";

View File

@@ -17,9 +17,16 @@
//以下为js中可调用接口 //以下为js中可调用接口
//设置标签、别名 //设置标签、别名
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command;
-(void)setTags:(CDVInvokedUrlCommand*)command; -(void)setTags:(CDVInvokedUrlCommand*)command;
-(void)addTags:(CDVInvokedUrlCommand*)command;
-(void)deleteTags:(CDVInvokedUrlCommand*)command;
-(void)cleanTags:(CDVInvokedUrlCommand*)command;
-(void)getAllTags:(CDVInvokedUrlCommand*)command;
-(void)checkTagBindState:(CDVInvokedUrlCommand*)command;
-(void)setAlias:(CDVInvokedUrlCommand*)command; -(void)setAlias:(CDVInvokedUrlCommand*)command;
-(void)deleteAlias:(CDVInvokedUrlCommand*)command;
-(void)getAlias:(CDVInvokedUrlCommand*)command;
//获取 RegistrationID //获取 RegistrationID
-(void)getRegistrationID:(CDVInvokedUrlCommand*)command; -(void)getRegistrationID:(CDVInvokedUrlCommand*)command;
@@ -67,7 +74,6 @@
/* /*
* 以下为js中可监听到的事件 * 以下为js中可监听到的事件
* jpush.openNotification 点击推送消息启动或唤醒app * jpush.openNotification 点击推送消息启动或唤醒app
* jpush.setTagsWithAlias 设置标签、别名完成
* jpush.receiveMessage 收到自定义消息 * jpush.receiveMessage 收到自定义消息
* jpush.receiveNotification 前台收到推送 * jpush.receiveNotification 前台收到推送
* jpush.backgroundNotification 后台收到推送 * jpush.backgroundNotification 后台收到推送

View File

@@ -1,12 +1,3 @@
//
// PushTalkPlugin.m
// PushTalk
//
// Created by zhangqinghe on 13-12-13.
//
//
#import "JPushPlugin.h" #import "JPushPlugin.h"
#import "JPUSHService.h" #import "JPUSHService.h"
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
@@ -96,48 +87,210 @@
}); });
} }
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command{ -(void)setTags:(CDVInvokedUrlCommand*)command {
NSString *alias = [command argumentAtIndex:0]; NSDictionary* params = [command.arguments objectAtIndex:0];
NSArray *tags = [command argumentAtIndex:1]; NSNumber* sequence = params[@"sequence"];
NSArray* tags = params[@"tags"];
[JPUSHService setTags:[NSSet setWithArray:tags]
alias:alias [JPUSHService setTags:[NSSet setWithArray:tags]
fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) { completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
CDVPluginResult *result; NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
if (iResCode == 0) { [dic setObject:sequence forKey:@"sequence"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil];
} else { CDVPluginResult* result;
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
} if (iResCode == 0) {
}]; [dic setObject:[iTags allObjects] forKey:@"tags"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
} }
-(void)setTags:(CDVInvokedUrlCommand*)command{ -(void)addTags:(CDVInvokedUrlCommand *)command {
NSArray *tags = command.arguments; NSDictionary* params = [command.arguments objectAtIndex:0];
[JPUSHService setTags:[NSSet setWithArray:tags] NSNumber* sequence = params[@"sequence"];
alias:nil NSArray* tags = params[@"tags"];
fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
CDVPluginResult *result; [JPUSHService addTags:[NSSet setWithArray:tags]
if (iResCode == 0) { completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
} else { [dic setObject:sequence forKey:@"sequence"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
} CDVPluginResult* result;
}];
if (iResCode == 0) {
[dic setObject:[iTags allObjects] forKey:@"tags"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
} }
-(void)setAlias:(CDVInvokedUrlCommand*)command{ -(void)deleteTags:(CDVInvokedUrlCommand *)command {
NSString *alias = [command argumentAtIndex:0]; NSDictionary* params = [command.arguments objectAtIndex:0];
[JPUSHService setTags:nil NSNumber* sequence = params[@"sequence"];
alias:alias NSArray* tags = params[@"tags"];
fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
CDVPluginResult *result; [JPUSHService deleteTags:[NSSet setWithArray:tags]
if (iResCode == 0) { completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil]; NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
} else { [dic setObject:sequence forKey:@"sequence"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
} CDVPluginResult* result;
}];
if (iResCode == 0) {
[dic setObject:[iTags allObjects] forKey:@"tags"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
}
-(void)cleanTags:(CDVInvokedUrlCommand *)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
[JPUSHService cleanTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (iResCode == 0) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
}
-(void)getAllTags:(CDVInvokedUrlCommand *)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
[JPUSHService getAllTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (iResCode == 0) {
[dic setObject:[iTags allObjects] forKey:@"tags"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
}
-(void)checkTagBindState:(CDVInvokedUrlCommand *)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
NSString* tag = params[@"tag"];
[JPUSHService validTag:tag completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (iResCode == 0) {
[dic setObject:[iTags allObjects] forKey:@"tags"];
[dic setObject:[NSNumber numberWithBool:isBind] forKey:@"isBind"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
}
-(void)setAlias:(CDVInvokedUrlCommand*)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
NSString* alias = params[@"alias"];
[JPUSHService setAlias:alias completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (iResCode == 0) {
[dic setObject:iAlias forKey:@"alias"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
}
-(void)deleteAlias:(CDVInvokedUrlCommand*)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (iResCode == 0) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
}
-(void)getAlias:(CDVInvokedUrlCommand*)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
[JPUSHService getAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (iResCode == 0) {
[dic setObject:iAlias forKey:@"alias"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
} else {
[dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} seq:[sequence integerValue]];
} }
-(void)getRegistrationID:(CDVInvokedUrlCommand*)command{ -(void)getRegistrationID:(CDVInvokedUrlCommand*)command{
@@ -343,16 +496,7 @@
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
} }
#pragma mark -(void)networkDidReceiveMessage:(NSNotification *)notification {
-(void)tagsWithAliasCallback:(int)resultCode tags:(NSSet *)tags alias:(NSString *)alias {
if (resultCode == 0) { // Success
} else {
}
}
- (void)networkDidReceiveMessage:(NSNotification *)notification {
if (notification && notification.userInfo) { if (notification && notification.userInfo) {
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage
jsString:[notification.userInfo toJsonString]]; jsString:[notification.userInfo toJsonString]];

157
src/ios/lib/JPUSHService.h Normal file → Executable file
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.5 #define JPUSH_VERSION_NUMBER 3.0.7
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
@@ -22,6 +22,10 @@
@class UNNotification; @class UNNotification;
@protocol JPUSHRegisterDelegate; @protocol JPUSHRegisterDelegate;
typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq);
typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind);
typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq);
extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中 extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接 extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接 extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接
@@ -137,6 +141,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识. * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识.
* @param channel 发布渠道. 可选. * @param channel 发布渠道. 可选.
* @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES.
* App 证书环境取决于profile provision的配置此处建议与证书环境保持一致.
* @param advertisingIdentifier 广告标识符IDFA 如果不需要使用IDFA传nil. * @param advertisingIdentifier 广告标识符IDFA 如果不需要使用IDFA传nil.
* *
* @discussion 提供SDK启动必须的参数, 来启动 SDK. * @discussion 提供SDK启动必须的参数, 来启动 SDK.
@@ -186,41 +191,102 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo; + (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
///----------------------------------------------------
/// @name Tag alias setting 设置别名与标签
///----------------------------------------------------
/*! /*!
* 下面的接口是可选的 * Tags操作接口
* 设置标签和(或)别名若参数为nil则忽略若是空对象则清空详情请参考文档https://docs.jiguang.cn/jpush/client/iOS/ios_api/ * 支持增加/覆盖/删除/清空/查询操作
* setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法不再需要显示声明回调函数只需要在block里面处理设置结果即可. * 详情请参考文档https://docs.jiguang.cn/jpush/client/iOS/ios_api/
* WARN: 使用block时需要注意循环引用问题
*/ */
+ (void) setTags:(NSSet *)tags
alias:(NSString *)alias
callbackSelector:(SEL)cbSelector
target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期")));
+ (void) setTags:(NSSet *)tags /**
alias:(NSString *)alias 增加tags
callbackSelector:(SEL)cbSelector
object:(id)theTarget;
+ (void) setTags:(NSSet *)tags @param tags 需要增加的tags集合
callbackSelector:(SEL)cbSelector @param completion 响应回调
object:(id)theTarget; @param seq 请求序列号
*/
+ (void)addTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
+ (void)setTags:(NSSet *)tags /**
alias:(NSString *)alias 覆盖tags
fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler; 调用该接口会覆盖用户所有的tags
+ (void) setTags:(NSSet *)tags @param tags 需要设置的tags集合
aliasInbackground:(NSString *)alias; @param completion 响应回调
@param seq 请求序列号
*/
+ (void)setTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
删除指定tags
@param tags 需要删除的tags集合
@param completion 响应回调
@param seq 请求序列号
*/
+ (void)deleteTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
清空所有tags
@param completion 响应回调
@param seq 请求序列号
*/
+ (void)cleanTags:(JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
查询全部tags
@param completion 响应回调,请在回调中获取查询结果
@param seq 请求序列号
*/
+ (void)getAllTags:(JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
验证tag是否绑定
@param completion 响应回调,回调中查看是否绑定
@param seq 请求序列号
*/
+ (void)validTag:(NSString *)tag
completion:(JPUSHTagValidOperationCompletion)completion
seq:(NSInteger)seq;
/**
设置Alias
@param alias 需要设置的alias
@param completion 响应回调
@param seq 请求序列号
*/
+ (void)setAlias:(NSString *)alias + (void)setAlias:(NSString *)alias
callbackSelector:(SEL)cbSelector completion:(JPUSHAliasOperationCompletion)completion
object:(id)theTarget; seq:(NSInteger)seq;
/**
删除alias
@param completion 响应回调
@param seq 请求序列号
*/
+ (void)deleteAlias:(JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
查询当前alias
@param completion 响应回调
@param seq 请求序列号
*/
+ (void)getAlias:(JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/*! /*!
* @abstract 过滤掉无效的 tags * @abstract 过滤掉无效的 tags
@@ -230,7 +296,6 @@ callbackSelector:(SEL)cbSelector
*/ */
+ (NSSet *)filterValidTags:(NSSet *)tags; + (NSSet *)filterValidTags:(NSSet *)tags;
///---------------------------------------------------- ///----------------------------------------------------
/// @name Stats 统计功能 /// @name Stats 统计功能
///---------------------------------------------------- ///----------------------------------------------------
@@ -471,6 +536,40 @@ callbackSelector:(SEL)cbSelector
*/ */
+ (void)setLogOFF; + (void)setLogOFF;
///----------------------------------------------------
///********************下列方法已过期********************
///**************请使用新版tag/alias操作接口**************
///----------------------------------------------------
/// @name Tag alias setting 设置别名与标签
///----------------------------------------------------
/*!
* 下面的接口是可选的
* 设置标签和(或)别名若参数为nil则忽略若是空对象则清空详情请参考文档https://docs.jiguang.cn/jpush/client/iOS/ios_api/
* setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法不再需要显示声明回调函数只需要在block里面处理设置结果即可.
* WARN: 使用block时需要注意循环引用问题
*/
+ (void) setTags:(NSSet *)tags
alias:(NSString *)alias
callbackSelector:(SEL)cbSelector
target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期")));
+ (void) setTags:(NSSet *)tags
alias:(NSString *)alias
callbackSelector:(SEL)cbSelector
object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void) setTags:(NSSet *)tags
callbackSelector:(SEL)cbSelector
object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void)setTags:(NSSet *)tags
alias:(NSString *)alias
fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void) setTags:(NSSet *)tags
aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void)setAlias:(NSString *)alias
callbackSelector:(SEL)cbSelector
object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
@end @end
@class UNUserNotificationCenter; @class UNUserNotificationCenter;

Binary file not shown.

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

Binary file not shown.

View File

@@ -70,26 +70,87 @@ JPushPlugin.prototype.clearLocalNotifications = function () {
} }
} }
JPushPlugin.prototype.setTagsWithAlias = function (tags, alias, successCallback, errorCallback) { /**
if (tags == null) { * 设置标签。
this.setAlias(alias) * 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
return *
} * @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
if (alias == null) { */
this.setTags(tags) JPushPlugin.prototype.setTags = function (params, successCallback, errorCallback) {
return this.callNative('setTags', [params], successCallback, errorCallback)
}
var arrayTagWithAlias = [tags]
arrayTagWithAlias.unshift(alias)
this.callNative('setTagsWithAlias', arrayTagWithAlias, successCallback, errorCallback)
} }
JPushPlugin.prototype.setTags = function (tags, successCallback, errorCallback) { /**
this.callNative('setTags', tags, successCallback, errorCallback) * 新增标签。
*
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
*/
JPushPlugin.prototype.addTags = function (params, successCallback, errorCallback) {
this.callNative('addTags', [params], successCallback, errorCallback)
} }
JPushPlugin.prototype.setAlias = function (alias, successCallback, errorCallback) { /**
this.callNative('setAlias', [alias], successCallback, errorCallback) * 删除指定标签。
*
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
*/
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)
}
/**
* 查询所有标签。
*
* @param params = { 'sequence': number }
*/
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)
}
/**
* 设置别名。
* 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
*
* @param params = { 'sequence': number, 'alias': string }
*/
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)
}
/**
* 查询当前绑定的别名。
*
* @param params = { 'sequence': number }
*/
JPushPlugin.prototype.getAlias = function (params, successCallback, errorCallback) {
this.callNative('getAlias', [params], successCallback, errorCallback)
} }
// 判断系统设置中是否对本应用启用通知。 // 判断系统设置中是否对本应用启用通知。
@@ -236,21 +297,18 @@ JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function (data) {
JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) { JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) {
data = JSON.stringify(data) data = JSON.stringify(data)
console.log('JPushPlugin:receiveMessageInAndroidCallback: ' + 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)
console.log('JPushPlugin:openNotificationInAndroidCallback: ' + 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)
console.log('JPushPlugin:receiveNotificationInAndroidCallback: ' + data)
this.receiveNotification = JSON.parse(data) this.receiveNotification = JSON.parse(data)
cordova.fireDocumentEvent('jpush.receiveNotification', this.receiveNotification) cordova.fireDocumentEvent('jpush.receiveNotification', this.receiveNotification)
} }
@@ -293,16 +351,6 @@ JPushPlugin.prototype.reportNotificationOpened = function (msgID) {
} }
} }
/**
*是否开启统计分析功能,用于“用户使用时长”,“活跃用户”,“用户打开次数”的统计,并上报到服务器上,
*在 Portal 上展示给开发者。
*/
JPushPlugin.prototype.setStatisticsOpen = function (mode) {
if (device.platform === 'Android') {
this.callNative('setStatisticsOpen', [mode], 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