Compare commits

...

64 Commits

Author SHA1 Message Date
Hevin c5f7963425 Merge branch 'dev' 2017-07-21 14:15:57 +08:00
Hevin 021725e054 Add janalytics 2017-07-21 14:11:24 +08:00
Hevin a4eaf51455 Merge branch 'dev' 2017-07-21 14:00:30 +08:00
Hevin 5d27dca472 Foramt README 2017-07-21 13:53:07 +08:00
Hevin 09f98f7c38 Update version number to 3.2.3 2017-07-21 13:52:54 +08:00
Hevin 7b1a77aecb Update ios sdk to 3.0.6 2017-07-21 13:52:37 +08:00
Hevin 04fae7d538 Merge branch 'dev' 2017-07-12 10:16:49 +08:00
Hevin 0436cfcf3e Update version to 3.2.2 2017-07-12 10:16:10 +08:00
huangminlinux 3c70127405 fix notification in backgroup bug 2017-07-12 10:14:50 +08:00
Hevin 8e087e102a Merge branch 'dev' 2017-07-07 11:26:20 +08:00
Hevin 9f5fccefec Update version to 3.2.1 2017-07-07 11:26:04 +08:00
Hevin be07c7383b Update setTagsWithAlias callback. 2017-07-07 11:23:56 +08:00
huangminlinux 2df6ea47a8 fix setTags/Alias bug 2017-07-07 11:21:14 +08:00
Hevin 35c09c0c92 Merge branch 'dev' 2017-07-04 17:51:51 +08:00
Hevin c72cde6632 Add new qq group & how to custom notification sound. 2017-07-04 17:43:24 +08:00
Hevin f0a87962e7 Merge branch 'dev' 2017-06-30 15:44:35 +08:00
Hevin f31881d88a Add install note. 2017-06-30 15:43:58 +08:00
Hevin 31eef706e4 Update version number 2017-06-30 15:43:38 +08:00
Hevin 2cf2bcf970 Rm ios hook 2017-06-30 15:41:14 +08:00
Hevin 5d42764438 Merge branch 'master' into dev 2017-06-30 10:57:54 +08:00
Hevin a5a03a3214 Merge pull request #249 from snipking/master
check does `com.apple.Push` attribute exist in .pbxproj
2017-06-30 10:52:56 +08:00
DerekChia jingqiang.jia@hand-china.com 7b70564f82 add: check does com.apple.Push attribute exist in .pbxproj to avoid not found error. 2017-06-29 15:15:12 +08:00
DerekChia jingqiang.jia@hand-china.com 6059f546f6 Merge remote-tracking branch 'jpush/master' 2017-06-29 15:07:28 +08:00
Hevin d855a07271 Merge branch 'dev' 2017-06-29 10:55:27 +08:00
Hevin c1e70448b1 Update plugin version to 3.1.9 2017-06-29 10:55:07 +08:00
Hevin a9f6adb7af Merge branch 'master' into dev 2017-06-29 10:04:08 +08:00
Hevin 847d94c080 Merge pull request #248 from snipking/master
fix #245
2017-06-29 09:51:55 +08:00
DerekChia jingqiang.jia@hand-china.com c959fdddeb add: check does ios.release.developmentTeam exist in build.json
fix #245
2017-06-28 16:50:26 +08:00
DerekChia jingqiang.jia@hand-china.com 4285170332 Merge remote-tracking branch 'jpush/master' 2017-06-28 16:50:04 +08:00
Hevin 86f07c9729 Merge branch 'dev' 2017-06-28 10:00:16 +08:00
Hevin e3d8d69147 Fix spelling error. 2017-06-28 09:59:57 +08:00
Hevin 8970e44dc1 Merge branch 'dev' 2017-06-27 10:23:48 +08:00
Hevin 7f3682e2a8 fix #244 2017-06-27 10:23:33 +08:00
Hevin dd716aaca7 Merge branch 'master' into dev 2017-06-23 16:30:32 +08:00
Hevin f5394d6d01 Merge pull request #243 from snipking/master
fix #242
2017-06-23 16:29:09 +08:00
DerekChia jingqiang.jia@hand-china.com 2fc0bc9213 Merge remote-tracking branch 'jpush/master' 2017-06-23 14:33:15 +08:00
shuto 4bc2fe3dc1 fix #242 2017-06-23 14:31:46 +08:00
Hevin 3bf9dae294 Merge branch 'dev' 2017-06-22 12:31:18 +08:00
Hevin ca88f5878a Update npm version 2017-06-22 12:31:00 +08:00
Hevin 8d9a7fa8b0 Add getConnectionState API 2017-06-22 12:30:47 +08:00
Hevin dead85a931 Merge branch 'dev' 2017-06-21 13:05:04 +08:00
Hevin 95330b11ed Fix spelling error 2017-06-21 13:04:42 +08:00
hevin cba5ffbabb Merge branch 'dev' 2017-06-14 14:02:52 +08:00
hevin d524d8db00 Update README 2017-06-14 14:02:19 +08:00
DerekChia jingqiang.jia@hand-china.com e20a10588f Merge remote-tracking branch 'jpush/master' 2017-06-06 13:57:52 +08:00
DerekChia jingqiang.jia@hand-china.com eefc2e13cb fix typo 2017-06-06 13:57:38 +08:00
hevin e8417df550 Merge branch 'master' into dev 2017-06-06 13:54:48 +08:00
Hevin 89293001e8 Merge pull request #235 from snipking/master
After hook to turn on 'Push Notification' switch on Xcode 8
2017-06-06 13:47:46 +08:00
Hevin 78222b7123 Merge branch 'dev' 2017-06-06 09:55:11 +08:00
Hevin 1fb48e886f Remove community link 2017-06-06 09:50:26 +08:00
DerekChia jingqiang.jia@hand-china.com 28a9c298c8 Remove useless execution path log 2017-06-05 22:09:22 +08:00
DerekChia jingqiang.jia@hand-china.com c65c5a4057 After hook to turn on 'Push Notification' switch on Xcode 8 2017-06-05 21:55:55 +08:00
hevin 6a47116b82 Merge branch 'dev' 2017-06-05 19:51:34 +08:00
hevin 68b217d8a8 Remove unused link 2017-06-05 19:49:33 +08:00
hevin 13b36b746c Merge branch 'dev' 2017-05-31 17:37:08 +08:00
hevin b234861e44 Fix package name 2017-05-31 17:34:53 +08:00
hevin 2287ef10dd Optimize ios native methods
- setTags
- setAlias
- setTagsWithAlias
2017-05-26 20:46:21 +08:00
Hevin 2a05ea1784 Merge branch 'master' into dev 2017-05-26 16:18:08 +08:00
Hevin 9d3d32d725 Optimize API
- setTags
- setAlias
- setTagsAndAlias
2017-05-26 16:17:54 +08:00
hevin 3c88e87b17 Merge branch 'dev' 2017-05-24 14:46:02 +08:00
hevin b3b2af1520 Change package name 2017-05-24 14:43:22 +08:00
hevin 6e8b5931fb Update package name & npm version 2017-05-24 11:20:52 +08:00
hevin 23ed4817a4 Update .gitignore 2017-05-16 22:15:59 +08:00
Hevin 9a1da318cc Merge remote-tracking branch 'refs/remotes/origin/master' into dev 2017-05-15 16:15:00 +08:00
18 changed files with 577 additions and 142 deletions
+39 -1
View File
@@ -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
+36 -14
View File
@@ -1,40 +1,48 @@
# JPush PhoneGap / Cordova Plugin # JPush PhoneGap / Cordova Plugin
[![Build Status](https://travis-ci.org/jpush/jpush-phonegap-plugin.svg?branch=master)](https://travis-ci.org/jpush/jpush-phonegap-plugin) [![Build Status](https://travis-ci.org/jpush/jpush-phonegap-plugin.svg?branch=master)](https://travis-ci.org/jpush/jpush-phonegap-plugin)
[![QQ Group](https://img.shields.io/badge/QQ%20Group-413602425-red.svg)]() [![release](https://img.shields.io/badge/release-3.2.3-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![release](https://img.shields.io/badge/release-3.1.6-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![platforms](https://img.shields.io/badge/platforms-iOS%7CAndroid-lightgrey.svg)](https://github.com/jpush/jpush-phonegap-plugin) [![platforms](https://img.shields.io/badge/platforms-iOS%7CAndroid-lightgrey.svg)](https://github.com/jpush/jpush-phonegap-plugin)
[![weibo](https://img.shields.io/badge/weibo-JPush-blue.svg)](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1) [![weibo](https://img.shields.io/badge/weibo-JPush-blue.svg)](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)
支持 iOS, Android Cordova 推送插件。 极光官方支持的 cordova 推送插件。
> 如需要 IM 功能的插件,可关注 [JMessage PhoneGap Plugin](https://github.com/jpush/jmessage-phonegap-plugin)。
> 如需要短信验证码功能的插件,可关注 [JSMS Cordova Plugin](https://github.com/jpush/cordova-plugin-jsms)。 - 如需要 IM 功能的插件,可关注 [jmessage-phonegap-plugin](https://github.com/jpush/jmessage-phonegap-plugin)
- 如需要短信验证码功能插件,可关注 [cordova-plugin-jsms](https://github.com/jpush/cordova-plugin-jsms)
> QQ 交流群:413602425。 - 如需要统计分析功能插件,可关注 [cordova-plugin-janalytics](https://github.com/jpush/cordova-plugin-janalytics)
## Install ## Install
- 通过 Cordova Plugins 安装,要求 Cordova CLI 5.0+ - 通过 Cordova Plugins 安装,要求 Cordova CLI 5.0+
```shell
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey
```
- 或直接通过 url 安装: - 或直接通过 url 安装:
```shell
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey
```
- 或下载到本地安装: - 或下载到本地安装:
```shell
cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey
```
> 在使用 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
@@ -42,16 +50,26 @@
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。
#### 如何自定义通知声音?
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) 插件保证应用的后台运行。
#### 关闭 App 后收不到通知 #### 关闭 App 后收不到通知
Android 的推送通过长连接的方式实现,只有在连接保持的情况下才能收到通知。而有的第三方 ROM 会限制一般应用服务的自启动,也就是 Android 的推送通过长连接的方式实现,只有在连接保持的情况下才能收到通知。而有的第三方 ROM 会限制一般应用服务的自启动,也就是
在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。 在退出应用后,应用的所有服务均被杀死,且无法自启动,所以就会收不到通知。
@@ -68,7 +86,7 @@ Android 的推送通过长连接的方式实现,只有在连接保持的情况
#### 打包时遇到 i386 打包失败怎么办? #### 打包时遇到 i386 打包失败怎么办?
``` ```shell
cordova platform update ios cordova platform update ios
``` ```
@@ -84,22 +102,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)
+14 -14
View File
@@ -161,9 +161,11 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
#### 接口定义 #### 接口定义
JPushPlugin.prototype.setTagsWithAlias(tags, alias) ```js
JPushPlugin.prototype.setTags(tags) JPushPlugin.prototype.setTagsWithAlias(tags, alias, successCallback, errorCallback)
JPushPlugin.prototype.setAlias(alias) JPushPlugin.prototype.setTags(tags, successCallback, errorCallback)
JPushPlugin.prototype.setAlias(alias, successCallback, errorCallback)
```
#### 参数说明 #### 参数说明
* tags: * tags:
@@ -181,17 +183,15 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
* 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。 * 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
* 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。 * 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。
#### 返回值说明 #### 代码示例
函数本身无返回值,但需要注册 `jpush.setTagsWithAlias` 事件来监听设置结果: ```js
window.plugins.jPushPlugin.setTagsWithAlias([tag1, tag2], alias1, function () {
document.addEventListener("jpush.setTagsWithAlias", function(event) { // success callback.
console.log("onTagsWithAlias") }, function (errorMsg) {
var result = "result code:" + event.resultCode + " " // errorMsg 格式为 'errorCode: error message'.
result += "tags:" + event.tags + " " })
result += "alias:" + event.alias + " " ```
$("#tagAliasResult").html(result)
}, false)
#### 错误码定义 #### 错误码定义
@@ -223,7 +223,7 @@ JPush SDK 会以广播的形式发送 RegistrationID 到应用程序。
if(device.platform == "Android") { if(device.platform == "Android") {
alertContent = event.alert alertContent = event.alert
} else { } else {
lertContent = event.aps.alert alertContent = event.aps.alert
} }
}, false) }, false)
+6 -26
View File
@@ -21,7 +21,6 @@
- [监听事件统一说明](#监听事件统一说明) - [监听事件统一说明](#监听事件统一说明)
## 延迟注册和启动推送通知服务 ## 延迟注册和启动推送通知服务
本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」,其中: 本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」,其中:
@@ -45,7 +44,6 @@ window.plugins.jPushPlugin.startJPushSDK()
``` ```
## 开始与停止推送服务 ## 开始与停止推送服务
### API - init ### API - init
@@ -87,8 +85,6 @@ window.plugins.jPushPlugin.init()
window.plugins.jPushPlugin.resumePush() window.plugins.jPushPlugin.resumePush()
``` ```
### API - isPushStopped ### API - isPushStopped
iOS平台,检查推送服务是否停止。 iOS平台,检查推送服务是否停止。
@@ -179,9 +175,9 @@ window.plugins.jPushPlugin.getRegistrationID(function(data) {
#### 接口定义 #### 接口定义
``` ```
JPushPlugin.prototype.setTagsWithAlias(tags, alias) JPushPlugin.prototype.setTagsWithAlias(tags, alias, successCallback, errorCallback)
JPushPlugin.prototype.setTags(tags) JPushPlugin.prototype.setTags(tags, successCallback)
JPushPlugin.prototype.setAlias(alias) JPushPlugin.prototype.setAlias(alias, errorCallback)
``` ```
#### 参数说明 #### 参数说明
@@ -201,21 +197,6 @@ JPushPlugin.prototype.setAlias(alias)
- 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。 - 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。
- 限制:alias 命名长度限制为 40 字节(判断长度需采用 UTF-8 编码)。 - 限制: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 | 描述 | 详细解释 | | Code | 描述 | 详细解释 |
@@ -406,7 +387,7 @@ JPush 封装 badge 功能,允许应用上传 badge 值至 JPush 服务器,
```js ```js
window.plugins.jPushPlugin.prototype.setBadge(value) window.plugins.jPushPlugin.prototype.setBadge(value)
window.plugins.jPushPlugin.prototype.reSetBadge() window.plugins.jPushPlugin.prototype.resetBadge()
``` ```
resetBadge 相当于 setBadge(0)。 resetBadge 相当于 setBadge(0)。
@@ -423,7 +404,7 @@ value 取值范围:[0,99999]。
```js ```js
window.plugins.jPushPlugin.setBadge(5) window.plugins.jPushPlugin.setBadge(5)
window.plugins.jPushPlugin.reSetBadge() window.plugins.jPushPlugin.resetBadge()
``` ```
### API - setApplicationIconBadgeNumber ### API - setApplicationIconBadgeNumber
@@ -438,7 +419,7 @@ window.plugins.jPushPlugin.prototype.setApplicationIconBadgeNumber(badge)
#### 参数说明 #### 参数说明
- badge: 整,例如 0,1,2(当 badge 为 0 时,角标被清除)。 - badge: 整,例如 0,1,2(当 badge 为 0 时,角标被清除)。
#### 代码示例 #### 代码示例
@@ -882,4 +863,3 @@ window.plugins.jPushPlugin.prototype.getUserNotificationSettings(callback)
##### jpush.receiveLocalNotification ##### jpush.receiveLocalNotification
> [iOS 10 before 收到本地通知](#ios-10-before-收到本地通知) > [iOS 10 before 收到本地通知](#ios-10-before-收到本地通知)
+4 -1
View File
@@ -116,7 +116,10 @@
if (tag3 != "") { if (tag3 != "") {
tags.push(tag3); tags.push(tag3);
} }
window.plugins.jPushPlugin.setTagsWithAlias(tags, alias); window.plugins.jPushPlugin.setTagsWithAlias(tags, alias, function () {
// Success callback
console.log(tags + ' - ' + alias)
});
} catch (exception) { } catch (exception) {
console.log(exception); console.log(exception);
} }
+8
View 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
View 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
View 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
View 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);
}
}
+3 -7
View File
@@ -1,6 +1,6 @@
{ {
"name": "jpush-phonegap-plugin", "name": "jpush-phonegap-plugin",
"version": "3.1.6", "version": "3.2.3",
"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",
+20 -10
View File
@@ -2,7 +2,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
id="jpush-phonegap-plugin" id="jpush-phonegap-plugin"
version="3.1.6"> version="3.2.3">
<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 显示通知栏 -->
@@ -188,14 +194,18 @@
<source-file src="src/android/libs/jpush-android_v3.0.6.jar" target-dir="libs" /> <source-file src="src/android/libs/jpush-android_v3.0.6.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/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" />
+6 -1
View File
@@ -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;
@@ -458,6 +458,11 @@ public class JPushPlugin extends CordovaPlugin {
} }
} }
void getConnectionState(JSONArray data, CallbackContext callback) {
boolean isConnected = JPushInterface.getConnectionState(cordovaActivity.getApplicationContext());
callback.success(String.valueOf(isConnected));
}
/** /**
* 自定义通知行为,声音、震动、呼吸灯等。 * 自定义通知行为,声音、震动、呼吸灯等。
*/ */
+1 -1
View File
@@ -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;
+2
View File
@@ -119,7 +119,9 @@ NSDictionary *_launchOptions;
break; break;
} }
[JPushPlugin fireDocumentEvent:eventName jsString:[userInfo toJsonString]]; [JPushPlugin fireDocumentEvent:eventName jsString:[userInfo toJsonString]];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
completionHandler(UIBackgroundFetchResultNewData); completionHandler(UIBackgroundFetchResultNewData);
});
} }
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{ -(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
+46 -15
View File
@@ -99,24 +99,48 @@
-(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; NSArray *tags = command.arguments;
[JPUSHService setTags:[NSSet setWithArray:tags] [JPUSHService setTags:[NSSet setWithArray:tags]
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:) alias:nil
object:self]; fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
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)setAlias:(CDVInvokedUrlCommand*)command{ -(void)setAlias:(CDVInvokedUrlCommand*)command{
NSString *alias = [command argumentAtIndex:0]; NSString *alias = [command argumentAtIndex:0];
[JPUSHService setAlias:alias [JPUSHService setTags:nil
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:) alias:alias
object:self]; fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
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)getRegistrationID:(CDVInvokedUrlCommand*)command{ -(void)getRegistrationID:(CDVInvokedUrlCommand*)command{
@@ -259,9 +283,15 @@
} }
UNNotificationCategory *category; UNNotificationCategory *category;
if (dimiss) { if (dimiss) {
category = [UNNotificationCategory categoryWithIdentifier:categoryId actions:actions intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction]; category = [UNNotificationCategory categoryWithIdentifier:categoryId
actions:actions
intentIdentifiers:@[]
options:UNNotificationCategoryOptionCustomDismissAction];
} else { } else {
category = [UNNotificationCategory categoryWithIdentifier:categoryId actions:actions intentIdentifiers:@[] options:UNNotificationCategoryOptionNone]; category = [UNNotificationCategory categoryWithIdentifier:categoryId
actions:actions
intentIdentifiers:@[]
options:UNNotificationCategoryOptionNone];
} }
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]]; [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
} }
@@ -318,16 +348,17 @@
#pragma mark 设置标签及别名回调 #pragma mark 设置标签及别名回调
-(void)tagsWithAliasCallback:(int)resultCode tags:(NSSet *)tags alias:(NSString *)alias { -(void)tagsWithAliasCallback:(int)resultCode tags:(NSSet *)tags alias:(NSString *)alias {
NSDictionary *dict = @{@"resultCode":[NSNumber numberWithInt:resultCode], if (resultCode == 0) { // Success
@"tags" :tags == nil ? [NSNull null] : [tags allObjects],
@"alias" :alias == nil ? [NSNull null] : alias } else {
};
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_SetTagsWithAlias jsString:[dict toJsonString]]; }
} }
- (void)networkDidReceiveMessage:(NSNotification *)notification { - (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]];
} }
} }
Binary file not shown.
BIN
View File
Binary file not shown.
+33 -24
View File
@@ -7,20 +7,23 @@ 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) {
if (errorCallback) {
cordova.exec(successCallback, errorCallback, 'JPushPlugin', name, args)
} else {
cordova.exec(successCallback, this.errorCallback, 'JPushPlugin', name, args) cordova.exec(successCallback, this.errorCallback, 'JPushPlugin', name, args)
} }
}
// Common methods // Common methods
JPushPlugin.prototype.init = function () { JPushPlugin.prototype.init = function () {
@@ -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,15 +81,15 @@ 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) { JPushPlugin.prototype.setTags = function (tags, successCallback, errorCallback) {
this.callNative('setTags', tags, null) this.callNative('setTags', tags, successCallback, errorCallback)
} }
JPushPlugin.prototype.setAlias = function (alias) { JPushPlugin.prototype.setAlias = function (alias, successCallback, errorCallback) {
this.callNative('setAlias', [alias], null) this.callNative('setAlias', [alias], successCallback, errorCallback)
} }
// 判断系统设置中是否对本应用启用通知。 // 判断系统设置中是否对本应用启用通知。
@@ -96,11 +99,11 @@ JPushPlugin.prototype.setAlias = function (alias) {
// 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)
} }
} }
@@ -205,14 +208,20 @@ 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)
} }
} }
@@ -221,7 +230,7 @@ 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)
} }
} }
@@ -259,14 +268,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 +298,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 +308,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)
} }
} }