Compare commits

...

91 Commits

Author SHA1 Message Date
huangshuni
f140784c9c ios 更新到jpush5.6.0 2025-04-22 17:51:05 +08:00
LcTerry
0d64cb853b 修复:鸿蒙设备上后台不能收到消息问题。全部采用JPushMessageReceiver进行回调。 2025-02-12 11:59:32 +08:00
LcTerry
13c59302f4 更新JPush 560 2025-02-12 10:51:44 +08:00
huangshuni
aae5380195 iOS SDK更新到jpush5.5.0 2025-01-21 10:57:06 +08:00
huangshuni
679f68c7fd ios 更新到jpush5.4.0 2024-09-30 15:54:37 +08:00
lcTerry
71b4bbe93f 更新JPush 550 2024-09-29 11:45:40 +08:00
LcTerry
ea985d4d5f
Merge pull request #471 from LcTerry/master
更新JPush540
2024-07-11 11:50:40 +08:00
lcTerry
9f0deb0285 更新版本号540 2024-07-11 11:48:19 +08:00
lcTerry
7fafe5aea3 更新JPush540 2024-07-11 10:38:51 +08:00
huangshuni
c4ec7f3c2a
Merge pull request #468 from huangshuni/master
iOS 更新到5.2.0
2023-09-22 18:40:00 +08:00
huangshuni
49d40c12b4 iOS 更新到5.2.0 2023-09-22 18:07:05 +08:00
LcTerry
87808d953a
Merge pull request #467 from LcTerry/master
更新JPush520
2023-09-21 16:46:21 +08:00
Lcterry
768d54f2e4 更新JPush520 2023-09-21 16:43:23 +08:00
huangshuni
001ce88d2a
Merge pull request #466 from huangshuni/master
修复iOS启动崩溃问题
2023-09-18 16:02:42 +08:00
huangshuni
3523dfaa83 修复iOS启动崩溃问题 2023-09-18 15:42:34 +08:00
LcTerry
c242aa4318
Merge pull request #461 from LcTerry/master
更新JPush5.0.3,删除引起自启的配置
2023-05-19 15:50:43 +08:00
Lcterry
f0b00a2d53 更新JPush5.0.3,删除引起自启的配置 2023-05-19 15:30:00 +08:00
LcTerry
0a53660cd9
Merge pull request #458 from LcTerry/master
新增发布版本号4.8.6
2023-03-31 14:14:52 +08:00
Lcterry
b5b35428e9 新增发布版本号4.8.6 2023-03-31 14:12:38 +08:00
李良喜
10c2287c5a 【修复】android平台plugin集成问题处理 2023-02-06 15:47:44 +08:00
李良喜
9aa897a173 【更新】上传更新JPush4.8.5 jar包 2023-01-12 10:46:57 +08:00
李良喜
abb4b6432b 更新JPush版本为v4.8.5 2022-12-23 16:56:39 +08:00
李良喜
00599ca0bc 新增setAuth隐私合规接口 2022-12-23 16:44:25 +08:00
huangshuni
3faac1945c
Merge pull request #449 from huangshuni/master
3.8.6
2022-09-09 11:16:09 +08:00
huangshuni
145b75d90a 更新插件版本号为3.8.6 2022-09-06 10:59:31 +08:00
huangshuni
56d9417dbc 更新iOS JPush4.8.1 2022-09-06 10:48:41 +08:00
LcTerry
6932b84f4e
Merge pull request #448 from LcTerry/master
更新找不到插件问题,版本号385
2022-08-30 18:31:19 +08:00
Lcterry
048c12d8dd 更新找不到插件问题,版本号385 2022-08-30 18:27:43 +08:00
LcTerry
04891c4fa1
Merge pull request #447 from LcTerry/master
更新Jpush 481+版本号384
2022-08-30 16:59:06 +08:00
Lcterry
6876a58138 版本号384 2022-08-30 16:49:48 +08:00
Lcterry
86dcd351cd 更新Jpush 481+版本号384 2022-08-30 16:47:39 +08:00
LcTerry
88fe3a4a24
Merge pull request #446 from LcTerry/master
更新Jpush 472+版本号483
2022-08-11 10:38:10 +08:00
Lcterry
b3faac2a77 Merge remote-tracking branch 'main/master' 2022-08-11 10:36:42 +08:00
Lcterry
4a711b3a93 更新Jpush 472+版本号483 2022-08-11 10:33:40 +08:00
huangshuni
fa116c665b
Merge pull request #445 from huangshuni/master
更新iOS sdk到4.6.6
2022-08-10 17:50:53 +08:00
huangshuni
4300730073 更新iOS sdk到4.6.6 2022-08-10 17:48:46 +08:00
JoshLi
76d6c5ddb1 更新文档 2021-07-28 11:29:04 +08:00
JoshLi
521422cac0 更新插件版本v382 2021-07-28 11:28:51 +08:00
JoshLi
c629dcc033 更新iOSsdk到v374 2021-07-28 11:20:56 +08:00
JoshLi
aeee619eab 更新androidsdk到v428 2021-07-28 11:17:08 +08:00
JoshLi
bc9e441fe2 iOS添加手机号设置接口 2021-07-28 10:58:19 +08:00
JoshLi
fad4745e01 Android添加手机号设置接口 2021-07-27 18:32:54 +08:00
JoshLi
10b29611c5 升级JPush到Android410,iOS352 2021-06-01 17:30:37 +08:00
JoshLi
03429474c0 升级JPush到Android410,iOS352 2021-06-01 17:24:43 +08:00
JoshLi
e56a05c64b Update SDK to Android v3.6.6 iOS v3.3.3 2020-06-10 18:04:30 +08:00
JoshLi
a50bafcf3e Update iOS UIWebView to WKWebView 2020-06-10 18:03:47 +08:00
lilx
60176c1ea6 Merge branch 'dev' 2020-06-03 14:49:59 +08:00
lilx
c929496721 Release v3.7.5 2020-06-03 14:38:40 +08:00
lilx
bdd9a8beea Release v3.7.5 2020-06-03 14:24:58 +08:00
1060420895@qq.com
511eee622f Merge branch 'dev' 2020-04-10 16:42:55 +08:00
1060420895@qq.com
2f4669471f Release v3.7.4 2020-04-10 16:36:49 +08:00
1060420895@qq.com
85e3a23f88 Merge branch 'dev' 2020-04-10 16:09:04 +08:00
1060420895@qq.com
206f2ac89e update doc 2020-04-10 16:05:03 +08:00
1060420895@qq.com
57b9364279 Update android jpush to v3.5.8 2020-04-10 16:01:00 +08:00
1060420895@qq.com
e0db803818 Add API setBadgeNumber for Android 2020-04-10 15:56:06 +08:00
1060420895@qq.com
e140dc3b77 android 更新到 3.7.4 2020-04-10 15:48:26 +08:00
1060420895@qq.com
a26822b894 add API setBadgeNumber for android 2020-04-10 15:41:35 +08:00
1060420895@qq.com
7dd7a4a86c add API setBadgeNumber for Android 2020-04-10 15:34:27 +08:00
1060420895@qq.com
b7a2a74d88 add API setBadgeNumber for Android 2020-04-10 15:30:46 +08:00
1060420895@qq.com
2f8234c29f add API set setBadgeNumber for Android 2020-04-10 15:23:13 +08:00
1060420895@qq.com
a9b5af06a5 add API set setBadgeNumber for Android 2020-04-10 15:19:20 +08:00
1060420895@qq.com
ddfb952bcf Release v3.7.4 2020-04-10 15:15:09 +08:00
JoshLipan
74fea46b1c
Merge pull request #418 from jpush/dev
Dev
2019-10-21 15:16:45 +08:00
JoshLi
b2f79c6234 Release v3.7.2 2019-10-21 15:15:29 +08:00
JoshLi
9e23995555 Update iOS jpush to v3.2.6 2019-10-21 15:14:40 +08:00
JoshLi
a7455240a1 Update android jpush to v3.3.8 2019-10-21 15:14:18 +08:00
weiruiyang
07466a8718
Merge pull request #411 from weiruiyang/master
版本更新到 3.7.2
2019-07-29 18:23:51 +08:00
weiry
2b5d59e32e 版本更新到 3.7.2 2019-07-29 18:22:44 +08:00
weiruiyang
e4b70a561a
Merge pull request #410 from weiruiyang/master
版本更新到 3.7.1
2019-07-29 14:52:16 +08:00
weiry
da8c6c29e9 版本更新到 3.7.1 2019-07-29 14:50:19 +08:00
weiruiyang
2ebacad254
Merge pull request #409 from weiruiyang/master
更新版本
2019-07-29 14:16:12 +08:00
weiry
9751b15bf0 ios 更新到 3.2.1.a 2019-07-29 13:55:19 +08:00
weiry
b5fd5aa51a android 更新到 3.3.4 2019-07-29 13:52:32 +08:00
JoshLipan
ee3e6b9e75
Update doc 2019-04-09 18:21:14 +08:00
HuminiOS
72407b0b9c
Merge pull request #400 from jpush/dev
update readme
2019-03-29 10:23:47 +08:00
huangminlinux
2a427c70f9 update readme 2019-03-29 10:23:18 +08:00
JoshLipan
bc12d3c606
Merge pull request #398 from jpush/dev
Dev
2019-03-22 16:32:04 +08:00
JoshLi
9b1bff2ce1 Release v3.6.4 2019-03-22 16:28:06 +08:00
JoshLi
3b5fc629dd Update Android SDK to v3.2.0 2019-03-22 16:27:31 +08:00
JoshLipan
fa4f3ac0d7
Merge pull request #397 from jpush/dev
Dev
2019-02-28 16:28:58 +08:00
JoshLi
3ad9a415e9 Release v3.6.3 2019-02-28 16:27:47 +08:00
JoshLi
d76d01c856 Set exported false for custom Receiver 2019-02-28 16:27:21 +08:00
HuminiOS
b7d4ba5111
Merge pull request #396 from jpush/dev
update readme
2019-02-25 10:13:55 +08:00
huangminlinux
7c326599aa update readme 2019-02-25 10:09:10 +08:00
HuminiOS
2adbba2943
Merge pull request #395 from jpush/dev
update readme
2019-02-24 22:26:35 +08:00
huangminlinux
5b22d798cb update readme 2019-02-24 22:25:01 +08:00
HuminiOS
eb624a7bb2
Merge pull request #394 from jpush/dev
Dev
2019-02-24 00:03:44 +08:00
huangminlinux
e29f00f77f delete file 2019-02-24 00:00:18 +08:00
huangminlinux
1ecb2b273a the adaption to ionic4 project and udpate ionic plugin to 2.0.0 version 2019-02-23 23:58:23 +08:00
huangminlinux
6767af7488 udpate jpush plugin to 3.6.2 2019-01-11 14:34:09 +08:00
huangminlinux
03eab0c59e update iOS SDK to 3.1.2 2019-01-11 14:31:56 +08:00
66 changed files with 5039 additions and 765 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
# Created by https://www.gitignore.io/api/macos,apachecordova # Created by https://www.gitignore.io/api/macos,apachecordova
.idea
### ApacheCordova ### ### ApacheCordova ###
# Apache Cordova generated files and directories # Apache Cordova generated files and directories
bin/* bin/*

View File

@ -68,13 +68,19 @@
如果使用了 Ionic可以再安装 @jiguang-ionic/jpush 包,适配 ionic-native 如果使用了 Ionic可以再安装 @jiguang-ionic/jpush 包,适配 ionic-native
```shell ```shell
npm install --save @jiguang-ionic/jpush npm install --save @jiguang-ionic/jpush@1.0.2
# npm install --save @jiguang-ionic/jpush@2.0.0 for ionic4+
``` ```
然后在 *app.module.ts* 中增加: 然后在 *app.module.ts* 中增加:
```js ```js
// @jiguang-ionic/jpush@1.0.0+
import { JPush } from '@jiguang-ionic/jpush'; import { JPush } from '@jiguang-ionic/jpush';
// @jiguang-ionic/jpush@2.0.0+
import { JPush } from '@jiguang-ionic/jpush/ngx';
... ...
providers: [ providers: [
... ...

View File

@ -245,4 +245,52 @@ window.JPush.setMaxGeofenceNumber(maxNumber)
#### 参数说明 #### 参数说明
- maxNumber: 最多允许保存的地理围栏个数 - maxNumber: 最多允许保存的地理围栏个数
### API - setBadgeNumber
设置App角标目前仅华为系手机支持。
#### 接口定义
```js
window.JPush.setBadgeNumber(badgeNumb)
```
#### 参数说明
- badgeNumb: 角标显示数字小于或等0角标显示数字清楚
### API - setAuth
设置用户是否同意隐私协议
#### 接口定义
```js
window.JPush.setAuth(isAuth)
```
#### 参数说明
- isAuth: 是否同意隐私协议true 已同意false未同意
#### 调用逻辑
- 宿主 APP 在首次安装,冷启动
- 用户隐私协议告知
- 用户确认授权
- 告知极光授权结果
同意隐私协议:
```js
window.JPush.setAuth(true)
```
不同意隐私协议:
```js
window.JPush.setAuth(false)
```

View File

@ -21,6 +21,8 @@
- [cleanTags](#cleantags) - [cleanTags](#cleantags)
- [getAllTags](#getalltags) - [getAllTags](#getalltags)
- [checkTagBindState](#checktagbindstate) - [checkTagBindState](#checktagbindstate)
- [设置手机号](#设置手机号)
- [setMobileNumber](#setMobileNumber)
- [获取点击通知内容](#获取点击通知内容) - [获取点击通知内容](#获取点击通知内容)
- [event - jpush.openNotification](#event---jpushopennotification) - [event - jpush.openNotification](#event---jpushopennotification)
- [获取通知内容](#获取通知内容) - [获取通知内容](#获取通知内容)
@ -396,6 +398,37 @@ window.JPush.checkTagBindState({ sequence: 1, tag: 'tag1' },
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。 - sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- tag: string待查询的 tag。 - tag: string待查询的 tag。
## 设置手机号
提供设置手机号码的接口,用于短信补充功能。
注:短信补充仅支持国内业务,号码格式为 11 位数字,有无 +86 前缀皆可。
### setMobileNumber
调用此 API 设置手机号码。该接口会控制调用频率,频率为 10s 之内最多 3 次。
#### 代码示例
```js
window.JPush.setMobileNumber({ sequence: 5, mobileNumber: '111111' },
(result) => {
var sequence = result.sequence
var number = result.mobileNumber
}, (error) => {
var sequence = error.sequence
var errorCode = error.code
})
```
#### 参数说明
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- mobileNumber: string
- 手机号码。如果传空串则为解除号码绑定操作。
- 限制:只能以 “+” 或者 数字开头;后面的内容只能包含 “-” 和数字。
## 获取点击通知内容 ## 获取点击通知内容
### event - jpush.openNotification ### event - jpush.openNotification
@ -577,5 +610,6 @@ window.JPush.getUserNotificationSettings(function(result) {
// 系统设置中已关闭应用推送。 // 系统设置中已关闭应用推送。
} else if(result > 0) { } else if(result > 0) {
// 系统设置中打开了应用推送。 // 系统设置中打开了应用推送。
}) }
})
``` ```

BIN
example/css/.DS_Store vendored

Binary file not shown.

View File

@ -1,6 +1,6 @@
<!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>
@ -18,15 +18,15 @@
initiateUI(); initiateUI();
}; };
var getRegistrationID = function() { var getRegistrationID = function() {
window.JPush.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);
} }
@ -36,7 +36,7 @@
console.log(exception); console.log(exception);
} }
}; };
var onTagsWithAlias = function(event) { var onTagsWithAlias = function(event) {
try { try {
console.log("onTagsWithAlias"); console.log("onTagsWithAlias");
@ -48,7 +48,8 @@
console.log(exception) console.log(exception)
} }
}; };
var badgeNumb = 0;
var onOpenNotification = function(event) { var onOpenNotification = function(event) {
try { try {
var alertContent; var alertContent;
@ -57,12 +58,17 @@
} else { } else {
alertContent = event.aps.alert; alertContent = event.aps.alert;
} }
badgeNumb = badgeNumb - 1;
badgeNumb = badgeNumb<=0 ? 0 : badgeNumb;
window.JPush.setBadgeNumber(badgeNumb);
alert("open Notification:" + alertContent); alert("open Notification:" + alertContent);
} catch (exception) { } catch (exception) {
console.log("JPushPlugin:onOpenNotification" + exception); console.log("JPushPlugin:onOpenNotification" + exception);
} }
}; };
var onReceiveNotification = function(event) { var onReceiveNotification = function(event) {
try { try {
var alertContent; var alertContent;
@ -72,11 +78,14 @@
alertContent = event.aps.alert; alertContent = event.aps.alert;
} }
$("#notificationResult").html(alertContent); $("#notificationResult").html(alertContent);
badgeNumb = badgeNumb + 1;
window.JPush.setBadgeNumber(badgeNumb);
} catch (exception) { } catch (exception) {
console.log(exception) console.log(exception)
} }
}; };
var onReceiveMessage = function(event) { var onReceiveMessage = function(event) {
try { try {
var message; var message;
@ -86,11 +95,24 @@
message = event.content; message = event.content;
} }
$("#messageResult").html(message); $("#messageResult").html(message);
badgeNumb = badgeNumb + 1;
window.JPush.setBadgeNumber(badgeNumb);
} catch (exception) { } catch (exception) {
console.log("JPushPlugin:onReceiveMessage-->" + exception); console.log("JPushPlugin:onReceiveMessage-->" + exception);
} }
}; };
var onResume = function(event){
try {
badgeNumb = 0
window.JPush.setBadgeNumber(0);
} catch (exception) {
console.log("onResume-->" + exception);
}
}
var initiateUI = function() { var initiateUI = function() {
try { try {
window.JPush.init(); window.JPush.init();
@ -110,7 +132,7 @@
var tag2 = $("#tagText2").val() var tag2 = $("#tagText2").val()
var tag3 = $("#tagText3").val() var tag3 = $("#tagText3").val()
var tags = [] var tags = []
if (tag1) { if (tag1) {
tags.push(tag1) tags.push(tag1)
} }
@ -123,7 +145,7 @@
window.JPush.setTags({ sequence: 1, tags: tags }, window.JPush.setTags({ sequence: 1, tags: tags },
function (result) { function (result) {
$("#tagsResult").html(result.tags) $("#tagsResult").html(JSON.stringify(result.tags))
}, function (error) { }, function (error) {
alert(error.code) alert(error.code)
}) })
@ -135,7 +157,7 @@
$("#getAllTags").click(function (event) { $("#getAllTags").click(function (event) {
window.JPush.getAllTags({ sequence: 2 }, window.JPush.getAllTags({ sequence: 2 },
function (result) { function (result) {
$("#tagsResult").html(result.tags) $("#tagsResult").html(JSON.stringify(result.tags))
}, function (error) { }, function (error) {
alert(error.code) alert(error.code)
}) })
@ -178,15 +200,26 @@
alert(error.code) alert(error.code)
}) })
}); });
$("#setMobileNumber").click(function (event) {
var number = $("#mobileNumberText").val()
window.JPush.setMobileNumber({ sequence: 5, mobileNumber: number },
function (result) {
$("#mobileNumberResult").html(result.mobileNumber)
}, function (error){
alert(error.code)
})
})
}; };
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);
document.addEventListener("resume", onResume, 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">
@ -228,6 +261,14 @@
</td> </td>
</tr> </tr>
</table> </table>
<label>MobileNumber: </label>
<table>
<tr>
<td>
<input type="number" id="mobileNumberText" />
</td>
</tr>
</table>
</div> </div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
@ -235,13 +276,17 @@
<input type="button" id="getAllTags" value="Get all tags" /> <input type="button" id="getAllTags" value="Get all tags" />
<input type="button" id="cleanTags" value="Clean tags" /> <input type="button" id="cleanTags" value="Clean tags" />
</div> </div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<input type="button" id="setAlias" value="Set alias" /> <input type="button" id="setAlias" value="Set alias" />
<input type="button" id="getAlias" value="Get alias" /> <input type="button" id="getAlias" value="Get alias" />
<input type="button" id="deleteAlias" value="Delete alias" /> <input type="button" id="deleteAlias" value="Delete alias" />
</div> </div>
<div data-role="fieldcontain">
<input type="button" id="setMobileNumber" value="Set mobileNumber" />
</div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label id="tagsPrompt">设置 Tag 的结果:</label> <label id="tagsPrompt">设置 Tag 的结果:</label>
<label id="tagsResult">null</label> <label id="tagsResult">null</label>
@ -250,6 +295,10 @@
<label id="aliasPrompt">设置 Alias 的结果:</label> <label id="aliasPrompt">设置 Alias 的结果:</label>
<label id="aliasResult">null</label> <label id="aliasResult">null</label>
</div> </div>
<div data-role="fieldcontain">
<label id="mobileNumberPrompt">设置手机号的结果:</label>
<label id="mobileNumberResult">null</label>
</div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label id="notificationPrompt">接受的通知内容:</label> <label id="notificationPrompt">接受的通知内容:</label>
<label id="notificationResult">null</label> <label id="notificationResult">null</label>

View File

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

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

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

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

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

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.6.1"> version="5.6.0">
<name>JPush</name> <name>JPush</name>
<description>JPush for cordova plugin</description> <description>JPush for cordova plugin</description>
@ -48,8 +48,7 @@
<header-file src="src/ios/Plugins/AppDelegate+JPush.h" /> <header-file src="src/ios/Plugins/AppDelegate+JPush.h" />
<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" /> <source-file src="src/ios/lib/jpush-ios-5.6.0.xcframework" framework="true" />
<source-file src="src/ios/lib/jpush-ios-3.1.1.a" framework="true" />
<resource-file src="src/ios/JPushConfig.plist" /> <resource-file src="src/ios/JPushConfig.plist" />
<framework src="CFNetwork.framework" weak="true" /> <framework src="CFNetwork.framework" weak="true" />
@ -64,6 +63,8 @@
<framework src="AdSupport.framework" weak="true" /> <framework src="AdSupport.framework" weak="true" />
<framework src="UserNotifications.framework" weak="true" /> <framework src="UserNotifications.framework" weak="true" />
<framework src="libresolv.tbd" weak="true" /> <framework src="libresolv.tbd" weak="true" />
<framework src="StoreKit.framework" weak="true" />
<framework src="Network.framework" weak="true" />
<config-file target="*JPushConfig.plist" parent="Appkey"> <config-file target="*JPushConfig.plist" parent="Appkey">
<string>$APP_KEY</string> <string>$APP_KEY</string>
@ -77,92 +78,62 @@
</feature> </feature>
</config-file> </config-file>
<config-file target="AndroidManifest.xml" parent="/manifest" mode="merge"> <config-file target="AndroidManifest.xml" parent="/manifest">
<!-- Required 一些系统要求的权限,如访问网络等 --> <!-- Required 一些系统要求的权限,如访问网络等 -->
<permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" <permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" /> android:protectionLevel="signature" />
<!-- Required 一些系统要求的权限,如访问网络等-->
<uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" /> <uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<!-- Optional for location -->
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /><!-- Android Q后台定位权限-->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<!--华为角标-->
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
<!-- vivo 角标 -->
<uses-permission android:name="com.vivo.notification.permission.BADGE_ICON" />
<!--honor 角标-->
<uses-permission android:name="com.hihonor.android.launcher.permission.CHANGE_BADGE" />
</config-file> </config-file>
<config-file target="AndroidManifest.xml" parent="/manifest/application" mode="merge"> <config-file target="AndroidManifest.xml" parent="/manifest/application">
<!-- Required SDK 核心功能--> <!-- Rich push 核心功能 since 2.0.6-->
<service android:name="cn.jpush.android.service.PushService" <activity
android:enabled="true" android:name="cn.jpush.android.ui.PopWinActivity"
android:exported="false" android:exported="true"
android:process=":remote"> android:theme="@style/JPushDialogStyle" >
<intent-filter> <intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" /> <category android:name="android.intent.category.DEFAULT" />
<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>
<!-- since 3.0.9 Required SDK 核心功能--> <action android:name="cn.jpush.android.ui.PopWinActivity" />
<provider
android:authorities="$PACKAGE_NAME.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="true" />
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 JPush 服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service android:name="cn.jpush.android.service.DaemonService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.DaemonService" />
<category android:name="$PACKAGE_NAME" /> <category android:name="$PACKAGE_NAME" />
</intent-filter> </intent-filter>
</service> </activity>
<!-- since 3.1.0 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DownloadProvider"
android:name="cn.jpush.android.service.DownloadProvider"
android:exported="true"
/>
<!-- Required SDK核心功能--> <!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.PushReceiver" <activity
android:enabled="true"> android:name="cn.jpush.android.ui.PushActivity"
<intent-filter android:priority="1000"> android:configChanges="orientation|keyboardHidden"
<!--Required 显示通知栏 --> android:theme="@android:style/Theme.NoTitleBar"
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> android:exported="true">
<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>
<!-- Required SDK核心功能 -->
<activity android:name="cn.jpush.android.ui.PushActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden"
android:exported="false" >
<intent-filter> <intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" /> <action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@ -170,77 +141,187 @@
</intent-filter> </intent-filter>
</activity> </activity>
<!-- SDK 核心功能-->
<activity
android:name="cn.jpush.android.ui.PopWinActivity" <!-- since 3.0.9 Required SDK 核心功能-->
android:configChanges="orientation|keyboardHidden" <provider
android:exported="false" android:authorities="$PACKAGE_NAME.DataProvider"
android:theme="@style/MyDialogStyle"> android:name="cn.jpush.android.service.DataProvider"
android:process=":pushcore"
android:exported="false"
/>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!--Required 显示通知栏 -->
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</receiver>
<!-- 3.5.0新增,用于定时展示功能 -->
<receiver android:name="cn.jpush.android.service.SchedulerReceiver" android:exported="false"/>
<!--since 3.3.0 接收JPush相关事件-->
<receiver android:name="cn.jiguang.cordova.push.JPushEventReceiver"
android:exported="false">
<intent-filter> <intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVER_MESSAGE" />
<category android:name="$PACKAGE_NAME"></category>
</intent-filter>
</receiver>
<!--since 3.3.0 Required SDK核心功能-->
<!-- since 3.3.0 Required SDK核心功能 -->
<activity
android:name="cn.jpush.android.service.JNotifyActivity"
android:exported="true"
android:taskAffinity=""
android:theme="@style/JPushTheme" >
<intent-filter>
<action android:name="cn.jpush.android.intent.JNotifyActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- since 4.6.0 Required SDK核心功能 -->
<activity
android:name="cn.android.service.JTransitActivity"
android:exported="true"
android:taskAffinity=""
android:theme="@style/JPushTheme" >
<intent-filter>
<action android:name="cn.android.service.JTransitActivity" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" /> <category android:name="$PACKAGE_NAME" />
</intent-filter> </intent-filter>
</activity> </activity>
<!-- Required SDK 核心功能 --> <!-- since 3.3.0 Required SDK 核心功能-->
<service android:name="cn.jpush.android.service.DownloadService" <!-- 可配置android:process参数将PushService放在其他进程中 -->
android:enabled="true" <!--User defined. For test only 继承自cn.jpush.android.service.JCommonService-->
android:exported="false"> <service android:name="cn.jiguang.cordova.push.PushService"
android:process=":pushcore"
android:exported="false">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service> </service>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.AlarmReceiver" />
<receiver android:name="cn.jiguang.cordova.push.JPushEventReceiver">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</receiver>
<!-- 插件通知广播接收器 -->
<receiver <receiver
android:name="cn.jiguang.cordova.push.JPushReceiver" android:name="cn.jiguang.cordova.push.JPushReceiver"
android:enabled="true"> android:enabled="true"
<intent-filter> android:exported="false">
<action android:name="cn.jpush.android.intent.REGISTRATION" /> <!-- <intent-filter>-->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!-- <action android:name="cn.jpush.android.intent.REGISTRATION" />-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!-- <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />-->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!-- <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />-->
<action android:name="cn.jpush.android.intent.CONNECTION" /> <!-- <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />-->
<category android:name="$PACKAGE_NAME" /> <!-- <action android:name="cn.jpush.android.intent.CONNECTION" />-->
</intent-filter>
<!-- <category android:name="$PACKAGE_NAME" />-->
<!-- </intent-filter>-->
</receiver> </receiver>
<!-- Required . Enable it you can get statistics data with channel -->
<!-- Required. Enable it you can get statistics data with channel --> <meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL"/>
<meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL" /> <meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" /> <!-- </>值来自开发者平台取得的AppKey-->
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" /> <provider
android:name="cn.jpush.android.service.InitProvider"
android:authorities="${applicationId}.jiguang.InitProvider"
android:exported="false"
android:readPermission="${applicationId}.permission.JPUSH_MESSAGE"
android:writePermission="${applicationId}.permission.JPUSH_MESSAGE" />
</config-file> </config-file>
<lib-file src="src/android/libs/jpush-android-3.1.8.jar" /> <lib-file src="src/android/libs/jpush-android-5.6.0.jar" />
<source-file src="src/android/JPushReceiver.java" target-dir="src/cn/jiguang/cordova/push" /> <source-file src="src/android/PushService.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/JPushPlugin.java" target-dir="src/cn/jiguang/cordova/push" /> <source-file src="src/android/JPushPlugin.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/JPushReceiver.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/JPushEventReceiver.java" target-dir="src/cn/jiguang/cordova/push" />
<source-file src="src/android/JLogger.java" target-dir="src/cn/jiguang/cordova/push" />
<resource-file src="src/android/res/drawable-hdpi/jpush_btn_blue_bg.xml"
target="res/drawable/jpush_btn_blue_bg.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_btn_grey_bg.xml"
target="res/drawable/jpush_btn_grey_bg.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_cancel_btn_bg.xml"
target="res/drawable/jpush_cancel_btn_bg.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_close.xml"
target="res/drawable/jpush_close.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_contain_bg.xml"
target="res/drawable/jpush_contain_bg.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_interstitial_bg.xml"
target="res/drawable/jpush_interstitial_bg.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml" <resource-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
target="res/drawable/jpush_richpush_btn_selector.xml" /> target="res/drawable/jpush_richpush_btn_selector.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml" <resource-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml"
target="res/drawable/jpush_richpush_progressbar.xml" /> target="res/drawable/jpush_richpush_progressbar.xml" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png" <resource-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png"
target="res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png" /> target="res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png" <resource-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png"
target="res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png" /> target="res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_action_cancle.png"
target="res/drawable-hdpi/jpush_ic_action_cancle.png" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_action_close.png"
target="res/drawable-hdpi/jpush_ic_action_close.png" />
<resource-file src="src/android/res/drawable-hdpi/jpush_ic_action_close2.png"
target="res/drawable-hdpi/jpush_ic_action_close2.png" />
<resource-file src="src/android/res/drawable-hdpi/jpush_btn_bg_green_playable.xml"
target="res/drawable-hdpi/jpush_btn_bg_green_playable.xml" />
<resource-file src="src/android/res/layout/jpush_popwin_layout.xml" <resource-file src="src/android/res/layout/jpush_popwin_layout.xml"
target="res/layout/jpush_popwin_layout.xml" /> target="res/layout/jpush_popwin_layout.xml" />
<resource-file src="src/android/res/layout/jpush_webview_layout.xml" <resource-file src="src/android/res/layout/jpush_webview_layout.xml"
target="res/layout/jpush_webview_layout.xml" /> target="res/layout/jpush_webview_layout.xml" />
<resource-file src="src/android/res/layout/test_notification_layout.xml" <resource-file src="src/android/res/layout/push_notification.xml"
target="res/layout/test_notification_layout.xml" /> target="res/layout/push_notification.xml" />
<resource-file src="src/android/res/layout/push_notification_large.xml"
target="res/layout/push_notification_large.xml" />
<resource-file src="src/android/res/layout/push_notification_middle.xml"
target="res/layout/push_notification_middle.xml" />
<resource-file src="src/android/res/layout/jpush_inapp_banner.xml"
target="res/layout/jpush_inapp_banner.xml" />
<resource-file src="src/android/res/layout/push_download_notification_layout.xml"
target="res/layout/push_download_notification_layout.xml" />
<resource-file src="src/android/res/layout/jpush_interstitial.xml"
target="res/layout/jpush_interstitial.xml" />
<resource-file src="src/android/res/layout/jpush_full.xml"
target="res/layout/jpush_full.xml" />
<resource-file src="src/android/res/layout/jpush_banner.xml"
target="res/layout/jpush_banner.xml" />
<resource-file src="src/android/res/layout-v21/push_notification.xml"
target="res/layout-v21/push_notification.xml" />
<resource-file src="src/android/res/layout-v21/push_notification_middle.xml"
target="res/layout-v21/push_notification_middle.xml" />
<resource-file src="src/android/res/layout-v21/push_notification_large.xml"
target="res/layout-v21/push_notification_large.xml" />
<resource-file src="src/android/res/values/jpush_style.xml" <resource-file src="src/android/res/values/jpush_style.xml"
target="res/values/jpush_style.xml" /> target="res/values/jpush_style.xml" />
<resource-file src="src/android/res/values/jpush_string.xml"
target="res/values/jpush_string.xml" />
<resource-file src="src/android/res/values-zh/jpush_string.xml"
target="res/values-zh/jpush_string.xml" />
<resource-file src="src/android/res/xml/jpush_file_paths.xml"
target="res/xml/jpush_file_paths.xml" />
</platform> </platform>
</plugin> </plugin>

46
src/android/JLogger.java Normal file
View File

@ -0,0 +1,46 @@
package cn.jiguang.cordova.push;
import android.util.Log;
public class JLogger {
public static final String TAG = "[Cordova-JPush]";
private static boolean isLoggerEnable = false;
public static void setLoggerEnable(boolean loggerEnable) {
Log.d(TAG, "setLoggerEnable:" + loggerEnable);
isLoggerEnable = loggerEnable;
}
public static void i(String tag,String msg) {
if (isLoggerEnable) {
Log.i(TAG+tag, msg);
}
}
public static void d(String tag,String msg) {
if (isLoggerEnable) {
Log.d(TAG+tag, msg);
}
}
public static void v(String tag,String msg) {
if (isLoggerEnable) {
Log.v(TAG+tag, msg);
}
}
public static void w(String tag,String msg) {
if (isLoggerEnable) {
Log.w(TAG+tag, msg);
}
}
public static void e(String tag,String error) {
if (isLoggerEnable) {
Log.e(TAG+tag, error);
}
}
}

View File

@ -1,6 +1,7 @@
package cn.jiguang.cordova.push; package cn.jiguang.cordova.push;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@ -9,9 +10,17 @@ import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; import java.util.Set;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.JPushMessage; import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.helper.Logger;
import cn.jpush.android.local.JPushConstants;
import cn.jpush.android.service.JPushMessageReceiver; import cn.jpush.android.service.JPushMessageReceiver;
public class JPushEventReceiver extends JPushMessageReceiver { public class JPushEventReceiver extends JPushMessageReceiver {
@ -21,98 +30,211 @@ public class JPushEventReceiver extends JPushMessageReceiver {
@Override @Override
public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
super.onTagOperatorResult(context, jPushMessage); super.onTagOperatorResult(context, jPushMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onTagOperatorResult:"+jPushMessage);
JSONObject resultJson = new JSONObject(); tryCallback(jPushMessage, new SuccessCallback() {
@Override
int sequence = jPushMessage.getSequence(); public void onSuccessCallback(JSONObject resultJson) throws JSONException {
try { Set<String> tags = jPushMessage.getTags();
resultJson.put("sequence", sequence); JSONArray tagsJsonArr = new JSONArray();
} catch (JSONException e) { for (String tag : tags) {
e.printStackTrace(); tagsJsonArr.put(tag);
} }
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) { if (tagsJsonArr.length() != 0) {
resultJson.put("tags", tagsJsonArr); 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 @Override
public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) { public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
super.onCheckTagOperatorResult(context, jPushMessage); super.onCheckTagOperatorResult(context, jPushMessage);
JSONObject resultJson = new JSONObject(); cn.jiguang.cordova.push.JLogger.d(TAG,"onCheckTagOperatorResult:"+jPushMessage);
int sequence = jPushMessage.getSequence(); tryCallback(jPushMessage, new SuccessCallback() {
try { @Override
resultJson.put("sequence", sequence); public void onSuccessCallback(JSONObject resultJson) throws JSONException {
} 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("tag", jPushMessage.getCheckTag());
resultJson.put("isBind", jPushMessage.getTagCheckStateResult()); resultJson.put("isBind", jPushMessage.getTagCheckStateResult());
} 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 @Override
public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
super.onAliasOperatorResult(context, jPushMessage); super.onAliasOperatorResult(context, jPushMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onAliasOperatorResult:"+jPushMessage);
tryCallback(jPushMessage, new SuccessCallback() {
@Override
public void onSuccessCallback(JSONObject resultJson) throws JSONException {
if (!TextUtils.isEmpty(jPushMessage.getAlias())) {
resultJson.put("alias", jPushMessage.getAlias());
}
}
});
}
@Override
public void onRegister(Context context, String regId) {
cn.jiguang.cordova.push.JLogger.d(TAG,"onRegister:"+regId);
cn.jiguang.cordova.push.JPushPlugin.transmitReceiveRegistrationId(regId);
}
@Override
public void onMessage(Context context, CustomMessage customMessage) {
// super.onMessage(context,customMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onMessage:"+customMessage);
try {
JSONObject jsonObject=new JSONObject();
jsonObject.put("message", customMessage.message);
jsonObject.put("alert", customMessage.title);
jsonObject.put(JPushInterface.EXTRA_EXTRA, stringToMap(customMessage.extra));
jsonObject.put(JPushInterface.EXTRA_MSG_ID, customMessage.messageId);
jsonObject.put(JPushInterface.EXTRA_CONTENT_TYPE, customMessage.contentType);
if (JPushConstants.SDK_VERSION_CODE >= 387) {
jsonObject.put(JPushInterface.EXTRA_TYPE_PLATFORM, customMessage.platform);
}
cn.jiguang.cordova.push.JPushPlugin.transmitNotificationReceive(jsonObject);
}catch (Throwable throwable){
cn.jiguang.cordova.push.JLogger.d(TAG,"onMessage throwable:"+throwable);
}
}
@Override
public void onNotifyMessageArrived(Context context, NotificationMessage notificationMessage) {
// super.onNotifyMessageArrived(context, notificationMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onNotifyMessageArrived:"+notificationMessage);
try {
JSONObject jsonObject=new JSONObject();
jsonObject.put("title", notificationMessage.notificationTitle);
jsonObject.put("alert", notificationMessage.notificationContent);
getExtras(jsonObject,notificationMessage);
JPushPlugin.notificationJson = jsonObject;
cn.jiguang.cordova.push.JPushPlugin.transmitNotificationReceive(jsonObject);
}catch (Throwable throwable){
cn.jiguang.cordova.push.JLogger.d(TAG,"onNotifyMessageArrived throwable:"+throwable);
}
}
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage notificationMessage) {
// super.onNotifyMessageOpened(context, notificationMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onNotifyMessageOpened:"+notificationMessage);
try {
JSONObject jsonObject=new JSONObject();
jsonObject.put("title", notificationMessage.notificationTitle);
jsonObject.put("alert", notificationMessage.notificationContent);
getExtras(jsonObject,notificationMessage);
JPushPlugin.openNotificationJson = jsonObject;
cn.jiguang.cordova.push.JPushPlugin.transmitNotificationOpen(jsonObject);
}catch (Throwable throwable){
cn.jiguang.cordova.push.JLogger.d(TAG,"onNotifyMessageOpened throwable:"+throwable);
}
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
if (launch != null) {
launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(launch);
}
}
private void getExtras(JSONObject extras,NotificationMessage notificationMessage) {
try {
extras.put(JPushInterface.EXTRA_MSG_ID, notificationMessage.msgId);
extras.put(JPushInterface.EXTRA_NOTIFICATION_ID, notificationMessage.notificationId);
extras.put(JPushInterface.EXTRA_ALERT_TYPE, notificationMessage.notificationAlertType + "");
extras.put(JPushInterface.EXTRA_EXTRA, stringToMap(notificationMessage.notificationExtras));
if (notificationMessage.notificationStyle == 1 && !TextUtils.isEmpty(notificationMessage.notificationBigText)) {
extras.put(JPushInterface.EXTRA_BIG_TEXT, notificationMessage.notificationBigText);
} else if (notificationMessage.notificationStyle == 2 && !TextUtils.isEmpty(notificationMessage.notificationInbox)) {
extras.put(JPushInterface.EXTRA_INBOX, notificationMessage.notificationInbox);
} else if ((notificationMessage.notificationStyle == 3) && !TextUtils.isEmpty(notificationMessage.notificationBigPicPath)) {
extras.put(JPushInterface.EXTRA_BIG_PIC_PATH, notificationMessage.notificationBigPicPath);
}
if (!(notificationMessage.notificationPriority == 0)) {
extras.put(JPushInterface.EXTRA_NOTI_PRIORITY, notificationMessage.notificationPriority + "");
}
if (!TextUtils.isEmpty(notificationMessage.notificationCategory)) {
extras.put(JPushInterface.EXTRA_NOTI_CATEGORY, notificationMessage.notificationCategory);
}
if (!TextUtils.isEmpty(notificationMessage.notificationSmallIcon)) {
extras.put(JPushInterface.EXTRA_NOTIFICATION_SMALL_ICON, notificationMessage.notificationSmallIcon);
}
if (!TextUtils.isEmpty(notificationMessage.notificationLargeIcon)) {
extras.put(JPushInterface.EXTRA_NOTIFICATION_LARGET_ICON, notificationMessage.notificationLargeIcon);
}
} catch (Throwable e) {
Log.e(TAG, "[onNotifyMessageUnShow] e:" + e.getMessage());
}
}
@Override
public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
super.onMobileNumberOperatorResult(context, jPushMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onMobileNumberOperatorResult:"+jPushMessage);
tryCallback(jPushMessage, new SuccessCallback() {
@Override
public void onSuccessCallback(JSONObject resultJson) throws JSONException {
if (!TextUtils.isEmpty(jPushMessage.getMobileNumber())) {
resultJson.put("mobileNumber", jPushMessage.getMobileNumber());
}
}
});
}
@Override
public void onMultiActionClicked(Context context, Intent intent) {
super.onMultiActionClicked(context, intent);
cn.jiguang.cordova.push.JLogger.d(TAG,"onMultiActionClicked:"+intent);
}
@Override
public void onInAppMessageShow(Context context,final NotificationMessage message) {
cn.jiguang.cordova.push.JLogger.d(TAG, "[onInAppMessageShow], " + message.toString());
try {
JSONObject jsonObject=new JSONObject();
jsonObject.put("title", message.inAppMsgTitle);
jsonObject.put("alert", message.inAppMsgContentBody);
jsonObject.put("messageId", message.msgId);
jsonObject.put("inAppShowTarget", message.inAppExtras);
jsonObject.put("inAppClickAction", message.inAppClickAction);
jsonObject.put("inAppExtras", message.inAppExtras);
cn.jiguang.cordova.push.JPushPlugin.transmitInAppMessageShow(jsonObject);
}catch (Throwable throwable){
}
}
@Override
public void onInAppMessageClick(Context context,final NotificationMessage message) {
cn.jiguang.cordova.push.JLogger.d(TAG, "[onInAppMessageClick], " + message.toString());
try {
JSONObject jsonObject=new JSONObject();
jsonObject.put("title", message.inAppMsgTitle);
jsonObject.put("alert", message.inAppMsgContentBody);
jsonObject.put("messageId", message.msgId);
jsonObject.put("inAppShowTarget", message.inAppExtras);
jsonObject.put("inAppClickAction", message.inAppClickAction);
jsonObject.put("inAppExtras", message.inAppExtras);
cn.jiguang.cordova.push.JPushPlugin.transmitInAppMessageClick(jsonObject);
}catch (Throwable throwable){
}
}
interface SuccessCallback{
void onSuccessCallback(JSONObject resultJson) throws JSONException;
}
public void tryCallback(JPushMessage jPushMessage,SuccessCallback successCallback){
JSONObject resultJson = new JSONObject(); JSONObject resultJson = new JSONObject();
int sequence = jPushMessage.getSequence(); int sequence = jPushMessage.getSequence();
@ -122,22 +244,19 @@ public class JPushEventReceiver extends JPushMessageReceiver {
e.printStackTrace(); e.printStackTrace();
} }
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence); CallbackContext callback = cn.jiguang.cordova.push.JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) { if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!"); Logger.i(TAG, "Unexpected error, callback is null!");
return; return;
} }
if (jPushMessage.getErrorCode() == 0) { // success if (jPushMessage.getErrorCode() == 0) {
try { try {
if (!TextUtils.isEmpty(jPushMessage.getAlias())) { successCallback.onSuccessCallback(resultJson);
resultJson.put("alias", jPushMessage.getAlias());
}
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
callback.success(resultJson); callback.success(resultJson);
} else { } else {
@ -146,10 +265,38 @@ public class JPushEventReceiver extends JPushMessageReceiver {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
callback.error(resultJson); callback.error(resultJson);
} }
JPushPlugin.eventCallbackMap.remove(sequence); cn.jiguang.cordova.push.JPushPlugin.eventCallbackMap.remove(sequence);
}
public Map<String, Object> stringToMap(String extra) {
Map<String, Object> useExtra = new HashMap<String, Object>();
try {
if (TextUtils.isEmpty(extra)) {
return useExtra;
}
JSONObject object = new JSONObject(extra);
Iterator<String> keys = object.keys();
while (keys.hasNext()) {
try {
String key = keys.next();
Object value = object.get(key);
if (value instanceof Integer
|| value instanceof Long
|| value instanceof Boolean
|| value instanceof String) {
useExtra.put(key, value);
} else {
useExtra.put(key, String.valueOf(value));
}
} catch (Throwable throwable) {
}
}
} catch (Throwable throwable) {
}
return useExtra;
} }
} }

View File

@ -31,6 +31,7 @@ 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.jiguang.api.utils.JCollectionAuth;
public class JPushPlugin extends CordovaPlugin { public class JPushPlugin extends CordovaPlugin {
@ -41,12 +42,10 @@ public class JPushPlugin extends CordovaPlugin {
private static JPushPlugin instance; private static JPushPlugin instance;
private static Activity cordovaActivity; private static Activity cordovaActivity;
static String notificationTitle; static JSONObject notificationJson;
static String notificationAlert;
static Map<String, Object> notificationExtras = new HashMap<String, Object>(); static Map<String, Object> notificationExtras = new HashMap<String, Object>();
static String openNotificationTitle; static JSONObject openNotificationJson;
static String openNotificationAlert;
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>(); static Map<Integer, CallbackContext> eventCallbackMap = new HashMap<Integer, CallbackContext>();
@ -59,29 +58,28 @@ public class JPushPlugin extends CordovaPlugin {
public void initialize(CordovaInterface cordova, CordovaWebView webView) { public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView); super.initialize(cordova, webView);
mContext = cordova.getActivity().getApplicationContext(); mContext = cordova.getActivity().getApplicationContext();
Log.d(TAG,"initialize plugin");
JPushInterface.init(mContext); // JPushInterface.init(mContext);
cordovaActivity = cordova.getActivity(); cordovaActivity = cordova.getActivity();
// 如果同时缓存了打开事件 openNotificationAlert 消息事件 notificationAlert只向 UI 发打开事件 // 如果同时缓存了打开事件 openNotificationAlert 消息事件 notificationAlert只向 UI 发打开事件
// 这样做是为了和 iOS 统一 // 这样做是为了和 iOS 统一
if (openNotificationAlert != null) { if (openNotificationJson != null) {
notificationAlert = null; transmitNotificationOpen(openNotificationJson);
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
} }
if (notificationAlert != null) { if (notificationJson != null) {
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras); transmitNotificationReceive(notificationJson);
} }
} }
public void onResume(boolean multitasking) { public void onResume(boolean multitasking) {
if (openNotificationAlert != null) { if (openNotificationJson != null) {
notificationAlert = null; transmitNotificationOpen(openNotificationJson);
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
} }
if (notificationAlert != null) { if (notificationJson != null) {
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras); transmitNotificationReceive(notificationJson);
} }
} }
@ -159,11 +157,11 @@ public class JPushPlugin extends CordovaPlugin {
return data; return data;
} }
static void transmitMessageReceive(String message, Map<String, Object> extras) { static void transmitMessageReceive(JSONObject data) {
if (instance == null) { if (instance == null) {
return; return;
} }
JSONObject data = getMessageObject(message, extras); // JSONObject data = getMessageObject(message, extras);
String format = "window.plugins.jPushPlugin.receiveMessageInAndroidCallback(%s);"; String format = "window.plugins.jPushPlugin.receiveMessageInAndroidCallback(%s);";
final String js = String.format(format, data.toString()); final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() { cordovaActivity.runOnUiThread(new Runnable() {
@ -173,12 +171,39 @@ public class JPushPlugin extends CordovaPlugin {
} }
}); });
} }
static void transmitInAppMessageClick( JSONObject data) {
static void transmitNotificationOpen(String title, String alert, Map<String, Object> extras) {
if (instance == null) { if (instance == null) {
return; return;
} }
JSONObject data = getNotificationObject(title, alert, extras); String format = "window.plugins.jPushPlugin.receiveInAppMessageClickCallback(%s);";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.webView.loadUrl("javascript:" + js);
}
});
}
static void transmitInAppMessageShow( JSONObject data) {
if (instance == null) {
return;
}
String format = "window.plugins.jPushPlugin.receiveInAppMessageShowCallback(%s);";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.webView.loadUrl("javascript:" + js);
}
});
}
static void transmitNotificationOpen(JSONObject data) {
if (instance == null) {
return;
}
// JSONObject data = getNotificationObject(title, alert, extras);
String format = "window.plugins.jPushPlugin.openNotificationInAndroidCallback(%s);"; String format = "window.plugins.jPushPlugin.openNotificationInAndroidCallback(%s);";
final String js = String.format(format, data.toString()); final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() { cordovaActivity.runOnUiThread(new Runnable() {
@ -187,15 +212,14 @@ public class JPushPlugin extends CordovaPlugin {
instance.webView.loadUrl("javascript:" + js); instance.webView.loadUrl("javascript:" + js);
} }
}); });
JPushPlugin.openNotificationTitle = null; JPushPlugin.openNotificationJson = null;
JPushPlugin.openNotificationAlert = null;
} }
static void transmitNotificationReceive(String title, String alert, Map<String, Object> extras) { static void transmitNotificationReceive(JSONObject data) {
if (instance == null) { if (instance == null) {
return; return;
} }
JSONObject data = getNotificationObject(title, alert, extras); // JSONObject data = getNotificationObject(title, alert, extras);
String format = "window.plugins.jPushPlugin.receiveNotificationInAndroidCallback(%s);"; String format = "window.plugins.jPushPlugin.receiveNotificationInAndroidCallback(%s);";
final String js = String.format(format, data.toString()); final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() { cordovaActivity.runOnUiThread(new Runnable() {
@ -204,8 +228,7 @@ public class JPushPlugin extends CordovaPlugin {
instance.webView.loadUrl("javascript:" + js); instance.webView.loadUrl("javascript:" + js);
} }
}); });
JPushPlugin.notificationTitle = null; JPushPlugin.notificationJson = null;
JPushPlugin.notificationAlert = null;
} }
static void transmitReceiveRegistrationId(String rId) { static void transmitReceiveRegistrationId(String rId) {
@ -246,6 +269,7 @@ public class JPushPlugin extends CordovaPlugin {
} }
void init(JSONArray data, CallbackContext callbackContext) { void init(JSONArray data, CallbackContext callbackContext) {
JPushInterface.setNotificationCallBackEnable(mContext, true);
JPushInterface.init(mContext); JPushInterface.init(mContext);
} }
@ -254,6 +278,7 @@ public class JPushPlugin extends CordovaPlugin {
try { try {
mode = data.getBoolean(0); mode = data.getBoolean(0);
JPushInterface.setDebugMode(mode); JPushInterface.setDebugMode(mode);
JLogger.setLoggerEnable(mode);
callbackContext.success(); callbackContext.success();
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
@ -296,6 +321,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("error reading num json"); callbackContext.error("error reading num json");
return;
} }
if (num != -1) { if (num != -1) {
JPushInterface.setLatestNotificationNumber(mContext, num); JPushInterface.setLatestNotificationNumber(mContext, num);
@ -364,6 +390,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.setAlias(mContext, sequence, alias); JPushInterface.setAlias(mContext, sequence, alias);
@ -379,6 +406,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.deleteAlias(mContext, sequence); JPushInterface.deleteAlias(mContext, sequence);
@ -394,6 +422,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.getAlias(mContext, sequence); JPushInterface.getAlias(mContext, sequence);
@ -416,6 +445,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.setTags(mContext, sequence, tags); JPushInterface.setTags(mContext, sequence, tags);
@ -438,6 +468,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.addTags(mContext, sequence, tags); JPushInterface.addTags(mContext, sequence, tags);
@ -460,6 +491,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.deleteTags(mContext, sequence, tags); JPushInterface.deleteTags(mContext, sequence, tags);
@ -476,6 +508,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.cleanTags(mContext, sequence); JPushInterface.cleanTags(mContext, sequence);
@ -492,6 +525,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.getAllTags(mContext, sequence); JPushInterface.getAllTags(mContext, sequence);
@ -510,6 +544,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
callbackContext.error("Parameters error."); callbackContext.error("Parameters error.");
return;
} }
JPushInterface.checkTagBindState(mContext, sequence, tag); JPushInterface.checkTagBindState(mContext, sequence, tag);
@ -637,6 +672,41 @@ public class JPushPlugin extends CordovaPlugin {
JPushInterface.setMaxGeofenceNumber(mContext, maxNumber); JPushInterface.setMaxGeofenceNumber(mContext, maxNumber);
} }
void setBadgeNumber(JSONArray data, CallbackContext callbackContext) throws JSONException {
int badgeNumb = data.getInt(0);
JPushInterface.setBadgeNumber(mContext, badgeNumb);
}
void setMobileNumber(JSONArray data, CallbackContext callbackContext) throws JSONException {
int sequence = -1;
String number = null;
try {
JSONObject params = data.getJSONObject(0);
sequence = params.getInt("sequence");
number = params.getString("mobileNumber");
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
eventCallbackMap.put(sequence, callbackContext);
JPushInterface.setMobileNumber(mContext,sequence, number);
}
void setAuth(JSONArray data, CallbackContext callbackContext) {
boolean isAuth = false;
try {
isAuth = data.getBoolean(0);
JCollectionAuth.setAuth(mContext, isAuth);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
}
}
private boolean isValidHour(int hour) { private boolean isValidHour(int hour) {
return !(hour < 0 || hour > 23); return !(hour < 0 || hour > 23);
} }

View File

@ -18,69 +18,69 @@ public class JPushReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); // String action = intent.getAction();
if (action.equals(JPushInterface.ACTION_REGISTRATION_ID)) { // if (action.equals(JPushInterface.ACTION_REGISTRATION_ID)) {
String rId = intent.getStringExtra(JPushInterface.EXTRA_REGISTRATION_ID); // String rId = intent.getStringExtra(JPushInterface.EXTRA_REGISTRATION_ID);
JPushPlugin.transmitReceiveRegistrationId(rId); // JPushPlugin.transmitReceiveRegistrationId(rId);
} else if (action.equals(JPushInterface.ACTION_MESSAGE_RECEIVED)) { // } else if (action.equals(JPushInterface.ACTION_MESSAGE_RECEIVED)) {
handlingMessageReceive(intent); // handlingMessageReceive(intent);
} else if (action.equals(JPushInterface.ACTION_NOTIFICATION_RECEIVED)) { // } else if (action.equals(JPushInterface.ACTION_NOTIFICATION_RECEIVED)) {
handlingNotificationReceive(context, intent); // handlingNotificationReceive(context, intent);
} else if (action.equals(JPushInterface.ACTION_NOTIFICATION_OPENED)) { // } else if (action.equals(JPushInterface.ACTION_NOTIFICATION_OPENED)) {
handlingNotificationOpen(context, intent); // handlingNotificationOpen(context, intent);
} // }
} }
private void handlingMessageReceive(Intent intent) { // private void handlingMessageReceive(Intent intent) {
String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE); // String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
Map<String, Object> extras = getNotificationExtras(intent); // Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.transmitMessageReceive(msg, extras); // JPushPlugin.transmitMessageReceive(msg, extras);
} // }
//
private void handlingNotificationOpen(Context context, Intent intent) { // private void handlingNotificationOpen(Context context, Intent intent) {
String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE); // String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
JPushPlugin.openNotificationTitle = title; // JPushPlugin.openNotificationJson = title;
//
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT); // String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
JPushPlugin.openNotificationAlert = alert; // JPushPlugin.openNotificationAlert = alert;
//
Map<String, Object> extras = getNotificationExtras(intent); // Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.openNotificationExtras = extras; // JPushPlugin.openNotificationExtras = extras;
//
JPushPlugin.transmitNotificationOpen(title, alert, extras); // JPushPlugin.transmitNotificationOpen(title, alert, extras);
//
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); // Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
if (launch != null) { // if (launch != null) {
launch.addCategory(Intent.CATEGORY_LAUNCHER); // launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); // launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(launch); // context.startActivity(launch);
} // }
} // }
//
private void handlingNotificationReceive(Context context, Intent intent) { // private void handlingNotificationReceive(Context context, Intent intent) {
String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE); // String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
JPushPlugin.notificationTitle = title; // JPushPlugin.notificationTitle = title;
//
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT); // String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
JPushPlugin.notificationAlert = alert; // JPushPlugin.notificationAlert = alert;
//
Map<String, Object> extras = getNotificationExtras(intent); // Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.notificationExtras = extras; // JPushPlugin.notificationExtras = extras;
//
JPushPlugin.transmitNotificationReceive(title, alert, extras); // JPushPlugin.transmitNotificationReceive(title, alert, extras);
} // }
//
private Map<String, Object> getNotificationExtras(Intent intent) { // private Map<String, Object> getNotificationExtras(Intent intent) {
Map<String, Object> extrasMap = new HashMap<String, Object>(); // Map<String, Object> extrasMap = new HashMap<String, Object>();
for (String key : intent.getExtras().keySet()) { // for (String key : intent.getExtras().keySet()) {
if (!IGNORED_EXTRAS_KEYS.contains(key)) { // if (!IGNORED_EXTRAS_KEYS.contains(key)) {
if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) { // if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
extrasMap.put(key, intent.getIntExtra(key, 0)); // extrasMap.put(key, intent.getIntExtra(key, 0));
} else { // } else {
extrasMap.put(key, intent.getStringExtra(key)); // extrasMap.put(key, intent.getStringExtra(key));
} // }
} // }
} // }
return extrasMap; // return extrasMap;
} // }
} }

View File

@ -0,0 +1,6 @@
package cn.jiguang.cordova.push;
import cn.jpush.android.service.JCommonService;
public class PushService extends JCommonService {
}

Binary file not shown.

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners android:radius="6dp" />
<solid android:color="#0A9789" />
<stroke android:color="#0A9789" android:width="1dp"/>
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ff2c6bff" />
<corners android:radius="25dp" />
</shape>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff" />
<stroke android:width="0.1dp"/>
<corners android:radius="20dp" />
</shape>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<stroke android:width="1dp"
android:color="#E2E3E5"
/>
<corners android:radius="25dp" />
</shape>

View File

@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:viewportWidth="30"
android:viewportHeight="30">
<path
android:pathData="M15,15m-15,0a15,15 0,1 1,30 0a15,15 0,1 1,-30 0"
android:strokeWidth="1"
android:fillColor="#253044"
android:fillAlpha="0.68"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M19.7356,10.2465C20.0722,10.5832 20.0722,11.129 19.7356,11.4656L16.21,14.99L19.7328,18.5129C20.0696,18.8498 20.0696,19.3959 19.7328,19.7328C19.3959,20.0696 18.8498,20.0696 18.5129,19.7328L14.99,16.21L11.4656,19.7356C11.129,20.0722 10.5832,20.0722 10.2465,19.7356C9.9099,19.3989 9.9099,18.8531 10.2465,18.5165L13.771,14.991L10.2493,11.4692C9.9125,11.1323 9.9125,10.5862 10.2493,10.2493C10.5862,9.9125 11.1323,9.9125 11.4692,10.2493L14.991,13.771L18.5165,10.2465C18.8531,9.9099 19.3989,9.9099 19.7356,10.2465Z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff" />
<corners android:radius="15dp" />
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 B

View File

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 695 B

View File

Before

Width:  |  Height:  |  Size: 181 B

After

Width:  |  Height:  |  Size: 181 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff" />
<corners android:topLeftRadius="0dp" android:topRightRadius="0dp" android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
</shape>

View File

@ -0,0 +1,296 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/push_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/v21"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/layout_version_2"
android:layout_width="0dp"
android:layout_height="0dp" />
<RelativeLayout
android:id="@+id/push_notification_style_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:id="@+id/push_notification_layout_lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/push_notification_small_icon"
android:layout_width="18dp"
android:layout_height="18dp"
android:scaleType="centerInside" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:maxLines="1"
android:maxWidth="200dp"
android:maxLength="24"
android:textSize="12sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:textStyle="bold"
android:text="·"
android:textSize="16sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Time"
android:maxLines="1"
android:id="@+id/push_notification_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
<FrameLayout
android:id="@+id/push_notification_for_bottom_margin"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="0dp"/>
<ImageView
android:id="@+id/push_notification_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_above="@+id/push_notification_for_bottom_margin"
android:layout_marginBottom="8dp"
android:visibility="gone"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/push_notification_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/push_notification_banner_icon"
android:gravity="center_vertical"
android:layout_marginRight="4dp"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:layout_below="@id/push_notification_layout_lefttop">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="13sp"
android:visibility="gone" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="2"
android:textSize="13sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content_one_line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:textSize="13sp"
android:maxLines="1"
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_big_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/push_notification_main_layout"
android:layout_alignBottom="@+id/push_notification_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/push_notification_style_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/push_notification_style_1_big_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="centerInside" />
<LinearLayout
android:id="@+id/push_notification_style_1_main_layout"
android:layout_toRightOf="@+id/push_notification_style_1_big_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/push_notification_layout_time"
android:gravity="center_vertical"
android:weightSum="1"
android:orientation="horizontal">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_style_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_marginRight="8dp"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Time"
android:id="@+id/push_notification_style_1_date"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="right"
android:textSize="12sp" />
<TextView android:id="@+id/push_notification_null"
android:layout_width="24dp"
android:visibility="gone"
android:layout_height="20dp"/>
</LinearLayout>
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_style_1_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="1"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_style_1_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_alignParentBottom="true"
android:visibility="gone"
android:layout_below="@id/push_notification_style_1_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<FrameLayout
android:id="@+id/push_notification_banner_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/push_notification_banner_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:visibility="gone" />
</FrameLayout>
<RelativeLayout
android:id="@+id/push_notification_header_neg_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="gone">
<ImageView android:id="@+id/push_notification_header_expand"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:scaleType="centerInside"
android:background="#08000000"
android:src="@drawable/jpush_ic_action_close"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/push_notification_fb_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:layout_below="@id/push_notification_header_expand"
android:orientation="horizontal"
android:visibility="invisible"
android:gravity="center">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="不感兴趣"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="重复收到"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容低质"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容不宜"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/push_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="256dp">
<FrameLayout
android:id="@+id/v21"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/layout_version_2"
android:layout_width="0dp"
android:layout_height="0dp" />
<RelativeLayout
android:id="@+id/push_notification_style_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:id="@+id/push_notification_layout_lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/push_notification_small_icon"
android:layout_width="18dp"
android:layout_height="18dp"
android:scaleType="centerInside" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:maxLines="1"
android:maxWidth="200dp"
android:maxLength="24"
android:textSize="12sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:textStyle="bold"
android:text="·"
android:textSize="16sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Time"
android:maxLines="1"
android:id="@+id/push_notification_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
<FrameLayout
android:id="@+id/push_notification_for_bottom_margin"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="0dp"/>
<ImageView
android:id="@+id/push_notification_banner_icon"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_above="@+id/push_notification_for_bottom_margin"
android:layout_marginBottom="8dp"
android:visibility="visible"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/push_notification_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/push_notification_banner_icon"
android:gravity="center_vertical"
android:layout_marginRight="4dp"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:layout_below="@id/push_notification_layout_lefttop">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="13sp"
android:visibility="gone" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="2"
android:textSize="13sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content_one_line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:textSize="13sp"
android:maxLines="1"
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_big_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/push_notification_main_layout"
android:layout_alignBottom="@+id/push_notification_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/push_notification_style_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/push_notification_style_1_big_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="centerInside" />
<LinearLayout
android:id="@+id/push_notification_style_1_main_layout"
android:layout_toRightOf="@+id/push_notification_style_1_big_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/push_notification_layout_time"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_style_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_marginRight="8dp"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Time"
android:id="@+id/push_notification_style_1_date"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="4dp"
android:gravity="right"
android:textSize="12sp" />
<TextView android:id="@+id/push_notification_null"
android:layout_width="24dp"
android:visibility="gone"
android:layout_height="20dp"/>
</LinearLayout>
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_style_1_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="1"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_style_1_banner_icon"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_alignParentBottom="true"
android:visibility="gone"
android:layout_below="@id/push_notification_style_1_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<FrameLayout
android:id="@+id/push_notification_banner_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/push_notification_banner_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:visibility="gone" />
</FrameLayout>
<RelativeLayout
android:id="@+id/push_notification_header_neg_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="gone">
<ImageView android:id="@+id/push_notification_header_expand"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:scaleType="centerInside"
android:background="#08000000"
android:src="@drawable/jpush_ic_action_close"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/push_notification_fb_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:layout_below="@id/push_notification_header_expand"
android:orientation="horizontal"
android:visibility="invisible"
android:gravity="center">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="不感兴趣"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="重复收到"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容低质"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容不宜"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/push_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="202dp">
<FrameLayout
android:id="@+id/v21"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/layout_version_2"
android:layout_width="0dp"
android:layout_height="0dp" />
<RelativeLayout
android:id="@+id/push_notification_style_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:id="@+id/push_notification_layout_lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/push_notification_small_icon"
android:layout_width="18dp"
android:layout_height="18dp"
android:scaleType="centerInside" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:maxLines="1"
android:maxWidth="200dp"
android:maxLength="24"
android:textSize="12sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:textStyle="bold"
android:text="·"
android:textSize="16sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Time"
android:maxLines="1"
android:id="@+id/push_notification_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
<FrameLayout
android:id="@+id/push_notification_for_bottom_margin"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="0dp"/>
<ImageView
android:id="@+id/push_notification_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_above="@+id/push_notification_for_bottom_margin"
android:layout_marginBottom="8dp"
android:visibility="visible"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/push_notification_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/push_notification_banner_icon"
android:gravity="center_vertical"
android:layout_marginRight="4dp"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:layout_below="@id/push_notification_layout_lefttop">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="13sp"
android:visibility="gone" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="2"
android:textSize="13sp" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content_one_line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:textSize="13sp"
android:maxLines="1"
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_big_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/push_notification_main_layout"
android:layout_alignBottom="@+id/push_notification_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/push_notification_style_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/push_notification_style_1_big_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="centerInside" />
<LinearLayout
android:id="@+id/push_notification_style_1_main_layout"
android:layout_toRightOf="@+id/push_notification_style_1_big_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/push_notification_layout_time"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_style_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_marginRight="8dp"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
style="@android:style/TextAppearance.Material.Notification.Time"
android:id="@+id/push_notification_style_1_date"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="4dp"
android:gravity="right"
android:textSize="12sp" />
<TextView android:id="@+id/push_notification_null"
android:layout_width="24dp"
android:visibility="gone"
android:layout_height="20dp"/>
</LinearLayout>
<TextView
style="@android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_style_1_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="1"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_style_1_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_alignParentBottom="true"
android:visibility="gone"
android:layout_below="@id/push_notification_style_1_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<FrameLayout
android:id="@+id/push_notification_banner_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/push_notification_banner_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:visibility="gone" />
</FrameLayout>
<RelativeLayout
android:id="@+id/push_notification_header_neg_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="gone">
<ImageView android:id="@+id/push_notification_header_expand"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:scaleType="centerInside"
android:background="#08000000"
android:src="@drawable/jpush_ic_action_close"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/push_notification_fb_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:layout_below="@id/push_notification_header_expand"
android:orientation="horizontal"
android:visibility="invisible"
android:gravity="center">
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="不感兴趣"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="重复收到"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容低质"/>
<TextView
style="@android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_fb_content_no_like4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容不宜"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent">
<RelativeLayout
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<cn.jpush.android.ui.ShadowViewCard
android:id="@+id/bg_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<RelativeLayout
android:id="@+id/banner_content"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<cn.jpush.android.ui.RoundedImageView
android:id="@+id/image_small"
android:layout_centerVertical="true"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginEnd="8dp"
android:scaleType="fitXY"
/>
<TextView
android:id="@+id/text_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/image_small"
android:layout_marginBottom="6dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#ff253044"
android:textSize="20sp" />
<TextView
android:id="@+id/text_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/text_title"
android:layout_toRightOf="@+id/image_small"
android:ellipsize="end"
android:maxLines="2"
android:textColor="#85253044"
android:textSize="18sp" />
</RelativeLayout>
</cn.jpush.android.ui.ShadowViewCard>
<cn.jpush.android.ui.RoundedImageView
android:id="@+id/image_only"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:visibility="gone" />
</RelativeLayout>
</FrameLayout>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
/>
<FrameLayout
android:id="@+id/countdown_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginTop="20dp"
android:layout_marginRight="16dp">
<TextView
android:layout_gravity="right"
android:id="@+id/btn_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/jpush_btn_grey_bg"
android:paddingLeft="12dp"
android:paddingTop="5dp"
android:ellipsize="end"
android:maxLines="1"
android:paddingRight="12dp"
android:paddingBottom="5dp"
android:text=""
android:textColor="#ff2c6bff"
android:textSize="20sp" />
<ImageView
android:id="@+id/image_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/jpush_close" />
</FrameLayout>
</FrameLayout>

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/banner_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1.0">
<RelativeLayout
android:id="@+id/banner_content_root"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:padding="15dp"
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:id="@+id/banner_image_only"
android:adjustViewBounds="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:scaleType="fitXY"/>
<ImageView
android:id="@+id/banner_image"
android:adjustViewBounds="true"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_centerVertical="true"
android:padding="5dp"
android:layout_marginLeft="3dp"
android:visibility="visible" />
<LinearLayout
android:id="@+id/banner_text_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="74dp"
android:layout_toRightOf="@id/banner_image"
android:layout_marginLeft="3dp"
android:gravity="center_vertical"
android:orientation="vertical"
android:layout_centerInParent="true">
<TextView
android:id="@+id/banner_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/banner_image"
android:ellipsize="end"
android:singleLine="true"
android:layout_marginRight="4dp"
android:text=""
android:textSize="14sp"
android:visibility="visible" />
<TextView
android:id="@+id/banner_body"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/banner_title"
android:layout_toRightOf="@+id/banner_image"
android:ellipsize="end"
android:singleLine="true"
android:layout_marginRight="4dp"
android:text=""
android:textSize="14sp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</FrameLayout>

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#66000000"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp">
<LinearLayout
android:id="@+id/content_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<cn.jpush.android.ui.RoundedImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="140dp"
android:scaleType="fitXY"
android:visibility="gone" />
<LinearLayout
android:id="@+id/bg_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/jpush_interstitial_bg"
android:orientation="vertical">
<LinearLayout
android:id="@+id/margeview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:text=""
android:ellipsize="end"
android:maxLines="1"
android:textColor="#ff253044"
android:textSize="22sp" />
<TextView
android:id="@+id/text_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:maxHeight="130dp"
android:scrollbars="vertical"
android:text=""
android:textColor="#ad253044"
android:textSize="18sp"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/btn_parent_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:id="@+id/btn_one"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/jpush_cancel_btn_bg"
android:gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:layout_marginRight="10dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#d6253044"
android:textSize="20sp" />
<TextView
android:ellipsize="end"
android:maxLines="1"
android:id="@+id/btn_two"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/jpush_btn_blue_bg"
android:gravity="center"
android:paddingTop="9dp"
android:paddingBottom="9dp"
android:textColor="#ffffffff"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<cn.jpush.android.ui.RoundedImageView
android:id="@+id/image_only"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:visibility="gone" />
</FrameLayout>
<ImageView
android:id="@+id/img_top_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/frame"
android:layout_alignParentRight="true"
android:layout_marginEnd="16dp"
android:layout_marginBottom="6dp"
android:src="@drawable/jpush_close"
android:visibility="gone"
/>
<ImageView
android:id="@+id/img_bottom_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/frame"
android:layout_centerInParent="true"
android:layout_marginTop="16dp"
android:src="@drawable/jpush_close"
android:visibility="gone" />
</RelativeLayout>

View File

@ -2,10 +2,10 @@
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popLayoutId" android:id="@+id/popLayoutId"
style="@style/MyDialogStyle" style="@style/JPushDialogStyle"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="280dp" android:layout_width="280dp"
android:layout_height="250dp" > android:layout_height="380dp" >
<WebView <WebView
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -13,11 +13,13 @@
<ImageButton <ImageButton
android:id="@+id/imgRichpushBtnBack" android:id="@+id/imgRichpushBtnBack"
android:layout_width="wrap_content" android:layout_width="25dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginLeft="9dp" android:layout_marginLeft="9dp"
android:layout_marginRight="10dp" android:layout_marginRight="9dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/jpush_richpush_btn_selector" /> android:background="@drawable/jpush_richpush_btn_selector" />
<ImageView <ImageView
@ -35,7 +37,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginLeft="7dp" android:layout_marginLeft="7dp"
android:layout_marginRight="5dp" android:layout_marginRight="48dp"
android:layout_toRightOf="@id/imgView" android:layout_toRightOf="@id/imgView"
android:clickable="false" android:clickable="false"
android:text=" " android:text=" "
@ -50,10 +52,10 @@
android:progress="0" android:progress="0"
android:progressDrawable="@drawable/jpush_richpush_progressbar" android:progressDrawable="@drawable/jpush_richpush_progressbar"
style="?android:attr/progressBarStyleHorizontal" /> style="?android:attr/progressBarStyleHorizontal" />
<WebView <!--<WebView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/fullWebView" android:id="@+id/fullWebView"
android:background="#000000" /> android:background="#000000" />-->
</cn.jpush.android.ui.FullScreenView> </cn.jpush.android.ui.FullScreenView>

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/jad_root_view"
android:layout_width="match_parent"
android:layout_height="64dp"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/jad_icon"
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_gravity="center"
android:layout_marginRight="18dp"
android:layout_marginEnd="18dp"
android:background="#0A9789"
android:duplicateParentState="false"
android:scaleType="center" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/jad_desc"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#000000"
android:textSize="14sp"/>
<LinearLayout
android:id="@+id/jad_download_success"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/jad_desc"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:id="@+id/download_success_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:layout_marginEnd="12dp"
android:ellipsize="end"
android:gravity="start|center"
android:singleLine="true"
android:textColor="#000000"
android:textSize="12sp"/>
<TextView
android:id="@+id/jad_download_success_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="start|center"
android:singleLine="true"
android:textColor="#000000"
android:textSize="11sp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/jad_download_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/jad_desc"
android:orientation="horizontal"
android:visibility="visible">
<TextView
android:id="@+id/jad_download_size"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:ellipsize="end"
android:gravity="start|center"
android:maxLines="1"
android:textColor="#000000"
android:textSize="11sp"/>
<TextView
android:id="@+id/jad_download_status"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:ellipsize="end"
android:gravity="end|center"
android:singleLine="true"
android:textColor="#000000"
android:textSize="11sp"/>
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/jad_action"
android:layout_width="55dp"
android:layout_height="30dp"
android:layout_gravity="end|center"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:layout_weight="0"
android:gravity="center"
android:background="@drawable/jpush_btn_bg_green_playable"
android:textColor="#FFFFFF"
android:textSize="12sp"/>
</LinearLayout>

View File

@ -0,0 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/push_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/v"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/layout_version_2"
android:layout_width="0dp"
android:layout_height="0dp" />
<RelativeLayout
android:id="@+id/push_notification_style_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:id="@+id/push_notification_layout_lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/push_notification_small_icon"
android:layout_width="18dp"
android:layout_height="18dp"
android:scaleType="centerInside" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:maxLines="1"
android:maxWidth="200dp"
android:maxLength="24"
android:textSize="12sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:textStyle="bold"
android:text="·"
android:textSize="16sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Time"
android:maxLines="1"
android:id="@+id/push_notification_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
<FrameLayout
android:id="@+id/push_notification_for_bottom_margin"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="0dp"/>
<ImageView
android:id="@+id/push_notification_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_above="@+id/push_notification_for_bottom_margin"
android:layout_marginBottom="8dp"
android:visibility="gone"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/push_notification_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/push_notification_banner_icon"
android:gravity="center_vertical"
android:layout_marginRight="4dp"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:layout_below="@id/push_notification_layout_lefttop">
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="13sp"
android:visibility="gone" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="2"
android:textSize="13sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content_one_line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:textSize="13sp"
android:maxLines="1"
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_big_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/push_notification_main_layout"
android:layout_alignBottom="@+id/push_notification_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/push_notification_style_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/push_notification_style_1_big_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="centerInside" />
<LinearLayout
android:id="@+id/push_notification_style_1_main_layout"
android:layout_toRightOf="@+id/push_notification_style_1_big_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/push_notification_layout_time"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_style_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_marginRight="8dp"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Time"
android:id="@+id/push_notification_style_1_date"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="4dp"
android:gravity="right"
android:textSize="12sp" />
<TextView android:id="@+id/push_notification_null"
android:layout_width="24dp"
android:visibility="gone"
android:layout_height="20dp"/>
</LinearLayout>
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_style_1_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="1"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_style_1_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_alignParentBottom="true"
android:visibility="gone"
android:layout_below="@id/push_notification_style_1_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<FrameLayout
android:id="@+id/push_notification_banner_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/push_notification_banner_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:visibility="gone" />
</FrameLayout>
<RelativeLayout
android:id="@+id/push_notification_header_neg_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="gone">
<ImageView android:id="@+id/push_notification_header_expand"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:scaleType="centerInside"
android:background="#08000000"
android:src="@drawable/jpush_ic_action_close"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/push_notification_fb_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:layout_below="@id/push_notification_header_expand"
android:orientation="horizontal"
android:visibility="gone"
android:gravity="center">
<TextView
android:id="@+id/push_notification_fb_content_no_like1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="不感兴趣"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="重复收到"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容低质"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容不宜"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/push_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="256dp">
<FrameLayout
android:id="@+id/v"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/layout_version_2"
android:layout_width="0dp"
android:layout_height="0dp" />
<RelativeLayout
android:id="@+id/push_notification_style_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:id="@+id/push_notification_layout_lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/push_notification_small_icon"
android:layout_width="18dp"
android:layout_height="18dp"
android:scaleType="centerInside" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:maxLines="1"
android:maxWidth="200dp"
android:maxLength="24"
android:textSize="12sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:textStyle="bold"
android:text="·"
android:textSize="16sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Time"
android:maxLines="1"
android:id="@+id/push_notification_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
<FrameLayout
android:id="@+id/push_notification_for_bottom_margin"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="0dp"/>
<ImageView
android:id="@+id/push_notification_banner_icon"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_above="@+id/push_notification_for_bottom_margin"
android:layout_marginBottom="8dp"
android:visibility="gone"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/push_notification_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/push_notification_banner_icon"
android:gravity="center_vertical"
android:layout_marginRight="4dp"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:layout_below="@id/push_notification_layout_lefttop">
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="13sp"
android:visibility="gone" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="2"
android:textSize="13sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content_one_line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:textSize="13sp"
android:maxLines="1"
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_big_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/push_notification_main_layout"
android:layout_alignBottom="@+id/push_notification_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/push_notification_style_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/push_notification_style_1_big_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="centerInside" />
<LinearLayout
android:id="@+id/push_notification_style_1_main_layout"
android:layout_toRightOf="@+id/push_notification_style_1_big_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/push_notification_layout_time"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_style_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_marginRight="8dp"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Time"
android:id="@+id/push_notification_style_1_date"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="4dp"
android:gravity="right"
android:textSize="12sp" />
<TextView android:id="@+id/push_notification_null"
android:layout_width="24dp"
android:visibility="gone"
android:layout_height="20dp"/>
</LinearLayout>
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_style_1_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="1"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_style_1_banner_icon"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_alignParentBottom="true"
android:visibility="gone"
android:layout_below="@id/push_notification_style_1_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<FrameLayout
android:id="@+id/push_notification_banner_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/push_notification_banner_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:visibility="gone" />
</FrameLayout>
<RelativeLayout
android:id="@+id/push_notification_header_neg_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="gone">
<ImageView android:id="@+id/push_notification_header_expand"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:scaleType="centerInside"
android:background="#08000000"
android:src="@drawable/jpush_ic_action_close"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/push_notification_fb_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:layout_below="@id/push_notification_header_expand"
android:orientation="horizontal"
android:visibility="gone"
android:gravity="center">
<TextView
android:id="@+id/push_notification_fb_content_no_like1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="不感兴趣"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="重复收到"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容低质"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容不宜"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/push_root_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="202dp">
<FrameLayout
android:id="@+id/v"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/layout_version_2"
android:layout_width="0dp"
android:layout_height="0dp" />
<RelativeLayout
android:id="@+id/push_notification_style_default"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:id="@+id/push_notification_layout_lefttop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/push_notification_small_icon"
android:layout_width="18dp"
android:layout_height="18dp"
android:scaleType="centerInside" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:maxLines="1"
android:maxWidth="200dp"
android:maxLength="24"
android:textSize="12sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:textStyle="bold"
android:text="·"
android:textSize="16sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Time"
android:maxLines="1"
android:id="@+id/push_notification_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp" />
</LinearLayout>
<FrameLayout
android:id="@+id/push_notification_for_bottom_margin"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="0dp"/>
<ImageView
android:id="@+id/push_notification_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_above="@+id/push_notification_for_bottom_margin"
android:layout_marginBottom="8dp"
android:visibility="gone"
android:scaleType="centerCrop" />
<LinearLayout
android:id="@+id/push_notification_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/push_notification_banner_icon"
android:gravity="center_vertical"
android:layout_marginRight="4dp"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/push_notification_big_icon"
android:layout_below="@id/push_notification_layout_lefttop">
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:maxLines="1"
android:ellipsize="end"
android:textSize="13sp"
android:visibility="gone" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="2"
android:textSize="13sp" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_content_one_line"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:textSize="13sp"
android:maxLines="1"
android:visibility="gone" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_big_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/push_notification_main_layout"
android:layout_alignBottom="@+id/push_notification_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/push_notification_style_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/push_notification_style_1_big_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="centerInside" />
<LinearLayout
android:id="@+id/push_notification_style_1_main_layout"
android:layout_toRightOf="@+id/push_notification_style_1_big_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/push_notification_layout_time"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
style="@*android:style/TextAppearance.Material.Notification.Title"
android:id="@+id/push_notification_style_1_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_marginRight="8dp"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
style="@*android:style/TextAppearance.Material.Notification.Time"
android:id="@+id/push_notification_style_1_date"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="4dp"
android:gravity="right"
android:textSize="12sp" />
<TextView android:id="@+id/push_notification_null"
android:layout_width="24dp"
android:visibility="gone"
android:layout_height="20dp"/>
</LinearLayout>
<TextView
style="@*android:style/TextAppearance.Material.Notification.Info"
android:id="@+id/push_notification_style_1_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:ellipsize="end"
android:layout_marginTop="1dp"
android:maxLines="1"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/push_notification_style_1_banner_icon"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_alignParentBottom="true"
android:visibility="gone"
android:layout_below="@id/push_notification_style_1_main_layout"
android:scaleType="centerInside" />
</RelativeLayout>
<FrameLayout
android:id="@+id/push_notification_banner_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/push_notification_banner_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:visibility="gone" />
</FrameLayout>
<RelativeLayout
android:id="@+id/push_notification_header_neg_fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="gone">
<ImageView android:id="@+id/push_notification_header_expand"
android:layout_marginRight="2dp"
android:layout_marginTop="2dp"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:scaleType="centerInside"
android:background="#08000000"
android:src="@drawable/jpush_ic_action_close"
android:visibility="visible"/>
<LinearLayout
android:id="@+id/push_notification_fb_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:layout_below="@id/push_notification_header_expand"
android:orientation="horizontal"
android:visibility="gone"
android:gravity="center">
<TextView
android:id="@+id/push_notification_fb_content_no_like1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="不感兴趣"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="重复收到"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容低质"/>
<TextView
android:id="@+id/push_notification_fb_content_no_like4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#88000000"
android:background="#0f000000"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="14sp"
android:gravity="center"
android:maxLines="1"
android:layout_margin="5dp"
android:text="内容不宜"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical"
>
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="jg_channel_name_p_min">不重要</string>
<string name="jg_channel_name_p_low">不重要</string>
<string name="jg_channel_name_p_default">普通</string>
<string name="jg_channel_name_p_high">重要</string>
</resources>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="jg_channel_name_p_min">LOW</string>
<string name="jg_channel_name_p_low">LOW</string>
<string name="jg_channel_name_p_default">NORMAL</string>
<string name="jg_channel_name_p_high">HIGH</string>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyDialogStyle"> <style name="JPushDialogStyle">
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item> <item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item> <item name="android:windowNoTitle">true</item>
@ -10,4 +10,13 @@
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item> <item name="android:backgroundDimEnabled">true</item>
</style> </style>
<style name="JPushTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:textAllCaps">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
</resources> </resources>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<root-path name="jad_root_path" path="."/>
<external-path name="jad_external_path" path="JAdDownload" />
<external-files-path name="jad_external_files_path" path="JAdDownload" />
<files-path name="jad_files_path" path="JAdDownload" />
<cache-path name="jad_cache_path" path="JAdDownload" />
</paths>
</resources>

View File

@ -16,11 +16,32 @@
@implementation AppDelegate (JPush) @implementation AppDelegate (JPush)
+(void)load{ +(void)load{
Method origin1;
Method swizzle1; static dispatch_once_t onceToken;
origin1 = class_getInstanceMethod([self class],@selector(init)); dispatch_once(&onceToken, ^{
swizzle1 = class_getInstanceMethod([self class], @selector(init_plus)); Class class = [self class];
method_exchangeImplementations(origin1, swizzle1);
SEL originalSelector = @selector(init);
SEL swizzledSelector = @selector(init_plus);
Method origin = class_getInstanceMethod(class, originalSelector);
Method swizzle = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod =
class_addMethod(class,
originalSelector,
method_getImplementation(swizzle),
method_getTypeEncoding(swizzle));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(origin),
method_getTypeEncoding(origin));
} else {
method_exchangeImplementations(origin, swizzle);
}
});
} }
-(instancetype)init_plus{ -(instancetype)init_plus{

View File

@ -73,6 +73,9 @@ static NSMutableDictionary *_jpushEventCache;
-(void)addDismissActions:(CDVInvokedUrlCommand*)command; -(void)addDismissActions:(CDVInvokedUrlCommand*)command;
-(void)addNotificationActions:(CDVInvokedUrlCommand*)command; -(void)addNotificationActions:(CDVInvokedUrlCommand*)command;
// 设置手机号
-(void)setMobileNumber:(CDVInvokedUrlCommand*)command;
/* /*
* js中可监听到的事件 * js中可监听到的事件
* jpush.openNotification app * jpush.openNotification app

View File

@ -61,7 +61,7 @@
#else #else
- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{ - (CDVPlugin*)initWithWebView:(WKWebView*)theWebView{
NSLog(@"### initWithWebView "); NSLog(@"### initWithWebView ");
if (self=[super initWithWebView:theWebView]) { if (self=[super initWithWebView:theWebView]) {
} }
@ -510,6 +510,29 @@
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]]; [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
} }
#pragma mark -
-(void)setMobileNumber:(CDVInvokedUrlCommand *)command {
NSDictionary* params = [command.arguments objectAtIndex:0];
NSNumber* sequence = params[@"sequence"];
NSString* number = params[@"mobileNumber"];
[JPUSHService setMobileNumber:number completion:^(NSError *error) {
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
[dic setObject:sequence forKey:@"sequence"];
CDVPluginResult* result;
if (error) {
[dic setValue:[NSNumber numberWithUnsignedInteger:error.code] forKey:@"code"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
}
else {
// success
[dic setObject:number forKey:@"mobileNumber"];
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
}];
}
#pragma mark - #pragma mark -
+(void)setupJPushSDK:(NSDictionary*)userInfo{ +(void)setupJPushSDK:(NSDictionary*)userInfo{

Binary file not shown.

View File

@ -0,0 +1,44 @@
<?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>AvailableLibraries</key>
<array>
<dict>
<key>HeadersPath</key>
<string>Headers</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>libJPush.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>HeadersPath</key>
<string>Headers</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>libJPush.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@ -9,10 +9,12 @@
* Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved. * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
*/ */
#define JPUSH_VERSION_NUMBER 3.1.1 #define JPUSH_VERSION_NUMBER 5.6.0
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class CLRegion; @class CLRegion;
@class UILocalNotification; @class UILocalNotification;
@class CLLocation; @class CLLocation;
@ -20,11 +22,17 @@
@class UNNotificationSettings; @class UNNotificationSettings;
@class UNNotificationRequest; @class UNNotificationRequest;
@class UNNotification; @class UNNotification;
@class UIView;
@protocol JPUSHRegisterDelegate; @protocol JPUSHRegisterDelegate;
@protocol JPUSHGeofenceDelegate;
@protocol JPUSHNotiInMessageDelegate;
@protocol JPUSHInAppMessageDelegate;
typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq); typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq);
typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind); typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq, BOOL isBind);
typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq); typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *_Nullable iAlias, NSInteger seq);
typedef void (^JPUSHPropertiesOperationCompletion)(NSInteger iResCode, NSDictionary *_Nullable properties, NSInteger seq);
typedef void (^JPUSHLiveActivityTokenCompletion)(NSInteger iResCode, NSString *_Nullable iLiveActivityId, NSData * _Nullable pushToken, NSInteger seq);
extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中 extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接 extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
@ -44,7 +52,14 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts. JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts.
JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings. JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings.
JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center. JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center.
JPAuthorizationOptionAnnouncement NS_AVAILABLE_IOS(13.0) = (1 << 7) , //The ability for Siri to automatically read out messages over AirPods.
};
typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) {
JPAuthorizationNotDetermined = 0, // The user has not yet made a choice regarding whether the application may post user notifications.
JPAuthorizationStatusDenied, // The application is not authorized to post user notifications.
JPAuthorizationStatusAuthorized, // The application is authorized to post user notifications.
JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications.
}; };
/*! /*!
@ -62,7 +77,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* iOS10 UNNotificationCategory * iOS10 UNNotificationCategory
* iOS8-iOS9 UIUserNotificationCategory * iOS8-iOS9 UIUserNotificationCategory
*/ */
@property (nonatomic, strong) NSSet *categories; @property (nonatomic, strong, nullable) NSSet *categories;
@end @end
/*! /*!
@ -70,10 +85,10 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
@interface JPushNotificationIdentifier : NSObject<NSCopying, NSCoding> @interface JPushNotificationIdentifier : NSObject<NSCopying, NSCoding>
@property (nonatomic, copy) NSArray<NSString *> *identifiers; // 推送的标识数组 @property (nonatomic, copy, nullable) NSArray<NSString *> * identifiers; // 推送的标识数组
@property (nonatomic, copy) UILocalNotification *notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据iOS10以上无效 @property (nonatomic, copy, nullable) UILocalNotification * notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据iOS10以上无效
@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志默认为NOYES表示在通知中心显示的NO表示待推送的 @property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志默认为NOYES表示在通知中心显示的NO表示待推送的
@property (nonatomic, copy) void (^findCompletionHandler)(NSArray *results); // 用于查询回调,调用[findNotification:]方法前必须设置results为返回相应对象数组iOS10以下返回UILocalNotification对象数组iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组delivered传入YES则返回UNNotification对象数组否则返回UNNotificationRequest对象数组 @property (nonatomic, copy, nullable) void (^findCompletionHandler)(NSArray * _Nullable results); // 用于查询回调,调用[findNotification:]方法前必须设置results为返回相应对象数组iOS10以下返回UILocalNotification对象数组iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组delivered传入YES则返回UNNotification对象数组否则返回UNNotificationRequest对象数组
@end @end
@ -82,8 +97,8 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* iOS10以上有效 * iOS10以上有效
*/ */
@interface JPushNotificationSound : NSObject <NSCopying, NSCoding> @interface JPushNotificationSound : NSObject <NSCopying, NSCoding>
@property (nonatomic, copy) NSString *soundName; //普通通知铃声 @property (nonatomic, copy, nullable) NSString *soundName; //普通通知铃声
@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声 @property (nonatomic, copy, nullable) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量有效值在0~1之间默认为1 @property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量有效值在0~1之间默认为1
@end @end
@ -96,17 +111,25 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@property (nonatomic, copy) NSString *title; // 推送标题 @property (nonatomic, copy) NSString *title; // 推送标题
@property (nonatomic, copy) NSString *subtitle; // 推送副标题 @property (nonatomic, copy) NSString *subtitle; // 推送副标题
@property (nonatomic, copy) NSString *body; // 推送内容 @property (nonatomic, copy) NSString *body; // 推送内容
@property (nonatomic, copy) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1) @property (nonatomic, copy, nullable) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1)
@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效 @property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效
@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识 @property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识
@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo @property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo
@property (nonatomic, copy) NSString *sound; // 声音名称,不设置则为默认声音 @property (nonatomic, copy, nullable) NSString *sound; // 声音名称,不设置则为默认声音
@property (nonatomic, copy) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体 @property (nonatomic, copy, nullable) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件iOS10以上有效需要传入UNNotificationAttachment对象数组类型 @property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件iOS10以上有效需要传入UNNotificationAttachment对象数组类型
@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识iOS10以上有效可用来对推送进行分组 @property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识iOS10以上有效可用来对推送进行分组
@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名iOS10以上有效从推送启动时将会用到 @property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名iOS10以上有效从推送启动时将会用到
@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。 @property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。
@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。 @property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。
@property (nonatomic, copy, nullable) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification.
//iOS15以上的新增属性 interruptionLevel为枚举UNNotificationInterruptionLevel
// The interruption level determines the degree of interruption associated with the notification
@property (nonatomic, assign) NSUInteger interruptionLevel NS_AVAILABLE_IOS(15.0);
// Relevance score determines the sorting for the notification across app notifications. The expected range is between 0.0f and 1.0f.
@property (nonatomic, assign) double relevanceScore NS_AVAILABLE_IOS(15.0);
// iOS16以上的新增属性
@property (nonatomic, copy, nullable) NSString * filterCriteria NS_AVAILABLE_IOS(16.0); // default nil
@end @end
@ -133,7 +156,35 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识 @property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识
@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容 @property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容
@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式 @property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式
@property (nonatomic, copy) void (^completionHandler)(id result); // 注册或更新推送成功回调iOS10以上成功则result为UNNotificationRequest对象失败则result为nil;iOS10以下成功result为UILocalNotification对象失败则result为nil @property (nonatomic, copy, nullable) void (^completionHandler)(id result); // 注册或更新推送成功回调iOS10以上成功则result为UNNotificationRequest对象失败则result为nil;iOS10以下成功result为UILocalNotification对象失败则result为nil
@end
/*!
*
*/
@interface JPushInAppMessage : NSObject
@property (nonatomic, copy) NSString *mesageId; // 消息id
@property (nonatomic, copy) NSString *title; // 标题
@property (nonatomic, copy) NSString *content; // 内容
@property (nonatomic, strong) NSArray *target; // 目标页面
@property (nonatomic, copy) NSString *clickAction; // 跳转地址
@property (nonatomic, strong) NSDictionary *extras; // 附加字段
@end
@interface JPushCollectControl : NSObject
/* ssid SSID信息。设置为NO,不采集SSID信息。默认为YES。 */
@property (nonatomic, assign) BOOL ssid;
/* bssid BSSID信息。设置为NO,不采集BSSID信息。默认为YES。 */
@property (nonatomic, assign) BOOL bssid;
/* cell 基站信息。设置为NO,不采集基站信息。默认为YES。*/
@property (nonatomic, assign) BOOL cell;
/* gps 经纬度信息。设置为NO,不采集经纬度信息。默认为YES。 */
@property (nonatomic, assign) BOOL gps;
@end @end
@ -147,12 +198,6 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
/// @name Setup 启动相关 /// @name Setup 启动相关
///---------------------------------------------------- ///----------------------------------------------------
/*!
* @abstract SDK
*
* @discussion , PushConfig.plist . 使, .
*/
+ (void)setupWithOption:(NSDictionary *)launchingOption __attribute__((deprecated("JPush 2.1.0 版本已过期")));
/*! /*!
* @abstract SDK * @abstract SDK
@ -162,22 +207,33 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @param channel . . * @param channel . .
* @param isProduction . , NO; , YES. * @param isProduction . , NO; , YES.
* App profile provision的配置. * App profile provision的配置.
* @param advertisingIdentifier 广IDFA 使IDFAnil.
* *
* @discussion SDK启动必须的参数, SDK. * @discussion SDK启动必须的参数, SDK.
* App , JPush SDK . * App , JPush SDK .
*/ */
+ (void)setupWithOption:(NSDictionary *)launchingOption + (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey appKey:(NSString *)appKey
channel:(NSString *)channel channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction; apsForProduction:(BOOL)isProduction;
/*!
+ (void)setupWithOption:(NSDictionary *)launchingOption * @abstract SDK
*
* @param launchingOption .
* @param appKey JPush ,. JPush .
* @param channel . .
* @param isProduction . , NO; , YES.
* App profile provision的配置.
* @param advertisingId 广IDFA 使IDFAnil.
*
* @discussion SDK启动必须的参数, SDK.
* App , JPush SDK .
*/
+ (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey appKey:(NSString *)appKey
channel:(NSString *)channel channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction apsForProduction:(BOOL)isProduction
advertisingIdentifier:(NSString *)advertisingId; advertisingIdentifier:(nullable NSString *)advertisingId;
///---------------------------------------------------- ///----------------------------------------------------
@ -192,7 +248,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* *
*/ */
+ (void)registerForRemoteNotificationTypes:(NSUInteger)types + (void)registerForRemoteNotificationTypes:(NSUInteger)types
categories:(NSSet *)categories; categories:(nullable NSSet *)categories;
/*! /*!
* @abstract iOS10 * @abstract iOS10
* *
@ -200,17 +256,71 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @param delegate * @param delegate
* *
*/ */
+ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(id<JPUSHRegisterDelegate>)delegate; + (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(nullable id<JPUSHRegisterDelegate>)delegate;
+ (void)registerDeviceToken:(NSData *)deviceToken; + (void)registerDeviceToken:(NSData *)deviceToken;
/*!
* @abstract liveactivity的启动token
*
* @param activityAttributes liveActivity定义的属性类型
* @param pushToStartToken liveactivity的pushToStartTokenpushToStartToken
* @param completion
* @param seq
*/
+ (void)registerLiveActivity:(NSString *)activityAttributes
pushToStartToken:(nullable NSData *)pushToStartToken
completion:(nullable JPUSHLiveActivityTokenCompletion)completion
seq:(NSInteger)seq;
/*!
* @abstract liveActivity并上报其pushToken
* pushToken有变化的时候同步调用该接口
* liveActivity结束的时候pushToken传nil
*
* @param liveActivityId liveActivity
* @param pushToken liveActivity的pushTokenpushToken
* @param completion
* @param seq
*/
+ (void)registerLiveActivity:(NSString *)liveActivityId
pushToken:(nullable NSData *)pushToken
completion:(nullable JPUSHLiveActivityTokenCompletion)completion
seq:(NSInteger)seq;
/*! /*!
* @abstract APNs * @abstract APNs
*/ */
+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo; + (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
/*!
* @abstract Token
*
* @param voipToken 使Voip Token
*/
+ (void)registerVoipToken:(NSData *)voipToken;
/*!
* @abstract Voip
*
* @param remoteInfo Voip
*/
+ (void)handleVoipNotification:(NSDictionary *)remoteInfo;
/*!
* @abstract
* @param completion status值返回JPAuthorizationStatus
*/
+ (void)requestNotificationAuthorization:(nullable void (^)(JPAuthorizationStatus status))completion;
/*!
* @abstract iOS8及以上有效
*/
+ (void)openSettingsForNotification:(nullable void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0);
/*! /*!
* Tags操作接口 * Tags操作接口
* //// * ////
@ -225,7 +335,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq @param seq
*/ */
+ (void)addTags:(NSSet<NSString *> *)tags + (void)addTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -237,7 +347,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq @param seq
*/ */
+ (void)setTags:(NSSet<NSString *> *)tags + (void)setTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -248,7 +358,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq @param seq
*/ */
+ (void)deleteTags:(NSSet<NSString *> *)tags + (void)deleteTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -256,7 +366,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion @param completion
@param seq @param seq
*/ */
+ (void)cleanTags:(JPUSHTagsOperationCompletion)completion + (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -265,7 +375,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion @param completion
@param seq @param seq
*/ */
+ (void)getAllTags:(JPUSHTagsOperationCompletion)completion + (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -275,7 +385,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq @param seq
*/ */
+ (void)validTag:(NSString *)tag + (void)validTag:(NSString *)tag
completion:(JPUSHTagValidOperationCompletion)completion completion:(nullable JPUSHTagValidOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -286,7 +396,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq @param seq
*/ */
+ (void)setAlias:(NSString *)alias + (void)setAlias:(NSString *)alias
completion:(JPUSHAliasOperationCompletion)completion completion:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -295,7 +405,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion @param completion
@param seq @param seq
*/ */
+ (void)deleteAlias:(JPUSHAliasOperationCompletion)completion + (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
/** /**
@ -304,7 +414,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion @param completion
@param seq @param seq
*/ */
+ (void)getAlias:(JPUSHAliasOperationCompletion)completion + (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq; seq:(NSInteger)seq;
@ -316,6 +426,85 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (NSSet *)filterValidTags:(NSSet *)tags; + (NSSet *)filterValidTags:(NSSet *)tags;
/*!
* Property操作接口
* //
* https://docs.jiguang.cn/jpush/client/iOS/ios_api/
*/
/**
/
@param properties NSDictionary
Key NSString Value为用户属性值 NSStringNSNumberNSDate类型BOOL类型NSNumber类型
@param completion
@param seq
*/
+ (void)setProperties:(NSDictionary *)properties
completion:(nullable JPUSHPropertiesOperationCompletion)completion
seq:(NSInteger)seq;
/**
@param keys
@param completion
@param seq
*/
+ (void)deleteProperties:(NSSet<NSString *> *)keys
completion:(nullable JPUSHPropertiesOperationCompletion)completion
seq:(NSInteger)seq;
/**
@param completion
@param seq
*/
+ (void)cleanProperties:(nullable JPUSHPropertiesOperationCompletion)completion
seq:(NSInteger)seq;
/*!
*
* 使
*/
/**
+ (void)pageLeave:(NSString *)pageName; 使
@param pageName
@discussion 使pageEnterTo:pageLeave:
*/
+ (void)pageEnterTo:(NSString *)pageName;
/**
+ (void)pageEnterTo:(NSString *)pageName;使
@param pageName
@discussion 使pageEnterTo:pageLeave:
*/
+ (void)pageLeave:(NSString *)pageName;
/*!
* @abstract
*
* @discussion JPUSHInAppMessageDelegate的代理对象
*
*/
+ (void)setInAppMessageDelegate:(id<JPUSHInAppMessageDelegate>)inAppMessageDelegate;
///---------------------------------------------------- ///----------------------------------------------------
/// @name Stats 统计功能 /// @name Stats 统计功能
///---------------------------------------------------- ///----------------------------------------------------
@ -370,6 +559,33 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (void)setLocation:(CLLocation *)location; + (void)setLocation:(CLLocation *)location;
/**
10 iOS系统默认地理围栏最大个数为20
@param count count
*/
+ (void)setGeofeneceMaxCount:(NSInteger)count;
/**
''
15
*/
+ (void)setGeofenecePeriodForInside:(NSInteger)seconds;
/**
@param delegate
@param launchOptions app启动完成是收到的字段参数
*/
+ (void)registerLbsGeofenceDelegate:(id<JPUSHGeofenceDelegate>)delegate withLaunchOptions:(nullable NSDictionary *)launchOptions;
/**
@param geofenceId id
*/
+ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId;
///---------------------------------------------------- ///----------------------------------------------------
/// @name Local Notification 本地通知 /// @name Local Notification 本地通知
@ -392,7 +608,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @discussion 使 * @discussion 使
* *
*/ */
+ (void)removeNotification:(JPushNotificationIdentifier *)identifier; + (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier;
/*! /*!
* @abstract (iOS10iOS10以下版本) * @abstract (iOS10iOS10以下版本)
@ -529,7 +745,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @discussion completion异步返回completion设置为nil不处理结果信息 * @discussion completion异步返回completion设置为nil不处理结果信息
* *
*/ */
+ (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion; + (void)setMobileNumber:(NSString *)mobileNumber completion:(nullable void (^)(NSError *error))completion;
///---------------------------------------------------- ///----------------------------------------------------
/// @name Logs and others 日志与其他 /// @name Logs and others 日志与其他
@ -547,7 +763,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (NSString *)registrationID; + (NSString *)registrationID;
+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString *registrationID))completionHandler; + (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler;
/*! /*!
* @abstract Debug * @abstract Debug
@ -573,6 +789,47 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/ */
+ (void)setLogOFF; + (void)setLogOFF;
/*!
@param control
*/
+ (void)setCollectControl:(JPushCollectControl *)control;
/*!
* @abstract SDK地理位置权限开关
*
* @discussion SDK地理围栏的相关功能将受到影响
*
*/
+ (void)setLocationEanable:(BOOL)isEanble;
/*!
* @abstract PUSH开关
*
* @discussion PUSH之后liveActivity消息推送
*
*/
+ (void)setPushEnable:(BOOL)isEnable completion:(nullable void (^)(NSInteger iResCode))completion;
/*!
* @abstract
*
* @param isEnable YES:NO:
*
*/
+ (void)setSmartPushEnable:(BOOL)isEnable;
/*!
* @abstract
*
* @discussion JPushNotiInMessageDelegate的代理对象
*
*/
+ (void)setNotiInMessageDelegate:(id<JPUSHNotiInMessageDelegate>)notiInMessageDelegate;
///---------------------------------------------------- ///----------------------------------------------------
///********************下列方法已过期******************** ///********************下列方法已过期********************
///**************请使用新版tag/alias操作接口************** ///**************请使用新版tag/alias操作接口**************
@ -626,13 +883,100 @@ callbackSelector:(SEL)cbSelector
* @param response * @param response
* @param completionHandler * @param completionHandler
*/ */
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler; - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler;
/* /*
* @brief handle UserNotifications.framework [openSettingsForNotification:] * @brief handle UserNotifications.framework [openSettingsForNotification:]
* @param center [UNUserNotificationCenter currentNotificationCenter] * @param center [UNUserNotificationCenter currentNotificationCenter]
* @param notification * @param notification
*/ */
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(nullable UNNotification *)notification NS_AVAILABLE_IOS(12.0); - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification NS_AVAILABLE_IOS(12.0);
/**
*
* @param status JPAuthorizationStatus
* @param info
*/
- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(nullable NSDictionary *)info;
@end @end
@protocol JPUSHGeofenceDelegate <NSObject>
/**
@param geofence
@param error
*/
- (void)jpushGeofenceRegion:(nullable NSDictionary *)geofence
error:(nullable NSError *)error;
/**
@param geofenceList
*/
- (void)jpushCallbackGeofenceReceived:(nullable NSArray<NSDictionary*> *)geofenceList;
/**
@param geofenceId id
@param userInfo
@param error
*/
- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
/**
@param geofenceId id
@param userInfo
@param error
*/
- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
@end
@protocol JPUSHNotiInMessageDelegate <NSObject>
/**
@param content
*/
- (void)jPushNotiInMessageDidShowWithContent:(NSDictionary *)content;
/**
@param content
*/
- (void)jPushNotiInMessageDidClickWithContent:(NSDictionary *)content;
@end
@protocol JPUSHInAppMessageDelegate <NSObject>
/**
@param inAppMessage
*/
- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage;
/**
@param inAppMessage
*/
- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,23 @@
<?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>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,982 @@
/*
* | | | | \ \ / / | | | | / _______|
* | |____| | \ \/ / | |____| | / /
* | |____| | \ / | |____| | | | _____
* | | | | / \ | | | | | | |____ |
* | | | | / /\ \ | | | | \ \______| |
* | | | | /_/ \_\ | | | | \_________|
*
* Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
*/
#define JPUSH_VERSION_NUMBER 5.6.0
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class CLRegion;
@class UILocalNotification;
@class CLLocation;
@class UNNotificationCategory;
@class UNNotificationSettings;
@class UNNotificationRequest;
@class UNNotification;
@class UIView;
@protocol JPUSHRegisterDelegate;
@protocol JPUSHGeofenceDelegate;
@protocol JPUSHNotiInMessageDelegate;
@protocol JPUSHInAppMessageDelegate;
typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq);
typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *_Nullable iTags, NSInteger seq, BOOL isBind);
typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *_Nullable iAlias, NSInteger seq);
typedef void (^JPUSHPropertiesOperationCompletion)(NSInteger iResCode, NSDictionary *_Nullable properties, NSInteger seq);
typedef void (^JPUSHLiveActivityTokenCompletion)(NSInteger iResCode, NSString *_Nullable iLiveActivityId, NSData * _Nullable pushToken, NSInteger seq);
extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接
extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功
extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败
extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功
extern NSString *const kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS)
extern NSString *const kJPFServiceErrorNotification; // 错误提示
typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
JPAuthorizationOptionNone = 0, // the application may not present any UI upon a notification being received
JPAuthorizationOptionBadge = (1 << 0), // the application may badge its icon upon a notification being received
JPAuthorizationOptionSound = (1 << 1), // the application may play a sound upon a notification being received
JPAuthorizationOptionAlert = (1 << 2), // the application may display an alert upon a notification being received
JPAuthorizationOptionCarPlay = (1 << 3), // The ability to display notifications in a CarPlay environment.
JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) , //The ability to play sounds for critical alerts.
JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) , //An option indicating the system should display a button for in-app notification settings.
JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) , //The ability to post noninterrupting notifications provisionally to the Notification Center.
JPAuthorizationOptionAnnouncement NS_AVAILABLE_IOS(13.0) = (1 << 7) , //The ability for Siri to automatically read out messages over AirPods.
};
typedef NS_ENUM(NSUInteger, JPAuthorizationStatus) {
JPAuthorizationNotDetermined = 0, // The user has not yet made a choice regarding whether the application may post user notifications.
JPAuthorizationStatusDenied, // The application is not authorized to post user notifications.
JPAuthorizationStatusAuthorized, // The application is authorized to post user notifications.
JPAuthorizationStatusProvisional NS_AVAILABLE_IOS(12.0), // The application is authorized to post non-interruptive user notifications.
};
/*!
*
*/
@interface JPUSHRegisterEntity : NSObject
/*!
*
* badge,sound,alert
*/
@property (nonatomic, assign) NSInteger types;
/*!
*
* iOS10 UNNotificationCategory
* iOS8-iOS9 UIUserNotificationCategory
*/
@property (nonatomic, strong, nullable) NSSet *categories;
@end
/*!
*
*/
@interface JPushNotificationIdentifier : NSObject<NSCopying, NSCoding>
@property (nonatomic, copy, nullable) NSArray<NSString *> * identifiers; // 推送的标识数组
@property (nonatomic, copy, nullable) UILocalNotification * notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据iOS10以上无效
@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志默认为NOYES表示在通知中心显示的NO表示待推送的
@property (nonatomic, copy, nullable) void (^findCompletionHandler)(NSArray * _Nullable results); // 用于查询回调,调用[findNotification:]方法前必须设置results为返回相应对象数组iOS10以下返回UILocalNotification对象数组iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组delivered传入YES则返回UNNotification对象数组否则返回UNNotificationRequest对象数组
@end
/*!
*
* iOS10以上有效
*/
@interface JPushNotificationSound : NSObject <NSCopying, NSCoding>
@property (nonatomic, copy, nullable) NSString *soundName; //普通通知铃声
@property (nonatomic, copy, nullable) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量有效值在0~1之间默认为1
@end
/*!
*
*/
@interface JPushNotificationContent : NSObject<NSCopying, NSCoding>
@property (nonatomic, copy) NSString *title; // 推送标题
@property (nonatomic, copy) NSString *subtitle; // 推送副标题
@property (nonatomic, copy) NSString *body; // 推送内容
@property (nonatomic, copy, nullable) NSNumber *badge; // 角标的数字。如果不需要改变角标传@(-1)
@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效
@property (nonatomic, copy) NSString *categoryIdentifier; // 行为分类标识
@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo
@property (nonatomic, copy, nullable) NSString *sound; // 声音名称,不设置则为默认声音
@property (nonatomic, copy, nullable) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0); // 附件iOS10以上有效需要传入UNNotificationAttachment对象数组类型
@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识iOS10以上有效可用来对推送进行分组
@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0); // 启动图片名iOS10以上有效从推送启动时将会用到
@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的部分参数。iOS12以上有效。
@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。
@property (nonatomic, copy, nullable) NSString *targetContentIdentifier NS_AVAILABLE_IOS(13.0); // An identifier for the content of the notification used by the system to customize the scene to be activated when tapping on a notification.
//iOS15以上的新增属性 interruptionLevel为枚举UNNotificationInterruptionLevel
// The interruption level determines the degree of interruption associated with the notification
@property (nonatomic, assign) NSUInteger interruptionLevel NS_AVAILABLE_IOS(15.0);
// Relevance score determines the sorting for the notification across app notifications. The expected range is between 0.0f and 1.0f.
@property (nonatomic, assign) double relevanceScore NS_AVAILABLE_IOS(15.0);
// iOS16以上的新增属性
@property (nonatomic, copy, nullable) NSString * filterCriteria NS_AVAILABLE_IOS(16.0); // default nil
@end
/*!
*
* dateComponentstimeIntervalregion在iOS10以上可选择其中一个参数传入有效值IIIIII使其中一种触发方式生效fireDate为iOS10以下根据时间触发时须传入的参数
*/
@interface JPushNotificationTrigger : NSObject<NSCopying, NSCoding>
@property (nonatomic, assign) BOOL repeat; // 设置是否重复默认为NO
@property (nonatomic, copy) NSDate *fireDate NS_DEPRECATED_IOS(2_0, 10_0); // 用来设置触发推送的时间iOS10以上无效
@property (nonatomic, copy) CLRegion *region NS_AVAILABLE_IOS(8_0); // 用来设置触发推送的位置iOS8以上有效iOS10以上优先级为I应用需要有允许使用定位的授权
@property (nonatomic, copy) NSDateComponents *dateComponents NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的日期时间iOS10以上有效优先级为II
@property (nonatomic, assign) NSTimeInterval timeInterval NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的时间iOS10以上有效优先级为III
@end
/*!
*
*/
@interface JPushNotificationRequest : NSObject<NSCopying, NSCoding>
@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识
@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容
@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式
@property (nonatomic, copy, nullable) void (^completionHandler)(id result); // 注册或更新推送成功回调iOS10以上成功则result为UNNotificationRequest对象失败则result为nil;iOS10以下成功result为UILocalNotification对象失败则result为nil
@end
/*!
*
*/
@interface JPushInAppMessage : NSObject
@property (nonatomic, copy) NSString *mesageId; // 消息id
@property (nonatomic, copy) NSString *title; // 标题
@property (nonatomic, copy) NSString *content; // 内容
@property (nonatomic, strong) NSArray *target; // 目标页面
@property (nonatomic, copy) NSString *clickAction; // 跳转地址
@property (nonatomic, strong) NSDictionary *extras; // 附加字段
@end
@interface JPushCollectControl : NSObject
/* ssid SSID信息。设置为NO,不采集SSID信息。默认为YES。 */
@property (nonatomic, assign) BOOL ssid;
/* bssid BSSID信息。设置为NO,不采集BSSID信息。默认为YES。 */
@property (nonatomic, assign) BOOL bssid;
/* cell 基站信息。设置为NO,不采集基站信息。默认为YES。*/
@property (nonatomic, assign) BOOL cell;
/* gps 经纬度信息。设置为NO,不采集经纬度信息。默认为YES。 */
@property (nonatomic, assign) BOOL gps;
@end
/*!
* JPush
*/
@interface JPUSHService : NSObject
///----------------------------------------------------
/// @name Setup 启动相关
///----------------------------------------------------
/*!
* @abstract SDK
*
* @param launchingOption .
* @param appKey JPush ,. JPush .
* @param channel . .
* @param isProduction . , NO; , YES.
* App profile provision的配置.
*
* @discussion SDK启动必须的参数, SDK.
* App , JPush SDK .
*/
+ (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey
channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction;
/*!
* @abstract SDK
*
* @param launchingOption .
* @param appKey JPush ,. JPush .
* @param channel . .
* @param isProduction . , NO; , YES.
* App profile provision的配置.
* @param advertisingId 广IDFA 使IDFAnil.
*
* @discussion SDK启动必须的参数, SDK.
* App , JPush SDK .
*/
+ (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey
channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction
advertisingIdentifier:(nullable NSString *)advertisingId;
///----------------------------------------------------
/// @name APNs about 通知相关
///----------------------------------------------------
/*!
* @abstract
*
* @param types
* @param categories
*
*/
+ (void)registerForRemoteNotificationTypes:(NSUInteger)types
categories:(nullable NSSet *)categories;
/*!
* @abstract iOS10
*
* @param config
* @param delegate
*
*/
+ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(nullable id<JPUSHRegisterDelegate>)delegate;
+ (void)registerDeviceToken:(NSData *)deviceToken;
/*!
* @abstract liveactivity的启动token
*
* @param activityAttributes liveActivity定义的属性类型
* @param pushToStartToken liveactivity的pushToStartTokenpushToStartToken
* @param completion
* @param seq
*/
+ (void)registerLiveActivity:(NSString *)activityAttributes
pushToStartToken:(nullable NSData *)pushToStartToken
completion:(nullable JPUSHLiveActivityTokenCompletion)completion
seq:(NSInteger)seq;
/*!
* @abstract liveActivity并上报其pushToken
* pushToken有变化的时候同步调用该接口
* liveActivity结束的时候pushToken传nil
*
* @param liveActivityId liveActivity
* @param pushToken liveActivity的pushTokenpushToken
* @param completion
* @param seq
*/
+ (void)registerLiveActivity:(NSString *)liveActivityId
pushToken:(nullable NSData *)pushToken
completion:(nullable JPUSHLiveActivityTokenCompletion)completion
seq:(NSInteger)seq;
/*!
* @abstract APNs
*/
+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
/*!
* @abstract Token
*
* @param voipToken 使Voip Token
*/
+ (void)registerVoipToken:(NSData *)voipToken;
/*!
* @abstract Voip
*
* @param remoteInfo Voip
*/
+ (void)handleVoipNotification:(NSDictionary *)remoteInfo;
/*!
* @abstract
* @param completion status值返回JPAuthorizationStatus
*/
+ (void)requestNotificationAuthorization:(nullable void (^)(JPAuthorizationStatus status))completion;
/*!
* @abstract iOS8及以上有效
*/
+ (void)openSettingsForNotification:(nullable void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0);
/*!
* Tags操作接口
* ////
* https://docs.jiguang.cn/jpush/client/iOS/ios_api/
*/
/**
tags
@param tags tags集合
@param completion
@param seq
*/
+ (void)addTags:(NSSet<NSString *> *)tags
completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
tags
tags
@param tags tags集合
@param completion
@param seq
*/
+ (void)setTags:(NSSet<NSString *> *)tags
completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
tags
@param tags tags集合
@param completion
@param seq
*/
+ (void)deleteTags:(NSSet<NSString *> *)tags
completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
tags
@param completion
@param seq
*/
+ (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
tags
@param completion
@param seq
*/
+ (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
tag是否绑定
@param completion
@param seq
*/
+ (void)validTag:(NSString *)tag
completion:(nullable JPUSHTagValidOperationCompletion)completion
seq:(NSInteger)seq;
/**
Alias
@param alias alias
@param completion
@param seq
*/
+ (void)setAlias:(NSString *)alias
completion:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
alias
@param completion
@param seq
*/
+ (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
alias
@param completion
@param seq
*/
+ (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/*!
* @abstract tags
*
* @discussion tags , tags.
* tags . SDK .
*/
+ (NSSet *)filterValidTags:(NSSet *)tags;
/*!
* Property操作接口
* //
* https://docs.jiguang.cn/jpush/client/iOS/ios_api/
*/
/**
/
@param properties NSDictionary
Key NSString Value为用户属性值 NSStringNSNumberNSDate类型BOOL类型NSNumber类型
@param completion
@param seq
*/
+ (void)setProperties:(NSDictionary *)properties
completion:(nullable JPUSHPropertiesOperationCompletion)completion
seq:(NSInteger)seq;
/**
@param keys
@param completion
@param seq
*/
+ (void)deleteProperties:(NSSet<NSString *> *)keys
completion:(nullable JPUSHPropertiesOperationCompletion)completion
seq:(NSInteger)seq;
/**
@param completion
@param seq
*/
+ (void)cleanProperties:(nullable JPUSHPropertiesOperationCompletion)completion
seq:(NSInteger)seq;
/*!
*
* 使
*/
/**
+ (void)pageLeave:(NSString *)pageName; 使
@param pageName
@discussion 使pageEnterTo:pageLeave:
*/
+ (void)pageEnterTo:(NSString *)pageName;
/**
+ (void)pageEnterTo:(NSString *)pageName;使
@param pageName
@discussion 使pageEnterTo:pageLeave:
*/
+ (void)pageLeave:(NSString *)pageName;
/*!
* @abstract
*
* @discussion JPUSHInAppMessageDelegate的代理对象
*
*/
+ (void)setInAppMessageDelegate:(id<JPUSHInAppMessageDelegate>)inAppMessageDelegate;
///----------------------------------------------------
/// @name Stats 统计功能
///----------------------------------------------------
/*!
* @abstract
*
* @param pageName
* @discussion JCore 1.1.8 使 JAnalytics
*/
+ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*!
* @abstract
*
* @param pageName
* @discussion JCore 1.1.8 使 JAnalytics
*/
+ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*!
* @abstract
*
* @param pageName
* @param seconds
* @discussion JCore 1.1.8 使 JAnalytics
*/
+ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期")));
/*!
* @abstract Crash日志收集
*
* @discussion .
*/
+ (void)crashLogON;
/*!
* @abstract
*
* @param latitude .
* @param longitude .
*
*/
+ (void)setLatitude:(double)latitude longitude:(double)longitude;
/*!
* @abstract
*
* @param location CLLocation *
*
* @discussion CoreLocation.framework #import <CoreLocation/CoreLocation.h>
*/
+ (void)setLocation:(CLLocation *)location;
/**
10 iOS系统默认地理围栏最大个数为20
@param count count
*/
+ (void)setGeofeneceMaxCount:(NSInteger)count;
/**
''
15
*/
+ (void)setGeofenecePeriodForInside:(NSInteger)seconds;
/**
@param delegate
@param launchOptions app启动完成是收到的字段参数
*/
+ (void)registerLbsGeofenceDelegate:(id<JPUSHGeofenceDelegate>)delegate withLaunchOptions:(nullable NSDictionary *)launchOptions;
/**
@param geofenceId id
*/
+ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId;
///----------------------------------------------------
/// @name Local Notification 本地通知
///----------------------------------------------------
/*!
* @abstract (iOS10iOS10以下版本)
*
* JPush 2.1.9
* @param request JPushNotificationRequest类型request.requestIdentifier即更新已有的推送iOS10以上有效request.completionHandler返回
* @discussion 使
*
*/
+ (void)addNotification:(JPushNotificationRequest *)request;
/*!
* @abstract (iOS10iOS10以下版本)
*
* JPush 2.1.9
* @param identifier JPushNotificationIdentifier类型iOS10以上identifier设置为nilidentifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求iOS10以下identifier设置为nilidentifier.delivered属性无效identifier.notificationObj传入特定推送对象来移除此推送
* @discussion 使
*
*/
+ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier;
/*!
* @abstract (iOS10iOS10以下版本)
*
* JPush 2.1.9
* @param identifier JPushNotificationIdentifier类型iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求iOS10以下identifier.delivered属性无效identifier.identifiers如果设置nil或空数组则返回所有未触发的推送identifier.findCompletionHandler回调才能得到查找结果(NSArray *results)
* @discussion 使
*
*/
+ (void)findNotification:(JPushNotificationIdentifier *)identifier;
/*!
* @abstract 64
*
* @param fireDate
* @param alertBody
* @param badge -1
* @param alertAction IOS 8"打开", "启动"
* @param notificationKey
* @param userInfo
* @param soundName nil为默认声音
*
* @discussion 64 [addNotification:]
*/
+ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
alertBody:(NSString *)alertBody
badge:(int)badge
alertAction:(NSString *)alertAction
identifierKey:(NSString *)notificationKey
userInfo:(NSDictionary *)userInfo
soundName:(NSString *)soundName __attribute__((deprecated("JPush 2.1.9 版本已过期")));
/*!
* @abstract ( iOS8 )
*
* IOS8新参数
* @param region
* @param regionTriggersOnce
* @param category
* @discussion [addNotification:]
*/
+ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
alertBody:(NSString *)alertBody
badge:(int)badge
alertAction:(NSString *)alertAction
identifierKey:(NSString *)notificationKey
userInfo:(NSDictionary *)userInfo
soundName:(NSString *)soundName
region:(CLRegion *)region
regionTriggersOnce:(BOOL)regionTriggersOnce
category:(NSString *)category NS_AVAILABLE_IOS(8_0) __attribute__((deprecated("JPush 2.1.9 版本已过期")));
/*!
* @abstract
*
* @param notification
* @param notificationKey
*
* @discussion App在前台运行时不会进行弹窗--iOS10以下还可继续使用iOS10以上在[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
*/
+ (void)showLocalNotificationAtFront:(UILocalNotification *)notification
identifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
/*!
* @abstract
*
* @param notificationKey
* @discussion [removeNotification:]
*/
+ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
/*!
* @abstract
* @discussion [removeNotification:]
*/
+ (void)deleteLocalNotification:(UILocalNotification *)localNotification __attribute__((deprecated("JPush 2.1.9 版本已过期")));
/*!
* @abstract
*
* @param notificationKey
* @return , [array count]0
* @discussion [findNotification:]
*/
+ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
/*!
* @abstract
* @discussion [removeNotification:]
*/
+ (void)clearAllLocalNotifications __attribute__((deprecated("JPush 2.1.9 版本已过期")));
///----------------------------------------------------
/// @name Server badge 服务器端 badge 功能
///----------------------------------------------------
/*!
* @abstract ()
*
* @param value . ()
*
* @discussion .
* UIApplication:setApplicationIconBadgeNumber .
*
* JPush .
* , APNs , , .
*
* JPush :
*
* - API () badge ;
* - API APNs (),
* 使 "+1" , badge () +1 badge ;
*/
+ (BOOL)setBadge:(NSInteger)value;
/*!
* @abstract (0)
*
* @discussion [setBadge:0] .
* [JPUSHService setBadge:] .
*/
+ (void)resetBadge;
///----------------------------------------------------
/// @name Other Feature 其他功能
///----------------------------------------------------
/*!
* @abstract ()
*
* @param mobileNumber .
* @param completion error为空error带有错误码及错误信息
*
* @discussion completion异步返回completion设置为nil不处理结果信息
*
*/
+ (void)setMobileNumber:(NSString *)mobileNumber completion:(nullable void (^)(NSError *error))completion;
///----------------------------------------------------
/// @name Logs and others 日志与其他
///----------------------------------------------------
/*!
* @abstract JPush标识此设备的 registrationID
*
* @discussion SDK注册成功后, registrationID .
*
* JPush registrationID .
* , registrationID , , .
* registrationIDCompletionHandler:registrationID的方法block中获取registrationID,resCode为返回码,resCode返回1011,registrationID返回nil.
* JPush .
*/
+ (NSString *)registrationID;
+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler;
/*!
* @abstract Debug
*
* @discussion JMessage iOS Android .
* : Verbose, Debug, Info, Warning, Error.
* , Android .
*
* SDK : Info. , .
*
* SDK启动后调用本接口: Debug, .
*/
+ (void)setDebugMode;
/*!
* @abstract
*
* @discussion , [JPUSHService setDebugMode]
*
* , Warning, Error . , , .
*
* , , .
*/
+ (void)setLogOFF;
/*!
@param control
*/
+ (void)setCollectControl:(JPushCollectControl *)control;
/*!
* @abstract SDK地理位置权限开关
*
* @discussion SDK地理围栏的相关功能将受到影响
*
*/
+ (void)setLocationEanable:(BOOL)isEanble;
/*!
* @abstract PUSH开关
*
* @discussion PUSH之后liveActivity消息推送
*
*/
+ (void)setPushEnable:(BOOL)isEnable completion:(nullable void (^)(NSInteger iResCode))completion;
/*!
* @abstract
*
* @param isEnable YES:NO:
*
*/
+ (void)setSmartPushEnable:(BOOL)isEnable;
/*!
* @abstract
*
* @discussion JPushNotiInMessageDelegate的代理对象
*
*/
+ (void)setNotiInMessageDelegate:(id<JPUSHNotiInMessageDelegate>)notiInMessageDelegate;
///----------------------------------------------------
///********************下列方法已过期********************
///**************请使用新版tag/alias操作接口**************
///----------------------------------------------------
/// @name Tag alias setting 设置别名与标签
///----------------------------------------------------
/*!
*
* ()nilhttps://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
@class UNUserNotificationCenter;
@class UNNotificationResponse;
@protocol JPUSHRegisterDelegate <NSObject>
/*
* @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:]
* @param center [UNUserNotificationCenter currentNotificationCenter]
* @param notification
* @param completionHandler callback中的options 使UNNotificationPresentationOptions
*/
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler;
/*
* @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:]
* @param center [UNUserNotificationCenter currentNotificationCenter]
* @param response
* @param completionHandler
*/
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler;
/*
* @brief handle UserNotifications.framework [openSettingsForNotification:]
* @param center [UNUserNotificationCenter currentNotificationCenter]
* @param notification
*/
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification NS_AVAILABLE_IOS(12.0);
/**
*
* @param status JPAuthorizationStatus
* @param info
*/
- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(nullable NSDictionary *)info;
@end
@protocol JPUSHGeofenceDelegate <NSObject>
/**
@param geofence
@param error
*/
- (void)jpushGeofenceRegion:(nullable NSDictionary *)geofence
error:(nullable NSError *)error;
/**
@param geofenceList
*/
- (void)jpushCallbackGeofenceReceived:(nullable NSArray<NSDictionary*> *)geofenceList;
/**
@param geofenceId id
@param userInfo
@param error
*/
- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
/**
@param geofenceId id
@param userInfo
@param error
*/
- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *_Nullable)userInfo error:(NSError *_Nullable)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
@end
@protocol JPUSHNotiInMessageDelegate <NSObject>
/**
@param content
*/
- (void)jPushNotiInMessageDidShowWithContent:(NSDictionary *)content;
/**
@param content
*/
- (void)jPushNotiInMessageDidClickWithContent:(NSDictionary *)content;
@end
@protocol JPUSHInAppMessageDelegate <NSObject>
/**
@param inAppMessage
*/
- (void)jPushInAppMessageDidShow:(JPushInAppMessage *)inAppMessage;
/**
@param inAppMessage
*/
- (void)jPushInAppMessageDidClick:(JPushInAppMessage *)inAppMessage;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,23 @@
<?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>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

@ -369,6 +369,20 @@ JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) {
this.receiveMessage = JSON.parse(data); this.receiveMessage = JSON.parse(data);
cordova.fireDocumentEvent("jpush.receiveMessage", this.receiveMessage); cordova.fireDocumentEvent("jpush.receiveMessage", this.receiveMessage);
}; };
JPushPlugin.prototype.receiveInAppMessageClickCallback = function(data) {
if (device.platform === "Android") {
data = JSON.stringify(data);
this.receiveMessage = JSON.parse(data);
cordova.fireDocumentEvent("jpush.receiveInAppMessageClick", this.receiveMessage);
}
};
JPushPlugin.prototype.receiveInAppMessageShowCallback = function(data) {
if (device.platform === "Android") {
data = JSON.stringify(data);
this.receiveMessage = JSON.parse(data);
cordova.fireDocumentEvent("jpush.receiveInAppMessageShow", this.receiveMessage);
}
};
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) { JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
data = JSON.stringify(data); data = JSON.stringify(data);
@ -475,6 +489,34 @@ JPushPlugin.prototype.setMaxGeofenceNumber = function(maxNumber) {
} }
}; };
//设置角标
JPushPlugin.prototype.setBadgeNumber = function(badgeNumb) {
if (device.platform === "Android") {
this.callNative("setBadgeNumber", [badgeNumb], null);
}
};
//设备是否同意隐私协议
JPushPlugin.prototype.setAuth = function(isAuth){
if(device.platform === "Android"){
this.callNative("setAuth", [isAuth], null);
}
}
/**
* 设置手机号
*
* @param params = { 'sequence': number, 'mobileNumber': string }
*/
JPushPlugin.prototype.setMobileNumber = function(
params,
successCallback,
errorCallback
) {
this.callNative("setMobileNumber", [params], successCallback, errorCallback);
};
if (!window.plugins) { if (!window.plugins) {
window.plugins = {}; window.plugins = {};
} }