mirror of
https://github.com/jpush/jpush-phonegap-plugin.git
synced 2026-04-19 00:03:45 +08:00
Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
592d5a5fb9 | ||
|
|
83293656da | ||
|
|
4753174bda | ||
|
|
8a55aaa429 | ||
|
|
b5f32e5107 | ||
|
|
7afb705555 | ||
|
|
e71c6f3505 | ||
|
|
ff65c09d4e | ||
|
|
8398bb56f1 | ||
|
|
291aa7b8bf | ||
|
|
5c00243986 | ||
|
|
3ce2babd9b | ||
|
|
a27cc445ee | ||
|
|
3f077e32fd | ||
|
|
e9ddd798ad | ||
|
|
5c569d00da | ||
|
|
5fca83c8b7 | ||
|
|
d50b74cfab | ||
|
|
c7bc0ea4c2 | ||
|
|
c5f7963425 | ||
|
|
021725e054 | ||
|
|
a4eaf51455 | ||
|
|
5d27dca472 | ||
|
|
09f98f7c38 | ||
|
|
7b1a77aecb | ||
|
|
04fae7d538 | ||
|
|
0436cfcf3e | ||
|
|
3c70127405 | ||
|
|
8e087e102a | ||
|
|
9f5fccefec | ||
|
|
be07c7383b | ||
|
|
2df6ea47a8 | ||
|
|
35c09c0c92 | ||
|
|
c72cde6632 | ||
|
|
f0a87962e7 | ||
|
|
f31881d88a | ||
|
|
31eef706e4 | ||
|
|
2cf2bcf970 | ||
|
|
5d42764438 | ||
|
|
a5a03a3214 | ||
|
|
7b70564f82 | ||
|
|
6059f546f6 | ||
|
|
d855a07271 | ||
|
|
c1e70448b1 | ||
|
|
a9f6adb7af | ||
|
|
847d94c080 | ||
|
|
c959fdddeb | ||
|
|
4285170332 | ||
|
|
86f07c9729 | ||
|
|
e3d8d69147 | ||
|
|
8970e44dc1 | ||
|
|
7f3682e2a8 | ||
|
|
dd716aaca7 | ||
|
|
f5394d6d01 | ||
|
|
2fc0bc9213 | ||
| 4bc2fe3dc1 | |||
|
|
3bf9dae294 | ||
|
|
ca88f5878a | ||
|
|
8d9a7fa8b0 | ||
|
|
dead85a931 | ||
|
|
95330b11ed | ||
|
|
cba5ffbabb | ||
|
|
d524d8db00 | ||
|
|
e20a10588f | ||
|
|
eefc2e13cb | ||
|
|
e8417df550 | ||
|
|
89293001e8 | ||
|
|
78222b7123 | ||
|
|
1fb48e886f | ||
|
|
28a9c298c8 | ||
|
|
c65c5a4057 | ||
|
|
6a47116b82 | ||
|
|
68b217d8a8 | ||
|
|
13b36b746c | ||
|
|
b234861e44 | ||
|
|
2287ef10dd | ||
|
|
2a05ea1784 | ||
|
|
9d3d32d725 | ||
|
|
3c88e87b17 | ||
|
|
b3b2af1520 | ||
|
|
6e8b5931fb | ||
|
|
23ed4817a4 | ||
|
|
9a1da318cc |
40
.gitignore
vendored
40
.gitignore
vendored
@@ -1 +1,39 @@
|
|||||||
.DS_Store
|
# Created by https://www.gitignore.io/api/macos,apachecordova
|
||||||
|
|
||||||
|
### ApacheCordova ###
|
||||||
|
# Apache Cordova generated files and directories
|
||||||
|
bin/*
|
||||||
|
!/plugins
|
||||||
|
!/plugins/android.json
|
||||||
|
!/plugins/fetch.json
|
||||||
|
plugins/*
|
||||||
|
platforms/*
|
||||||
|
|
||||||
|
### macOS ###
|
||||||
|
*.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Icon must end with two \r
|
||||||
|
Icon
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
|
|
||||||
|
# End of https://www.gitignore.io/api/macos,apachecordova
|
||||||
|
|||||||
70
README.md
70
README.md
@@ -1,57 +1,83 @@
|
|||||||
# JPush PhoneGap / Cordova Plugin
|
# JPush PhoneGap / Cordova Plugin
|
||||||
|
|
||||||
[](https://travis-ci.org/jpush/jpush-phonegap-plugin)
|
[](https://travis-ci.org/jpush/jpush-phonegap-plugin)
|
||||||
[]()
|
[](https://github.com/jpush/jpush-phonegap-plugin/releases)
|
||||||
[](https://github.com/jpush/jpush-phonegap-plugin/releases)
|
|
||||||
[](https://github.com/jpush/jpush-phonegap-plugin)
|
[](https://github.com/jpush/jpush-phonegap-plugin)
|
||||||
[](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)
|
[](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+:
|
||||||
|
|
||||||
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey
|
```shell
|
||||||
|
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey
|
||||||
|
```
|
||||||
|
|
||||||
- 或直接通过 url 安装:
|
- 或直接通过 url 安装:
|
||||||
|
|
||||||
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey
|
```shell
|
||||||
|
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey
|
||||||
|
```
|
||||||
|
|
||||||
- 或下载到本地安装:
|
- 或下载到本地安装:
|
||||||
|
|
||||||
cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey
|
```shell
|
||||||
|
cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey
|
||||||
|
```
|
||||||
|
|
||||||
|
> 在使用 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 文档。若还无法解决,可访问[极光社区](http://community.jiguang.cn/)或 [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 会限制一般应用服务的自启动,也就是
|
||||||
在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。
|
在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。
|
||||||
|
|
||||||
@@ -68,7 +94,7 @@ Android 的推送通过长连接的方式实现,只有在连接保持的情况
|
|||||||
|
|
||||||
#### 打包时遇到 i386 打包失败怎么办?
|
#### 打包时遇到 i386 打包失败怎么办?
|
||||||
|
|
||||||
```
|
```shell
|
||||||
cordova platform update ios
|
cordova platform update ios
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -84,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)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
- [通知栏样式定制](#通知栏样式定制)
|
- [通知栏样式定制](#通知栏样式定制)
|
||||||
- [设置保留最近通知条数](#设置保留最近通知条数)
|
- [设置保留最近通知条数](#设置保留最近通知条数)
|
||||||
- [本地通知](#本地通知)
|
- [本地通知](#本地通知)
|
||||||
- [富媒体页面 JavaScript 回调 API](#富媒体页面-javascript-回调-api)
|
|
||||||
|
|
||||||
## 注册成功事件
|
## 注册成功事件
|
||||||
### jpush.receiveRegistrationId
|
### jpush.receiveRegistrationId
|
||||||
@@ -21,36 +20,37 @@
|
|||||||
就会触发这个事件(注意只有第一次会触发该事件,之后如果想要取到 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.JPush.receiveNotification.alert
|
||||||
- 标题:
|
- 标题:
|
||||||
window.plugins.jPushPlugin.receiveNotification.title
|
window.JPush.receiveNotification.title
|
||||||
- 附加字段:
|
- 附加字段:
|
||||||
window.plugins.jPushPlugin.receiveNotification.extras.yourKey
|
window.JPush.receiveNotification.extras.yourKey
|
||||||
|
|
||||||
## 打开通知时获得通知的内容
|
## 打开通知时获得通知的内容
|
||||||
|
|
||||||
- 内容:
|
- 内容:
|
||||||
window.plugins.jPushPlugin.openNotification.alert
|
window.JPush.openNotification.alert
|
||||||
- 标题:
|
- 标题:
|
||||||
window.plugins.jPushPlugin.openNotification.title
|
window.JPush.openNotification.title
|
||||||
- 附加字段
|
- 附加字段
|
||||||
window.plugins.jPushPlugin.openNotification.extras.yourKey
|
window.JPush.openNotification.extras.yourKey
|
||||||
|
|
||||||
## 收到自定义消息时获取消息的内容
|
## 收到自定义消息时获取消息的内容
|
||||||
|
|
||||||
- 内容:
|
- 内容:
|
||||||
window.plugins.jPushPlugin.receiveMessage.message
|
window.JPush.receiveMessage.message
|
||||||
- 附加字段:
|
- 附加字段:
|
||||||
window.plugins.jPushPlugin.receiveMessage.extras.yourKey
|
window.JPush.receiveMessage.extras.yourKey
|
||||||
|
|
||||||
## 获取集成日志(同时适用于 iOS)
|
## 获取集成日志(同时适用于 iOS)
|
||||||
|
|
||||||
@@ -60,88 +60,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 +76,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 +94,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)
|
||||||
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
- notificationId:int,通知的 id。
|
- notificationId:int,通知的 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 +146,9 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
window.plugins.jPushPlugin.setSilenceTime(startHour, startMinute, endHour, endMinute)
|
```js
|
||||||
|
window.JPush.setSilenceTime(startHour, startMinute, endHour, endMinute)
|
||||||
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
|
|
||||||
@@ -217,7 +157,6 @@ document.addEventListener('jpush.receiveRegistrationId', function (event) {
|
|||||||
- endHour: 整形,静音时段的结束时间 - 小时 (24小时制,范围:0~23 )。
|
- endHour: 整形,静音时段的结束时间 - 小时 (24小时制,范围:0~23 )。
|
||||||
- endMinute: 整形,静音时段的结束时间 - 分钟(范围:0~59 )。
|
- endMinute: 整形,静音时段的结束时间 - 分钟(范围:0~59 )。
|
||||||
|
|
||||||
|
|
||||||
## 通知栏样式定制
|
## 通知栏样式定制
|
||||||
|
|
||||||
### API - setBasicPushNotificationBuilder, setCustomPushNotificationBuilder
|
### API - setBasicPushNotificationBuilder, setCustomPushNotificationBuilder
|
||||||
@@ -238,9 +177,10 @@ JPush SDK 提供了 2 个用于定制通知栏样式的构建类:
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
window.plugins.jPushPlugin.setBasicPushNotificationBuilder()
|
```js
|
||||||
window.plugins.jPushPlugin.setCustomPushNotificationBuilder()
|
window.JPush.setBasicPushNotificationBuilder()
|
||||||
|
window.JPush.setCustomPushNotificationBuilder()
|
||||||
|
```
|
||||||
|
|
||||||
## 设置保留最近通知条数
|
## 设置保留最近通知条数
|
||||||
|
|
||||||
@@ -252,13 +192,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 +212,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>
|
|
||||||
@@ -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"/>
|
|
||||||
@@ -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)。
|
||||||
|
|
||||||
JPushPlugin.prototype.setTagsWithAlias(tags, alias)
|
### setAlias
|
||||||
JPushPlugin.prototype.setTags(tags)
|
|
||||||
JPushPlugin.prototype.setAlias(alias)
|
设置别名。注意这个接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
|
||||||
|
|
||||||
|
#### 代码示例
|
||||||
|
|
||||||
|
```js
|
||||||
|
window.JPush.setAlias({ sequence: 1, alias: 'your_alias' },
|
||||||
|
(result) => {
|
||||||
|
var sequence = result.sequence
|
||||||
|
var alias = result.alias
|
||||||
|
}, (error) => {
|
||||||
|
var sequence = error.sequence
|
||||||
|
var errorCode = error.code
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
* tags:
|
|
||||||
* 参数类型为数组。
|
|
||||||
* nil 此次调用不设置此值。
|
|
||||||
* 空集合表示取消之前的设置。
|
|
||||||
* 每次调用至少设置一个 tag,覆盖之前的设置,不是新增。
|
|
||||||
* 有效的标签组成:字母(区分大小写)、数字、下划线、汉字。
|
|
||||||
* 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 100 个 tag,但总长度不得超过1K字节(判断长度需采用 UTF-8 编码)。
|
|
||||||
* 单个设备最多支持设置 100 个 tag,App 全局 tag 数量无限制。
|
|
||||||
* alias:
|
|
||||||
* 参数类型为字符串。
|
|
||||||
* nil 此次调用不设置此值。
|
|
||||||
* 空字符串 ("")表示取消之前的设置。
|
|
||||||
* 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
|
|
||||||
* 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
|
|
||||||
|
|
||||||
#### 返回值说明
|
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
|
||||||
|
- alias: string
|
||||||
|
- 每次调用设置有效的别名将覆盖之前的设置。
|
||||||
|
- 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|。
|
||||||
|
- 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
|
||||||
|
|
||||||
函数本身无返回值,但需要注册 `jpush.setTagsWithAlias` 事件来监听设置结果:
|
### deleteAlias
|
||||||
|
|
||||||
document.addEventListener("jpush.setTagsWithAlias", function(event) {
|
删除别名。
|
||||||
console.log("onTagsWithAlias")
|
|
||||||
var result = "result code:" + event.resultCode + " "
|
|
||||||
result += "tags:" + event.tags + " "
|
|
||||||
result += "alias:" + event.alias + " "
|
|
||||||
$("#tagAliasResult").html(result)
|
|
||||||
}, false)
|
|
||||||
|
|
||||||
#### 错误码定义
|
#### 代码示例
|
||||||
|
|
||||||
|Code|描述 |详细解释 |
|
```js
|
||||||
|----|:----------------------------------------|:--------|
|
window.JPush.deleteAlias({ sequence: 1 },
|
||||||
|6001|无效的设置,tag / alias 不应参数都为 null。 | |
|
(result) => {
|
||||||
|6002|设置超时。 |建议重试。|
|
var sequence = result.sequence
|
||||||
|6003|alias 字符串不合法。 |有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。|
|
}, (error) => {
|
||||||
|6004|alias超长。 |最多 40个字节,中文 UTF-8 是 3 个字节。|
|
var sequence = error.sequence
|
||||||
|6005|某一个 tag 字符串不合法。 |有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。|
|
var errorCode = error.code
|
||||||
|6006|某一个 tag 超长。 |一个 tag 最多 40个字节,中文 UTF-8 是 3 个字节。|
|
})
|
||||||
|6007|tags 数量超出限制,最多 100 个。 |这是一台设备的限制,一个应用全局的标签数量无限制。|
|
```
|
||||||
|6008|tag / alias 超出总长度限制。 |总长度最多 1K 字节。|
|
|
||||||
|6011|10s内设置 tag 或 alias 大于 3 次。 |短时间内操作过于频繁。|
|
|
||||||
|
|
||||||
|
#### 参数说明
|
||||||
|
|
||||||
|
- 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 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
|
|||||||
|
|
||||||
- 在你需要接收通知的的 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
|
||||||
lertContent = 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 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
|
|||||||
|
|
||||||
- 在你需要接收通知的的 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 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
|
|||||||
|
|
||||||
收到自定义消息时触发这个事件,推荐使用事件的方式传递。
|
收到自定义消息时触发这个事件,推荐使用事件的方式传递。
|
||||||
|
|
||||||
但同时保留了 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,19 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
|
|||||||
|
|
||||||
在 iOS 中,返回值为 0 时,代表系统设置中关闭了推送;大于 0 时,代表打开了推送,且能够根据返回值判断具体通知形式:
|
在 iOS 中,返回值为 0 时,代表系统设置中关闭了推送;大于 0 时,代表打开了推送,且能够根据返回值判断具体通知形式:
|
||||||
|
|
||||||
UIRemoteNotificationTypeNone = 0, // 0
|
UIRemoteNotificationTypeNone = 0, // 0
|
||||||
UIRemoteNotificationTypeBadge = 1 << 0, // 1
|
UIRemoteNotificationTypeBadge = 1 << 0, // 1
|
||||||
UIRemoteNotificationTypeSound = 1 << 1, // 2
|
UIRemoteNotificationTypeSound = 1 << 1, // 2
|
||||||
UIRemoteNotificationTypeAlert = 1 << 2, // 4
|
UIRemoteNotificationTypeAlert = 1 << 2, // 4
|
||||||
UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3 // 8
|
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) {
|
||||||
})
|
// 系统设置中打开了应用推送。
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|||||||
532
doc/iOS_API.md
532
doc/iOS_API.md
@@ -3,7 +3,6 @@
|
|||||||
- [延迟注册和启动推送通知服务](#延迟注册和启动推送通知服务)
|
- [延迟注册和启动推送通知服务](#延迟注册和启动推送通知服务)
|
||||||
- [开始与停止推送服务](#开始与停止推送服务)
|
- [开始与停止推送服务](#开始与停止推送服务)
|
||||||
- [获取 RegistrationID](#获取-registrationid)
|
- [获取 RegistrationID](#获取-registrationid)
|
||||||
- [别名与标签](#别名与标签)
|
|
||||||
- [获取 APNS 推送内容](#获取-apns-推送内容)
|
- [获取 APNS 推送内容](#获取-apns-推送内容)
|
||||||
- [点击推送通知](#点击推送通知)
|
- [点击推送通知](#点击推送通知)
|
||||||
- [前台收到推送](#前台收到推送)
|
- [前台收到推送](#前台收到推送)
|
||||||
@@ -20,8 +19,6 @@
|
|||||||
- [获取用户推送设置](#获取用户推送设置)
|
- [获取用户推送设置](#获取用户推送设置)
|
||||||
- [监听事件统一说明](#监听事件统一说明)
|
- [监听事件统一说明](#监听事件统一说明)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 延迟注册和启动推送通知服务
|
## 延迟注册和启动推送通知服务
|
||||||
|
|
||||||
本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」,其中:
|
本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」,其中:
|
||||||
@@ -31,8 +28,8 @@
|
|||||||
|
|
||||||
开发者可以根据自己的需求,延迟注册和启动,需做以下操作:
|
开发者可以根据自己的需求,延迟注册和启动,需做以下操作:
|
||||||
|
|
||||||
1. 查找并配置 `PushConfig.plist` 文件中的 `Delay` 字段为 `YES`,表明会延迟使用,此时插件不再自动注册、启动通知。
|
1.查找并配置 `PushConfig.plist` 文件中的 `Delay` 字段为 `YES`,表明会延迟使用,此时插件不再自动注册、启动通知。
|
||||||
2. 在需要注册并启动通知的地方调用 API - startJPushSDK。
|
2.在需要注册并启动通知的地方调用 API - `startJPushSDK`。
|
||||||
|
|
||||||
### API - startJPushSDK
|
### API - startJPushSDK
|
||||||
|
|
||||||
@@ -40,11 +37,9 @@
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
|
```js
|
||||||
|
window.JPush.startJPushSDK()
|
||||||
```
|
```
|
||||||
window.plugins.jPushPlugin.startJPushSDK()
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 开始与停止推送服务
|
## 开始与停止推送服务
|
||||||
|
|
||||||
@@ -54,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
|
||||||
@@ -75,7 +68,9 @@ window.plugins.jPushPlugin.init()
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
window.plugins.jPushPlugin.stopPush()
|
```js
|
||||||
|
window.JPush.stopPush()
|
||||||
|
```
|
||||||
|
|
||||||
### API - resumePush
|
### API - resumePush
|
||||||
|
|
||||||
@@ -83,11 +78,9 @@ window.plugins.jPushPlugin.init()
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
|
```js
|
||||||
|
window.JPush.resumePush()
|
||||||
```
|
```
|
||||||
window.plugins.jPushPlugin.resumePush()
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### API - isPushStopped
|
### API - isPushStopped
|
||||||
|
|
||||||
@@ -95,8 +88,8 @@ iOS平台,检查推送服务是否停止。
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.isPushStopped(callback)
|
window.JPush.isPushStopped(callback)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -106,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
|
||||||
@@ -129,7 +122,7 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
|
|||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```js
|
```js
|
||||||
JPushPlugin.prototype.getRegistrationID(callback)
|
JPushPlugin.getRegistrationID(callback)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 返回值
|
#### 返回值
|
||||||
@@ -139,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 个 tag,App 全局 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 推送内容
|
||||||
|
|
||||||
### 点击推送通知
|
### 点击推送通知
|
||||||
@@ -242,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
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 前台收到推送
|
### 前台收到推送
|
||||||
|
|
||||||
@@ -281,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
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 后台收到推送
|
### 后台收到推送
|
||||||
|
|
||||||
@@ -320,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。
|
||||||
|
|
||||||
#### 返回值
|
#### 返回值
|
||||||
|
|
||||||
@@ -422,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
|
||||||
@@ -433,17 +330,17 @@ window.plugins.jPushPlugin.reSetBadge()
|
|||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```js
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.setApplicationIconBadgeNumber(badge)
|
window.JPush.setApplicationIconBadgeNumber(badge)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
|
|
||||||
- badge: 整形,例如 0,1,2(当 badge 为 0 时,角标被清除)。
|
- badge: 整型,例如 0, 1, 2(当 badge 为 0 时,角标被清除)。
|
||||||
|
|
||||||
#### 代码示例
|
#### 代码示例
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0)
|
window.JPush.setApplicationIconBadgeNumber(0)
|
||||||
```
|
```
|
||||||
|
|
||||||
### API - getApplicationIconBadgeNumber
|
### API - getApplicationIconBadgeNumber
|
||||||
@@ -452,8 +349,8 @@ window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0)
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.getApplicationIconBadgeNumber(callback)
|
window.JPush.getApplicationIconBadgeNumber(callback)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -463,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)
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -477,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)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -491,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
|
||||||
@@ -501,7 +398,7 @@ window.plugins.jPushPlugin.addLocalNotificationForIOS(24*60*60, "本地推送内
|
|||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```js
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey)
|
window.JPush.deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -510,8 +407,8 @@ window.plugins.jPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInI
|
|||||||
|
|
||||||
#### 代码示例
|
#### 代码示例
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.deleteLocalNotificationWithIdentifierKeyInIOS("identifier")
|
window.JPush.deleteLocalNotificationWithIdentifierKeyInIOS("identifier")
|
||||||
```
|
```
|
||||||
|
|
||||||
### API - clearAllLocalNotifications
|
### API - clearAllLocalNotifications
|
||||||
@@ -520,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()
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 获取本地通知内容
|
## 获取本地通知内容
|
||||||
|
|
||||||
@@ -538,20 +433,14 @@ 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
|
### 点击本地通知横幅启动 App
|
||||||
|
|
||||||
监听 `jpush.startLocalNotification` 事件。
|
监听 `jpush.startLocalNotification` 事件。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 页面的统计
|
## 页面的统计
|
||||||
|
|
||||||
### API - startLogPageView, stopLogPageView, beginLogPageView
|
### API - startLogPageView, stopLogPageView, beginLogPageView
|
||||||
@@ -561,16 +450,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: 自定义的页面时间。
|
||||||
|
|
||||||
#### 调用说明
|
#### 调用说明
|
||||||
|
|
||||||
@@ -580,10 +469,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");
|
||||||
```
|
```
|
||||||
|
|
||||||
## 日志等级设置
|
## 日志等级设置
|
||||||
@@ -592,18 +481,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
|
||||||
@@ -614,14 +497,8 @@ window.plugins.jPushPlugin.setDebugModeFromIos();
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.setLogOFF()
|
window.JPush.setLogOFF();
|
||||||
```
|
|
||||||
|
|
||||||
#### 代码示例
|
|
||||||
|
|
||||||
```
|
|
||||||
window.plugins.jPushPlugin.setLogOFF();
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### API - setCrashLogON
|
### API - setCrashLogON
|
||||||
@@ -632,14 +509,8 @@ window.plugins.jPushPlugin.setLogOFF();
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.setCrashLogON()
|
window.JPush.setCrashLogON();
|
||||||
```
|
|
||||||
|
|
||||||
#### 代码示例
|
|
||||||
|
|
||||||
```
|
|
||||||
window.plugins.jPushPlugin.setCrashLogON();
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 地理位置上报
|
## 地理位置上报
|
||||||
@@ -650,8 +521,8 @@ window.plugins.jPushPlugin.setCrashLogON();
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.setLocation(latitude, longitude)
|
window.JPush.prototype.setLocation(latitude, longitude)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -659,12 +530,6 @@ window.plugins.jPushPlugin.prototype.setLocation(latitude, longitude)
|
|||||||
- latitude: 地理位置纬度,数值类型或纯数字的字符型均可。
|
- latitude: 地理位置纬度,数值类型或纯数字的字符型均可。
|
||||||
- longitude: 地理位置精度,数值类型或纯数字的字符型均可。
|
- longitude: 地理位置精度,数值类型或纯数字的字符型均可。
|
||||||
|
|
||||||
#### 代码示例
|
|
||||||
|
|
||||||
```
|
|
||||||
window.plugins.jPushPlugin.setLocation(39.26,115.25);
|
|
||||||
```
|
|
||||||
|
|
||||||
## 设备平台判断
|
## 设备平台判断
|
||||||
|
|
||||||
### API - isPlatformIOS
|
### API - isPlatformIOS
|
||||||
@@ -673,22 +538,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
|
||||||
@@ -705,8 +568,8 @@ if(window.plugins.jPushPlugin.isPlatformIOS()) {
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.addDismissActions(actions, categoryId);
|
window.JPush.addDismissActions(actions, categoryId);
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -727,7 +590,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
|
||||||
@@ -744,8 +609,8 @@ iPhone 6s 及以后设备且 iOS 9 以后系统支持 3d-touch。
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
|
window.JPush.addNotificationActions(actions, categoryId)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 参数说明
|
#### 参数说明
|
||||||
@@ -764,23 +629,23 @@ window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
|
|||||||
|
|
||||||
#### 配置方法
|
#### 配置方法
|
||||||
|
|
||||||
1. 首先配置好 iOS 项目的证书。如下图所示没有任何异常警告:
|
1.首先配置好 iOS 项目的证书。如下图所示没有任何异常警告:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
2. 打开 iOS Xcode Project - File - New - Target - iOS - Notification Service Extension - Next - Product Name 填写 `jpushNotificationService` - Finish,如下图所示: 
|
2.打开 iOS Xcode Project - File - New - Target - iOS - Notification Service Extension - Next - Product Name 填写 `jpushNotificationService` - Finish,如下图所示: 
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
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` 文件夹目录下,弹出菜单选择如下: 
|
4.在 Xcode 中拖拽图片、gif、audio、video 等资源文件至 `jpushNotificationService` 文件夹目录下,弹出菜单选择如下: 
|
||||||
|
|
||||||
5. 在极光控制台 - 发送通知 - 可选设置 - mutable-content 打勾。
|
5.在极光控制台 - 发送通知 - 可选设置 - mutable-content 打勾。
|
||||||
|
|
||||||
6. 添加附加字段, key 为 `JPushPluginAttachment` ,value 为资源名称如 `aPic.png`,该资源必须在第 4 步中已经添加至工程,且文件名和拓展名完全对应。5、6 如下图所示:
|
6.添加附加字段, key 为 `JPushPluginAttachment` ,value 为资源名称如 `aPic.png`,该资源必须在第 4 步中已经添加至工程,且文件名和拓展名完全对应。5、6 如下图所示:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -788,15 +653,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.立即发送。
|
||||||
|
|
||||||
## 获取用户推送设置
|
## 获取用户推送设置
|
||||||
|
|
||||||
@@ -806,8 +671,8 @@ window.plugins.jPushPlugin.prototype.addNotificationActions(actions, categoryId)
|
|||||||
|
|
||||||
#### 接口定义
|
#### 接口定义
|
||||||
|
|
||||||
```
|
```js
|
||||||
window.plugins.jPushPlugin.prototype.getUserNotificationSettings(callback)
|
window.JPush.getUserNotificationSettings(callback)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 返回值
|
#### 返回值
|
||||||
@@ -833,53 +698,38 @@ 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.setTagsWithAlias
|
||||||
|
|
||||||
> [iOS 7 以后后台收到远程通知](#后台收到推送)
|
[设置标签别名回调](#返回值说明)
|
||||||
|
|
||||||
|
### jpush.receiveMessage
|
||||||
|
|
||||||
|
[获取自定义消息内容](#获取自定义消息内容)
|
||||||
|
|
||||||
##### jpush.setTagsWithAlias
|
### jpush.startLocalNotification
|
||||||
|
|
||||||
> [设置标签别名回调](#返回值说明)
|
[点击本地通知横幅启动 App](#点击本地通知横幅启动-app)
|
||||||
|
|
||||||
|
### jpush.receiveLocalNotification
|
||||||
|
|
||||||
|
[iOS 10 before 收到本地通知](#ios-10-before-收到本地通知)
|
||||||
##### jpush.receiveMessage
|
|
||||||
|
|
||||||
> [获取自定义消息内容](#获取自定义消息内容)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### jpush.startLocalNotification
|
|
||||||
|
|
||||||
> [点击本地通知横幅启动 App](#点击本地通知横幅启动-app)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### jpush.receiveLocalNotification
|
|
||||||
|
|
||||||
> [iOS 10 before 收到本地通知](#ios-10-before-收到本地通知)
|
|
||||||
|
|
||||||
@@ -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>
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,198 +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);
|
}
|
||||||
} catch (exception) {
|
if (tag2) {
|
||||||
console.log(exception);
|
tags.push(tag2)
|
||||||
}
|
}
|
||||||
})
|
if (tag3) {
|
||||||
|
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>
|
||||||
8
hooks/apns.entitlements
Normal file
8
hooks/apns.entitlements
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>aps-environment</key>
|
||||||
|
<string>development</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
93
hooks/common.js
Normal file
93
hooks/common.js
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Author: Derek Chia <snipking@gmail.com>
|
||||||
|
* common functions for cordova plugin after hook
|
||||||
|
*/
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports.addAPNSinEntitlements = (entitlementPath, isProduction) => {
|
||||||
|
if( fs.existsSync(entitlementPath) ) {
|
||||||
|
fs.readFile(entitlementPath, "utf8", function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Reading entitlements file asynchronously");
|
||||||
|
|
||||||
|
let toInsert = '<key>aps-environment</key>\n' +
|
||||||
|
'\t\t<string>development</string>';
|
||||||
|
if(isProduction) {
|
||||||
|
toInsert = '<key>aps-environment</key>\n' +
|
||||||
|
'\t\t<string>production</string>';
|
||||||
|
}
|
||||||
|
|
||||||
|
let re1 = new RegExp('<key>aps-environment<\/key>(.|[\r\n])*<string>.*<\/string>');
|
||||||
|
let matched = data.match(re1);
|
||||||
|
let result;
|
||||||
|
if (matched === null) {
|
||||||
|
if(data.match(/<\/dict>/g)) {
|
||||||
|
result = data.replace(/<\/dict>/, '\t' + toInsert + '\n\t</dict>');
|
||||||
|
} else if(data.match(/<dict\/>/g)) {
|
||||||
|
result = data.replace(/<dict\/>/, '\t<dict>\n\t\t' + toInsert + '\n\t</dict>');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result = data.replace(re1, toInsert);
|
||||||
|
}
|
||||||
|
|
||||||
|
// write result to entitlements file
|
||||||
|
fs.writeFile(entitlementPath, result, {"encoding": 'utf8'}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log(entitlementPath + " written successfully");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log("Entitlement File '" + entitlementPath + "' not found. Make sure your ios platform upper than 4.3.0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.removeAPNSinEntitlements = (entitlementPath) => {
|
||||||
|
if( fs.existsSync(entitlementPath) ) {
|
||||||
|
fs.readFile(entitlementPath, "utf8", function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Reading entitlements file asynchronously");
|
||||||
|
|
||||||
|
let re1 = new RegExp('<key>aps-environment<\/key>(.|[\r\n])*<string>.*<\/string>');
|
||||||
|
let matched = data.match(re1);
|
||||||
|
let result;
|
||||||
|
if (matched != null) {
|
||||||
|
result = data.replace(re1, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// write result to entitlements file
|
||||||
|
fs.writeFile(entitlementPath, result, {"encoding": 'utf8'}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log(entitlementPath + " written successfully");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log("Entitlement File '" + entitlementPath + "' not found. Make sure your ios platform upper than 4.3.0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.getXcodeProjName = (searchPath) => {
|
||||||
|
if(searchPath == null || searchPath == undefined) {
|
||||||
|
searchPath = './';
|
||||||
|
}
|
||||||
|
let resultFolderName = null;
|
||||||
|
let folderNames = fs.readdirSync(searchPath).filter(file => fs.lstatSync(path.join(searchPath, file)).isDirectory());
|
||||||
|
let folderNamesReg = new RegExp('.*\.xcodeproj', 'g') // get filder name like `*.xcodeproj`
|
||||||
|
for(let folderName of folderNames) {
|
||||||
|
if(folderName.match(folderNamesReg)) {
|
||||||
|
resultFolderName = folderName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultFolderName.substr(0, resultFolderName.length - 10);
|
||||||
|
}
|
||||||
66
hooks/iosDisablePush.js
Normal file
66
hooks/iosDisablePush.js
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Author: Derek Chia <snipking@gmail.com>
|
||||||
|
* Cordova plugin after hook to disable `Push Notification` capability for XCode 8
|
||||||
|
*/
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
let commonFuncs = require('./common');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* remove APNS env from cordova project Entitlements-Debug.plist and Entitlements-Release.plist
|
||||||
|
* This two file will work when xcode archive app
|
||||||
|
*/
|
||||||
|
let disablePushNotificationForCI = (basePath, xcodeprojName) => {
|
||||||
|
commonFuncs.removeAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Debug.plist');
|
||||||
|
commonFuncs.removeAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Release.plist');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* remove APNS env to entitlement file; disable Push Notification capability in .pbxproj file
|
||||||
|
* This two file will work when xcode archive app
|
||||||
|
*/
|
||||||
|
let disablePushNotificationForXCode = (entitlementsPath, pbxprojPath) => {
|
||||||
|
/**
|
||||||
|
* remove APNS env to entitlement file
|
||||||
|
*/
|
||||||
|
if( fs.existsSync(entitlementsPath) ) {
|
||||||
|
commonFuncs.removeAPNSinEntitlements(entitlementsPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* disable Push Notification capability in .pbxproj file
|
||||||
|
* equally disable "Push Notification" switch in xcode
|
||||||
|
*/
|
||||||
|
fs.readFile(pbxprojPath, "utf8", function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log("Reading pbxproj file asynchronously");
|
||||||
|
|
||||||
|
// 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 parts = re4rep.exec(data);
|
||||||
|
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
|
||||||
|
fs.writeFile(pbxprojPath, result, {"encoding": 'utf8'}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log(pbxprojPath + " written successfully");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let basePath = './platforms/ios/';
|
||||||
|
let buildType = 'dev';
|
||||||
|
let xcodeprojName = commonFuncs.getXcodeProjName(basePath);
|
||||||
|
let pbxprojPath = basePath + xcodeprojName + '.xcodeproj/project.pbxproj';
|
||||||
|
let entitlementsPath = basePath + xcodeprojName + '/' + xcodeprojName + '.entitlements';
|
||||||
|
|
||||||
|
disablePushNotificationForCI(basePath, xcodeprojName);
|
||||||
|
|
||||||
|
disablePushNotificationForXCode(entitlementsPath, pbxprojPath);
|
||||||
172
hooks/iosEnablePush.js
Normal file
172
hooks/iosEnablePush.js
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
/*
|
||||||
|
* Author: Derek Chia <snipking@gmail.com>
|
||||||
|
* Cordova plugin after hook to enable `Push Notification` capability for XCode 8
|
||||||
|
*/
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
let commonFuncs = require('./common');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add APNS env to cordova project Entitlements-Debug.plist and Entitlements-Release.plist
|
||||||
|
* This two file will work when xcode archive app
|
||||||
|
*/
|
||||||
|
let enablePushNotificationForCI = (basePath, xcodeprojName) => {
|
||||||
|
commonFuncs.addAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Debug.plist', false);
|
||||||
|
commonFuncs.addAPNSinEntitlements(basePath + xcodeprojName + '/Entitlements-Release.plist', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add APNS env to entitlement file; enable Push Notification capability in .pbxproj file
|
||||||
|
* This two file will work when xcode archive app
|
||||||
|
*/
|
||||||
|
let enablePushNotificationForXCode = (entitlementsPath, pbxprojPath, cordovaBuildConfig) => {
|
||||||
|
console.log('will enable push notification capability for XCode');
|
||||||
|
let needAddEntitlementToPbxproj = false;
|
||||||
|
/**
|
||||||
|
* add APNS env to entitlement file
|
||||||
|
* without this file will cause a worning in xcode
|
||||||
|
*/
|
||||||
|
if( fs.existsSync(entitlementsPath) ) {
|
||||||
|
commonFuncs.addAPNSinEntitlements(entitlementsPath, false);
|
||||||
|
} else {
|
||||||
|
// copy default entitlements file
|
||||||
|
fs.readFile(__dirname + '/apns.entitlements', 'utf8', function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(entitlementsPath, data);
|
||||||
|
console.log(entitlementsPath + " written successfully");
|
||||||
|
});
|
||||||
|
|
||||||
|
needAddEntitlementToPbxproj = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enable Push Notification capability in .pbxproj file
|
||||||
|
* equally enable "Push Notification" switch in xcode
|
||||||
|
*/
|
||||||
|
fs.readFile(pbxprojPath, "utf8", function(err, data) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log("Reading pbxproj file asynchronously");
|
||||||
|
|
||||||
|
// add Push Notification Capability
|
||||||
|
let re1 = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes', 'g');
|
||||||
|
let re1rep = new RegExp('isa = PBXProject;(.|[\r\n])*attributes = {', 'g');
|
||||||
|
let re2 = new RegExp('(?:isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*)SystemCapabilities', 'g');
|
||||||
|
let re2rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes = {', 'g');
|
||||||
|
let re3 = new RegExp('(?:isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*)com\.apple\.Push', 'g');
|
||||||
|
let re3rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities = {', 'g');
|
||||||
|
let re4rep = new RegExp('isa = PBXProject;(.|[\r\n])*TargetAttributes(.|[\r\n])*SystemCapabilities(.|[\r\n])*com\.apple\.Push = {(.|[\r\n])*enabled = [01]');
|
||||||
|
|
||||||
|
let matched = data.match(re1);
|
||||||
|
let result;
|
||||||
|
if (matched === null) {
|
||||||
|
console.log('re1 not match, no TargetAttributes');
|
||||||
|
result = data.replace(re1rep, 'isa = PBXProject;\n' +
|
||||||
|
'\t\t\tattributes = {\n' +
|
||||||
|
'\t\t\t\tTargetAttributes = {\n' +
|
||||||
|
'\t\t\t\t\t1D6058900D05DD3D006BFB54 = {\n' +
|
||||||
|
'\t\t\t\t\t\tDevelopmentTeam = ' + cordovaBuildConfig.ios.release.developmentTeam + ';\n' +
|
||||||
|
'\t\t\t\t\t\tSystemCapabilities = {\n' +
|
||||||
|
'\t\t\t\t\t\t\tcom.apple.Push = {\n' +
|
||||||
|
'\t\t\t\t\t\t\t\tenabled = 1;\n' +
|
||||||
|
'\t\t\t\t\t\t\t};\n' +
|
||||||
|
'\t\t\t\t\t\t};\n' +
|
||||||
|
'\t\t\t\t\t};\n' +
|
||||||
|
'\t\t\t\t};');
|
||||||
|
} else {
|
||||||
|
matched = data.match(re2);
|
||||||
|
if(matched === null) {
|
||||||
|
console.log('re2 not match, nothing under TargetAttributes');
|
||||||
|
let parts = re2rep.exec(data);
|
||||||
|
result = data.replace(re2rep, parts[0] + '\n' + '\t\t\t\t\t1D6058900D05DD3D006BFB54 = {\n' +
|
||||||
|
'\t\t\t\t\t\tDevelopmentTeam = ' + cordovaBuildConfig.ios.release.developmentTeam + ';\n' +
|
||||||
|
'\t\t\t\t\t\tSystemCapabilities = {\n' +
|
||||||
|
'\t\t\t\t\t\t\tcom.apple.Push = {\n' +
|
||||||
|
'\t\t\t\t\t\t\t\tenabled = 1;\n' +
|
||||||
|
'\t\t\t\t\t\t\t};\n' +
|
||||||
|
'\t\t\t\t\t\t};\n' +
|
||||||
|
'\t\t\t\t\t};');
|
||||||
|
} else {
|
||||||
|
matched = data.match(re3);
|
||||||
|
if(matched === null) {
|
||||||
|
console.log('re3 not match, no com.apple.Push defined');
|
||||||
|
let parts = re3rep.exec(data);
|
||||||
|
result = data.replace(re3rep, parts[0] + '\n' + '\t\t\t\t\t\t\tcom.apple.Push = {\n' +
|
||||||
|
'\t\t\t\t\t\t\t\tenabled = 1;\n' +
|
||||||
|
'\t\t\t\t\t\t\t};');
|
||||||
|
} else {
|
||||||
|
console.log('just enable com.apple.Push');
|
||||||
|
let parts = re4rep.exec(data);
|
||||||
|
result = data.replace(re4rep, parts[0].substr(0, parts[0].length - 1) + '1');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add entitlements
|
||||||
|
if (needAddEntitlementToPbxproj) {
|
||||||
|
|
||||||
|
let pathArray = entitlementsPath.split("/");
|
||||||
|
let entitlementsFileName = pathArray[pathArray.length - 1];
|
||||||
|
let projectFolderName = pathArray[pathArray.length - 2];
|
||||||
|
|
||||||
|
result = result.replace(new RegExp('\\/\\* Begin PBXFileReference section \\*\\/'), '/* Begin PBXFileReference section */\n' +
|
||||||
|
'\t\tD7BB385F1E4DB54800345BF4 /* ' + entitlementsFileName + ' */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = "' + entitlementsFileName + '"; path = "' + projectFolderName + '/' + entitlementsFileName + '"; sourceTree = "<group>"; };');
|
||||||
|
result = result.replace(new RegExp('\\/\\* CustomTemplate \\*\\/.*\n.*isa = PBXGroup;.*\n.*children = \\('), '/* CustomTemplate */ = {\n' +
|
||||||
|
'\t\t\tisa = PBXGroup;\n' +
|
||||||
|
'\t\t\tchildren = (\n' +
|
||||||
|
'\t\t\t\tD7BB385F1E4DB54800345BF4 /* ' + entitlementsFileName + ' */,');
|
||||||
|
let re5rep = new RegExp('\\/\\* Debug \\*\\/.*\n.*isa = XCBuildConfiguration;.*\n.*\n.*buildSettings = {');
|
||||||
|
let parts = result.match(re5rep);
|
||||||
|
result = result.replace(re5rep, parts + '\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = "' + projectFolderName + '/' + entitlementsFileName + '";');
|
||||||
|
|
||||||
|
let re6rep = new RegExp('\\/\\* Release \\*\\/.*\n.*isa = XCBuildConfiguration;.*\n.*\n.*buildSettings = {');
|
||||||
|
parts = result.match(re6rep);
|
||||||
|
result = result.replace(re6rep, parts + '\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = "' + projectFolderName + '/' + entitlementsFileName + '";');
|
||||||
|
}
|
||||||
|
|
||||||
|
// write result to project.pbxproj
|
||||||
|
fs.writeFile(pbxprojPath, result, {"encoding": 'utf8'}, function(err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
console.log(pbxprojPath + " written successfully");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = (context) => {
|
||||||
|
let basePath = './platforms/ios/';
|
||||||
|
let buildType = 'dev';
|
||||||
|
let xcodeprojName = commonFuncs.getXcodeProjName(basePath);
|
||||||
|
let pbxprojPath = basePath + xcodeprojName + '.xcodeproj/project.pbxproj';
|
||||||
|
let entitlementsPath = basePath + xcodeprojName + '/' + xcodeprojName + '.entitlements';
|
||||||
|
|
||||||
|
let cordovaBuildConfigPath = './build.json'
|
||||||
|
let cordovaBuildConfig = null;
|
||||||
|
let willEnablePushNotificationForXCode = true;
|
||||||
|
try { // try to read ios developmentTeam from build.json
|
||||||
|
cordovaBuildConfig = JSON.parse(fs.readFileSync(cordovaBuildConfigPath, "utf8"));
|
||||||
|
if(cordovaBuildConfig.ios.release.developmentTeam === null && cordovaBuildConfig.ios.release.developmentTeam === undefined) {
|
||||||
|
throw 'no valid developmentTeam found in build.json';
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.log("Do not detected 'build.json' or ios.release.developmentTeam not avaliable in 'build.json' \n" +
|
||||||
|
"Will not enable XCode Push Notification Capability. \n" +
|
||||||
|
"Will only enable Push Notification for CI by add config to '" + basePath + xcodeprojName + "/Entitlements-Debug.plist' and '" + basePath + xcodeprojName + "/Entitlements-Release.plist' \n" +
|
||||||
|
"Please add 'build.json' to cordova project root folder to make after hook fully functional. \n" +
|
||||||
|
"Reference [1]https://cordova.apache.org/docs/en/latest/reference/cordova-cli/#cordova-build-command \n" +
|
||||||
|
"Reference [2]https://cordova.apache.org/docs/en/latest/guide/platforms/ios/#signing-an-app");
|
||||||
|
willEnablePushNotificationForXCode = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
enablePushNotificationForCI(basePath, xcodeprojName);
|
||||||
|
|
||||||
|
if(willEnablePushNotificationForXCode) {
|
||||||
|
enablePushNotificationForXCode(entitlementsPath, pbxprojPath, cordovaBuildConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
10
package.json
10
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jpush-phonegap-plugin",
|
"name": "jpush-phonegap-plugin",
|
||||||
"version": "3.1.6",
|
"version": "3.2.4",
|
||||||
"description": "JPush for cordova plugin",
|
"description": "JPush for cordova plugin",
|
||||||
"cordova": {
|
"cordova": {
|
||||||
"id": "jpush-phonegap-plugin",
|
"id": "jpush-phonegap-plugin",
|
||||||
@@ -21,13 +21,9 @@
|
|||||||
"cordova-ios",
|
"cordova-ios",
|
||||||
"cordova-android"
|
"cordova-android"
|
||||||
],
|
],
|
||||||
"engines": [{
|
"devDependencies": {
|
||||||
"name": "cordova",
|
|
||||||
"version": ">=3.0"
|
|
||||||
}],
|
|
||||||
"dependencies": {
|
|
||||||
"cordova-plugin-device": "*",
|
"cordova-plugin-device": "*",
|
||||||
"cordova-plugin-jcore": "1.1.4"
|
"cordova-plugin-jcore": "*"
|
||||||
},
|
},
|
||||||
"author": "JiGuang",
|
"author": "JiGuang",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
33
plugin.xml
33
plugin.xml
@@ -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.6">
|
version="3.2.4">
|
||||||
|
|
||||||
<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.6.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" />
|
||||||
@@ -57,12 +57,16 @@
|
|||||||
<config-file target="*JPushConfig.plist" parent="Appkey">
|
<config-file target="*JPushConfig.plist" parent="Appkey">
|
||||||
<string>$APP_KEY</string>
|
<string>$APP_KEY</string>
|
||||||
</config-file>
|
</config-file>
|
||||||
|
|
||||||
|
<!-- <hook type="after_platform_add" src="hooks/iosEnablePush.js" />
|
||||||
|
<hook type="after_plugin_install" src="hooks/iosEnablePush.js" />
|
||||||
|
<hook type="before_plugin_uninstall" src="hooks/iosDisablePush.js" /> -->
|
||||||
</platform>
|
</platform>
|
||||||
|
|
||||||
<platform name="android">
|
<platform name="android">
|
||||||
<config-file target="res/xml/config.xml" parent="/*">
|
<config-file target="res/xml/config.xml" parent="/*">
|
||||||
<feature name="JPushPlugin">
|
<feature name="JPushPlugin">
|
||||||
<param name="android-package" value="cn.jpush.phonegap.JPushPlugin" />
|
<param name="android-package" value="cn.jiguang.cordova.push.JPushPlugin" />
|
||||||
</feature>
|
</feature>
|
||||||
</config-file>
|
</config-file>
|
||||||
|
|
||||||
@@ -154,7 +158,9 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<!-- User defined. For test only 用户自定义的广播接收器 -->
|
<!-- User defined. For test only 用户自定义的广播接收器 -->
|
||||||
<receiver android:name="cn.jpush.phonegap.MyReceiver" android:enabled="true">
|
<receiver
|
||||||
|
android:name="cn.jiguang.cordova.push.MyReceiver"
|
||||||
|
android:enabled="true">
|
||||||
<intent-filter android:priority="1000">
|
<intent-filter android:priority="1000">
|
||||||
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
|
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
|
||||||
<!-- Required 显示通知栏 -->
|
<!-- Required 显示通知栏 -->
|
||||||
@@ -186,16 +192,21 @@
|
|||||||
<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.8.jar" target-dir="libs" />
|
||||||
|
|
||||||
<source-file src="src/android/MyReceiver.java" target-dir="src/cn/jpush/phonegap" />
|
<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/jpush/phonegap" />
|
<source-file src="src/android/JPushPlugin.java" target-dir="src/cn/jiguang/cordova/push" />
|
||||||
|
<source-file src="src/android/JPushEventReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
|
||||||
|
|
||||||
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml" target-dir="res/drawable" />
|
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
|
||||||
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml" target-dir="res/drawable" />
|
target-dir="res/drawable" />
|
||||||
|
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml"
|
||||||
|
target-dir="res/drawable" />
|
||||||
|
|
||||||
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png" target-dir="res/drawable-hdpi" />
|
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png"
|
||||||
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png" target-dir="res/drawable-hdpi" />
|
target-dir="res/drawable-hdpi" />
|
||||||
|
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png"
|
||||||
|
target-dir="res/drawable-hdpi" />
|
||||||
|
|
||||||
<source-file src="src/android/res/layout/jpush_popwin_layout.xml" target-dir="res/layout" />
|
<source-file src="src/android/res/layout/jpush_popwin_layout.xml" target-dir="res/layout" />
|
||||||
<source-file src="src/android/res/layout/jpush_webview_layout.xml" target-dir="res/layout" />
|
<source-file src="src/android/res/layout/jpush_webview_layout.xml" target-dir="res/layout" />
|
||||||
|
|||||||
156
src/android/JPushEventReceiver.java
Normal file
156
src/android/JPushEventReceiver.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.jpush.phonegap;
|
package cn.jiguang.cordova.push;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -35,53 +35,29 @@ 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 ExecutorService threadPool = Executors.newFixedThreadPool(1);
|
||||||
|
|
||||||
|
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 String TAG = "JPushPlugin";
|
||||||
|
|
||||||
private static boolean shouldCacheMsg = false;
|
|
||||||
private static boolean isStatisticsOpened = false; // 是否开启统计分析功能
|
private static boolean isStatisticsOpened = false; // 是否开启统计分析功能
|
||||||
|
|
||||||
public static String notificationTitle;
|
static String notificationTitle;
|
||||||
public static String notificationAlert;
|
static String notificationAlert;
|
||||||
public static Map<String, Object> notificationExtras = new HashMap<String, Object>();
|
static Map<String, Object> notificationExtras = new HashMap<String, Object>();
|
||||||
|
|
||||||
public static String openNotificationTitle;
|
static String openNotificationTitle;
|
||||||
public static String openNotificationAlert;
|
static String openNotificationAlert;
|
||||||
public static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
|
static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
static Map<Integer, CallbackContext> eventCallbackMap = new HashMap<Integer, CallbackContext>();
|
||||||
|
|
||||||
public JPushPlugin() {
|
public JPushPlugin() {
|
||||||
instance = this;
|
instance = this;
|
||||||
@@ -89,10 +65,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();
|
||||||
|
|
||||||
@@ -110,17 +86,12 @@ public class JPushPlugin extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onPause(boolean multitasking) {
|
public void onPause(boolean multitasking) {
|
||||||
Log.i(TAG, "---------------- onPause");
|
|
||||||
shouldCacheMsg = true;
|
|
||||||
if (isStatisticsOpened && multitasking) {
|
if (isStatisticsOpened && multitasking) {
|
||||||
JPushInterface.onPause(this.cordova.getActivity());
|
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) {
|
if (isStatisticsOpened && multitasking) {
|
||||||
JPushInterface.onResume(this.cordova.getActivity());
|
JPushInterface.onResume(this.cordova.getActivity());
|
||||||
}
|
}
|
||||||
@@ -142,15 +113,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 +146,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 +195,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 +212,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,9 +252,6 @@ 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)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
threadPool.execute(new Runnable() {
|
threadPool.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -304,7 +268,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 +283,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 +321,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 +347,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,31 +376,167 @@ public class JPushPlugin extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTags(JSONArray data, CallbackContext callbackContext) {
|
void setAlias(JSONArray data, CallbackContext callbackContext) {
|
||||||
|
int sequence = -1;
|
||||||
|
String alias = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
HashSet<String> tags = new HashSet<String>();
|
JSONObject params = data.getJSONObject(0);
|
||||||
for (int i = 0; i < data.length(); i++) {
|
sequence = params.getInt("sequence");
|
||||||
tags.add(data.getString(i));
|
alias = params.getString("alias");
|
||||||
}
|
|
||||||
JPushInterface.setTags(this.cordova.getActivity().getApplicationContext(),
|
|
||||||
tags, mTagWithAliasCallback);
|
|
||||||
callbackContext.success();
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
callbackContext.error("Error reading tags JSON");
|
callbackContext.error("Parameters error.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JPushInterface.setAlias(mContext, sequence, alias);
|
||||||
|
eventCallbackMap.put(sequence, callbackContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setAlias(JSONArray data, CallbackContext callbackContext) {
|
void deleteAlias(JSONArray data, CallbackContext callbackContext) {
|
||||||
|
int sequence = -1;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String alias = data.getString(0);
|
JSONObject params = data.getJSONObject(0);
|
||||||
JPushInterface.setAlias(this.cordova.getActivity().getApplicationContext(),
|
sequence = params.getInt("sequence");
|
||||||
alias, mTagWithAliasCallback);
|
|
||||||
callbackContext.success();
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
callbackContext.error("Error reading alias 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 setTagsWithAlias(JSONArray data, CallbackContext callbackContext) {
|
void setTagsWithAlias(JSONArray data, CallbackContext callbackContext) {
|
||||||
@@ -449,7 +548,7 @@ public class JPushPlugin extends CordovaPlugin {
|
|||||||
for (int i = 0; i < tagsArray.length(); i++) {
|
for (int i = 0; i < tagsArray.length(); i++) {
|
||||||
tags.add(tagsArray.getString(i));
|
tags.add(tagsArray.getString(i));
|
||||||
}
|
}
|
||||||
JPushInterface.setAliasAndTags(this.cordova.getActivity().getApplicationContext(),
|
JPushInterface.setAliasAndTags(mContext,
|
||||||
alias, tags, mTagWithAliasCallback);
|
alias, tags, mTagWithAliasCallback);
|
||||||
callbackContext.success();
|
callbackContext.success();
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
@@ -458,6 +557,11 @@ public class JPushPlugin extends CordovaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getConnectionState(JSONArray data, CallbackContext callback) {
|
||||||
|
boolean isConnected = JPushInterface.getConnectionState(cordovaActivity.getApplicationContext());
|
||||||
|
callback.success(String.valueOf(isConnected));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义通知行为,声音、震动、呼吸灯等。
|
* 自定义通知行为,声音、震动、呼吸灯等。
|
||||||
*/
|
*/
|
||||||
@@ -508,8 +612,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);
|
||||||
@@ -532,8 +635,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);
|
||||||
}
|
}
|
||||||
@@ -629,7 +731,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());
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package cn.jpush.phonegap;
|
package cn.jiguang.cordova.push;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|||||||
BIN
src/android/libs/jpush-android-3.0.8.jar
Executable file
BIN
src/android/libs/jpush-android-3.0.8.jar
Executable file
Binary file not shown.
Binary file not shown.
@@ -119,7 +119,9 @@ NSDictionary *_launchOptions;
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[JPushPlugin fireDocumentEvent:eventName jsString:[userInfo toJsonString]];
|
[JPushPlugin fireDocumentEvent:eventName jsString:[userInfo toJsonString]];
|
||||||
completionHandler(UIBackgroundFetchResultNewData);
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
completionHandler(UIBackgroundFetchResultNewData);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
|
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
|
||||||
|
|||||||
@@ -18,8 +18,17 @@
|
|||||||
//以下为js中可调用接口
|
//以下为js中可调用接口
|
||||||
//设置标签、别名
|
//设置标签、别名
|
||||||
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command;
|
-(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;
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -99,24 +90,224 @@
|
|||||||
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command{
|
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command{
|
||||||
NSString *alias = [command argumentAtIndex:0];
|
NSString *alias = [command argumentAtIndex:0];
|
||||||
NSArray *tags = [command argumentAtIndex:1];
|
NSArray *tags = [command argumentAtIndex:1];
|
||||||
|
|
||||||
[JPUSHService setTags:[NSSet setWithArray:tags]
|
[JPUSHService setTags:[NSSet setWithArray:tags]
|
||||||
alias:alias
|
alias:alias
|
||||||
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
|
fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
|
||||||
object:self];
|
CDVPluginResult *result;
|
||||||
|
if (iResCode == 0) {
|
||||||
|
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil];
|
||||||
|
} else {
|
||||||
|
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
|
||||||
|
}
|
||||||
|
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)setTags:(CDVInvokedUrlCommand *)command{
|
-(void)setTags:(CDVInvokedUrlCommand*)command {
|
||||||
NSArray *tags = command.arguments;
|
NSDictionary* params = [command.arguments objectAtIndex:0];
|
||||||
|
NSNumber* sequence = params[@"sequence"];
|
||||||
|
NSArray* tags = params[@"tags"];
|
||||||
|
|
||||||
[JPUSHService setTags:[NSSet setWithArray:tags]
|
[JPUSHService setTags:[NSSet setWithArray:tags]
|
||||||
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
|
completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
|
||||||
object:self];
|
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)setAlias:(CDVInvokedUrlCommand *)command{
|
-(void)addTags:(CDVInvokedUrlCommand *)command {
|
||||||
NSString *alias = [command argumentAtIndex:0];
|
NSDictionary* params = [command.arguments objectAtIndex:0];
|
||||||
[JPUSHService setAlias:alias
|
NSNumber* sequence = params[@"sequence"];
|
||||||
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
|
NSArray* tags = params[@"tags"];
|
||||||
object:self];
|
|
||||||
|
[JPUSHService addTags:[NSSet setWithArray:tags]
|
||||||
|
completion:^(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)deleteTags:(CDVInvokedUrlCommand *)command {
|
||||||
|
NSDictionary* params = [command.arguments objectAtIndex:0];
|
||||||
|
NSNumber* sequence = params[@"sequence"];
|
||||||
|
NSArray* tags = params[@"tags"];
|
||||||
|
|
||||||
|
[JPUSHService deleteTags:[NSSet setWithArray:tags]
|
||||||
|
completion:^(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)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{
|
||||||
@@ -149,12 +340,12 @@
|
|||||||
[JPUSHService resetBadge];
|
[JPUSHService resetBadge];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command{
|
-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command{
|
||||||
NSNumber *badge = [command argumentAtIndex:0];
|
NSNumber *badge = [command argumentAtIndex:0];
|
||||||
[UIApplication sharedApplication].applicationIconBadgeNumber = badge.intValue;
|
[UIApplication sharedApplication].applicationIconBadgeNumber = badge.intValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command {
|
-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command {
|
||||||
NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
|
NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
|
||||||
NSNumber *number = [NSNumber numberWithInteger:num];
|
NSNumber *number = [NSNumber numberWithInteger:num];
|
||||||
[self handleResultWithValue:number command:command];
|
[self handleResultWithValue:number command:command];
|
||||||
@@ -252,16 +443,22 @@
|
|||||||
NSString *textInputPlaceholder = dict[@"textInputPlaceholder"];
|
NSString *textInputPlaceholder = dict[@"textInputPlaceholder"];
|
||||||
UNTextInputNotificationAction *inputAction = [UNTextInputNotificationAction actionWithIdentifier:identifier title:title options:option.integerValue textInputButtonTitle:textInputButtonTitle textInputPlaceholder:textInputPlaceholder];
|
UNTextInputNotificationAction *inputAction = [UNTextInputNotificationAction actionWithIdentifier:identifier title:title options:option.integerValue textInputButtonTitle:textInputButtonTitle textInputPlaceholder:textInputPlaceholder];
|
||||||
[actions addObject:inputAction];
|
[actions addObject:inputAction];
|
||||||
}else{
|
} else {
|
||||||
UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:title title:title options:option.integerValue];
|
UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:title title:title options:option.integerValue];
|
||||||
[actions addObject:action];
|
[actions addObject:action];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UNNotificationCategory *category;
|
UNNotificationCategory *category;
|
||||||
if (dimiss) {
|
if (dimiss) {
|
||||||
category = [UNNotificationCategory categoryWithIdentifier:categoryId actions:actions intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
|
category = [UNNotificationCategory categoryWithIdentifier:categoryId
|
||||||
}else{
|
actions:actions
|
||||||
category = [UNNotificationCategory categoryWithIdentifier:categoryId actions:actions intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];
|
intentIdentifiers:@[]
|
||||||
|
options:UNNotificationCategoryOptionCustomDismissAction];
|
||||||
|
} else {
|
||||||
|
category = [UNNotificationCategory categoryWithIdentifier:categoryId
|
||||||
|
actions:actions
|
||||||
|
intentIdentifiers:@[]
|
||||||
|
options:UNNotificationCategoryOptionNone];
|
||||||
}
|
}
|
||||||
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
|
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
|
||||||
}
|
}
|
||||||
@@ -282,7 +479,7 @@
|
|||||||
NSNumber *isIDFA = [plistData valueForKey:JPushConfig_IsIDFA];
|
NSNumber *isIDFA = [plistData valueForKey:JPushConfig_IsIDFA];
|
||||||
|
|
||||||
NSString *advertisingId = nil;
|
NSString *advertisingId = nil;
|
||||||
if(isIDFA.boolValue){
|
if(isIDFA.boolValue) {
|
||||||
advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
||||||
}
|
}
|
||||||
[JPUSHService setupWithOption:userInfo
|
[JPUSHService setupWithOption:userInfo
|
||||||
@@ -293,7 +490,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark 将参数返回给js
|
#pragma mark 将参数返回给js
|
||||||
-(void)handleResultWithValue:(id)value command:(CDVInvokedUrlCommand*)command{
|
-(void)handleResultWithValue:(id)value command:(CDVInvokedUrlCommand*)command {
|
||||||
CDVPluginResult *result = nil;
|
CDVPluginResult *result = nil;
|
||||||
CDVCommandStatus status = CDVCommandStatus_OK;
|
CDVCommandStatus status = CDVCommandStatus_OK;
|
||||||
|
|
||||||
@@ -316,18 +513,10 @@
|
|||||||
[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{
|
|
||||||
NSDictionary *dict = @{@"resultCode":[NSNumber numberWithInt:resultCode],
|
|
||||||
@"tags" :tags == nil ? [NSNull null] : [tags allObjects],
|
|
||||||
@"alias" :alias == nil ? [NSNull null] : alias
|
|
||||||
};
|
|
||||||
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_SetTagsWithAlias jsString:[dict toJsonString]];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)networkDidReceiveMessage:(NSNotification *)notification {
|
|
||||||
if (notification && notification.userInfo) {
|
if (notification && notification.userInfo) {
|
||||||
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage jsString:[notification.userInfo toJsonString]];
|
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage
|
||||||
|
jsString:[notification.userInfo toJsonString]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
157
src/ios/lib/JPUSHService.h
Normal file → Executable file
157
src/ios/lib/JPUSHService.h
Normal file → Executable 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.6
|
||||||
|
|
||||||
#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.6.a
Executable file
BIN
src/ios/lib/jpush-ios-3.0.6.a
Executable file
Binary file not shown.
@@ -7,19 +7,22 @@ JPushPlugin.prototype.openNotification = {}
|
|||||||
JPushPlugin.prototype.receiveNotification = {}
|
JPushPlugin.prototype.receiveNotification = {}
|
||||||
|
|
||||||
JPushPlugin.prototype.isPlatformIOS = function () {
|
JPushPlugin.prototype.isPlatformIOS = function () {
|
||||||
var isPlatformIOS = (device.platform == 'iPhone' ||
|
return (device.platform === 'iPhone' ||
|
||||||
device.platform == 'iPad' ||
|
device.platform === 'iPad' ||
|
||||||
device.platform == 'iPod touch' ||
|
device.platform === 'iPod touch' ||
|
||||||
device.platform == 'iOS')
|
device.platform === 'iOS')
|
||||||
return isPlatformIOS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.errorCallback = function (msg) {
|
JPushPlugin.prototype.errorCallback = function (msg) {
|
||||||
console.log('Javascript Callback Error: ' + msg)
|
console.log('JPush Callback Error: ' + msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.callNative = function (name, args, successCallback) {
|
JPushPlugin.prototype.callNative = function (name, args, successCallback, errorCallback) {
|
||||||
cordova.exec(successCallback, this.errorCallback, 'JPushPlugin', name, args)
|
if (errorCallback) {
|
||||||
|
cordova.exec(successCallback, errorCallback, 'JPushPlugin', name, args)
|
||||||
|
} else {
|
||||||
|
cordova.exec(successCallback, this.errorCallback, 'JPushPlugin', name, args)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Common methods
|
// Common methods
|
||||||
@@ -67,7 +70,7 @@ JPushPlugin.prototype.clearLocalNotifications = function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setTagsWithAlias = function (tags, alias) {
|
JPushPlugin.prototype.setTagsWithAlias = function (tags, alias, successCallback, errorCallback) {
|
||||||
if (tags == null) {
|
if (tags == null) {
|
||||||
this.setAlias(alias)
|
this.setAlias(alias)
|
||||||
return
|
return
|
||||||
@@ -78,29 +81,104 @@ JPushPlugin.prototype.setTagsWithAlias = function (tags, alias) {
|
|||||||
}
|
}
|
||||||
var arrayTagWithAlias = [tags]
|
var arrayTagWithAlias = [tags]
|
||||||
arrayTagWithAlias.unshift(alias)
|
arrayTagWithAlias.unshift(alias)
|
||||||
this.callNative('setTagsWithAlias', arrayTagWithAlias, null)
|
this.callNative('setTagsWithAlias', arrayTagWithAlias, successCallback, errorCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setTags = function (tags) {
|
/**
|
||||||
this.callNative('setTags', tags, null)
|
* 设置标签。
|
||||||
|
* 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
|
||||||
|
*
|
||||||
|
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
|
||||||
|
*/
|
||||||
|
JPushPlugin.prototype.setTags = function (params, successCallback, errorCallback) {
|
||||||
|
this.callNative('setTags', [params], successCallback, errorCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setAlias = function (alias) {
|
/**
|
||||||
this.callNative('setAlias', [alias], null)
|
* 新增标签。
|
||||||
|
*
|
||||||
|
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
|
||||||
|
*/
|
||||||
|
JPushPlugin.prototype.addTags = function (params, successCallback, errorCallback) {
|
||||||
|
this.callNative('addTags', [params], successCallback, errorCallback)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除指定标签。
|
||||||
|
*
|
||||||
|
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
|
||||||
|
*/
|
||||||
|
JPushPlugin.prototype.deleteTags = function (params, successCallback, errorCallback) {
|
||||||
|
this.callNative('deleteTags', [params], successCallback, errorCallback)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清除所有标签。
|
||||||
|
*
|
||||||
|
* @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)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断系统设置中是否对本应用启用通知。
|
// 判断系统设置中是否对本应用启用通知。
|
||||||
// iOS: 返回值如果大于 0,代表通知开启;0: 通知关闭。
|
// iOS: 返回值如果大于 0,代表通知开启;0: 通知关闭。
|
||||||
// UIRemoteNotificationTypeNone = 0,
|
// UIRemoteNotificationTypeNone = 0,
|
||||||
// UIRemoteNotificationTypeBadge = 1 << 0,
|
// UIRemoteNotificationTypeBadge = 1 << 0,
|
||||||
// UIRemoteNotificationTypeSound = 1 << 1,
|
// UIRemoteNotificationTypeSound = 1 << 1,
|
||||||
// UIRemoteNotificationTypeAlert = 1 << 2,
|
// UIRemoteNotificationTypeAlert = 1 << 2,
|
||||||
// UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,
|
// UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,
|
||||||
// Android: 返回值 1 代表通知启用、0: 通知关闭。
|
// Android: 返回值 1 代表通知启用;0: 通知关闭。
|
||||||
JPushPlugin.prototype.getUserNotificationSettings = function (successCallback) {
|
JPushPlugin.prototype.getUserNotificationSettings = function (successCallback) {
|
||||||
if (this.isPlatformIOS()) {
|
if (this.isPlatformIOS()) {
|
||||||
this.callNative('getUserNotificationSettings', [], successCallback)
|
this.callNative('getUserNotificationSettings', [], successCallback)
|
||||||
} else if (device.platform == 'Android') {
|
} else if (device.platform === 'Android') {
|
||||||
this.callNative('areNotificationEnabled', [], successCallback)
|
this.callNative('areNotificationEnabled', [], successCallback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -108,7 +186,7 @@ JPushPlugin.prototype.getUserNotificationSettings = function (successCallback) {
|
|||||||
// iOS methods
|
// iOS methods
|
||||||
|
|
||||||
JPushPlugin.prototype.startJPushSDK = function () {
|
JPushPlugin.prototype.startJPushSDK = function () {
|
||||||
this.callNative('startJPushSDK', [] , null)
|
this.callNative('startJPushSDK', [], null)
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setBadge = function (value) {
|
JPushPlugin.prototype.setBadge = function (value) {
|
||||||
@@ -205,25 +283,31 @@ JPushPlugin.prototype.addNotificationActions = function (actions, categoryId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Android methods
|
// Android methods
|
||||||
|
JPushPlugin.prototype.getConnectionState = function (successCallback) {
|
||||||
|
if (device.platform === 'Android') {
|
||||||
|
this.callNative('getConnectionState', [], successCallback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setBasicPushNotificationBuilder = function () {
|
JPushPlugin.prototype.setBasicPushNotificationBuilder = function () {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('setBasicPushNotificationBuilder', [], null)
|
this.callNative('setBasicPushNotificationBuilder', [], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setCustomPushNotificationBuilder = function () {
|
JPushPlugin.prototype.setCustomPushNotificationBuilder = function () {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('setCustomPushNotificationBuilder', [], null)
|
this.callNative('setCustomPushNotificationBuilder', [], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function (data) {
|
JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function (data) {
|
||||||
if (device.platform === 'Android') {
|
if (device.platform === 'Android') {
|
||||||
data = JSON.stringify(data)
|
data = JSON.stringify(data)
|
||||||
var event = JSON.parse(data)
|
var event = JSON.parse(data)
|
||||||
cordova.fireDocumentEvent('jpush.receiveRegistrationId', event);
|
cordova.fireDocumentEvent('jpush.receiveRegistrationId', event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) {
|
JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) {
|
||||||
data = JSON.stringify(data)
|
data = JSON.stringify(data)
|
||||||
@@ -259,14 +343,14 @@ JPushPlugin.prototype.clearNotificationById = function (id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setLatestNotificationNum = function (num) {
|
JPushPlugin.prototype.setLatestNotificationNum = function (num) {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('setLatestNotificationNum', [num], null)
|
this.callNative('setLatestNotificationNum', [num], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.addLocalNotification = function (builderId, content, title,
|
JPushPlugin.prototype.addLocalNotification = function (builderId, content, title,
|
||||||
notificationID, broadcastTime, extras) {
|
notificationID, broadcastTime, extras) {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('addLocalNotification',
|
this.callNative('addLocalNotification',
|
||||||
[builderId, content, title, notificationID, broadcastTime, extras], null)
|
[builderId, content, title, notificationID, broadcastTime, extras], null)
|
||||||
}
|
}
|
||||||
@@ -289,7 +373,7 @@ JPushPlugin.prototype.reportNotificationOpened = function (msgID) {
|
|||||||
*在 Portal 上展示给开发者。
|
*在 Portal 上展示给开发者。
|
||||||
*/
|
*/
|
||||||
JPushPlugin.prototype.setStatisticsOpen = function (mode) {
|
JPushPlugin.prototype.setStatisticsOpen = function (mode) {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('setStatisticsOpen', [mode], null)
|
this.callNative('setStatisticsOpen', [mode], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -299,19 +383,19 @@ JPushPlugin.prototype.setStatisticsOpen = function (mode) {
|
|||||||
* 具体可看:http://docs.jpush.io/client/android_api/#android-60
|
* 具体可看:http://docs.jpush.io/client/android_api/#android-60
|
||||||
*/
|
*/
|
||||||
JPushPlugin.prototype.requestPermission = function () {
|
JPushPlugin.prototype.requestPermission = function () {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('requestPermission', [], null)
|
this.callNative('requestPermission', [], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setSilenceTime = function (startHour, startMinute, endHour, endMinute) {
|
JPushPlugin.prototype.setSilenceTime = function (startHour, startMinute, endHour, endMinute) {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('setSilenceTime', [startHour, startMinute, endHour, endMinute], null)
|
this.callNative('setSilenceTime', [startHour, startMinute, endHour, endMinute], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JPushPlugin.prototype.setPushTime = function (weekdays, startHour, endHour) {
|
JPushPlugin.prototype.setPushTime = function (weekdays, startHour, endHour) {
|
||||||
if (device.platform == 'Android') {
|
if (device.platform === 'Android') {
|
||||||
this.callNative('setPushTime', [weekdays, startHour, endHour], null)
|
this.callNative('setPushTime', [weekdays, startHour, endHour], null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user