Compare commits

...

90 Commits

Author SHA1 Message Date
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
.idea
### ApacheCordova ###
# Apache Cordova generated files and directories
bin/*

View File

@@ -68,13 +68,19 @@
如果使用了 Ionic可以再安装 @jiguang-ionic/jpush 包,适配 ionic-native
```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* 中增加:
```js
// @jiguang-ionic/jpush@1.0.0+
import { JPush } from '@jiguang-ionic/jpush';
// @jiguang-ionic/jpush@2.0.0+
import { JPush } from '@jiguang-ionic/jpush/ngx';
...
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)
- [getAllTags](#getalltags)
- [checkTagBindState](#checktagbindstate)
- [设置手机号](#设置手机号)
- [setMobileNumber](#setMobileNumber)
- [获取点击通知内容](#获取点击通知内容)
- [event - jpush.openNotification](#event---jpushopennotification)
- [获取通知内容](#获取通知内容)
@@ -396,6 +398,37 @@ window.JPush.checkTagBindState({ sequence: 1, tag: 'tag1' },
- sequence: number。用户自定义的操作序列号, 同操作结果一起返回,用来标识一次操作的唯一性。
- 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
@@ -577,5 +610,6 @@ window.JPush.getUserNotificationSettings(function(result) {
// 系统设置中已关闭应用推送。
} else if(result > 0) {
// 系统设置中打开了应用推送。
})
}
})
```

BIN
example/css/.DS_Store vendored

Binary file not shown.

View File

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

View File

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

View File

@@ -7,9 +7,37 @@ export interface AliasOptions {
sequence: number;
alias?: string;
}
export declare class JPush extends IonicNativePlugin {
init(): Promise<any>;
setDebugMode(enable: boolean): Promise<any>;
/**
* @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 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>;
stopPush(): Promise<any>;
resumePush(): Promise<any>;
@@ -40,18 +68,18 @@ export declare class JPush extends IonicNativePlugin {
*/
getUserNotificationSettings(): Promise<any>;
clearLocalNotifications(): Promise<any>;
setBadge(badge: number): Promise<any>;
resetBadge(): Promise<any>;
setApplicationIconBadgeNumber(badge: number): 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): Promise<any>;
deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey: string): Promise<any>;
addDismissActions(actions: Array<object>, categoryId: string): Promise<any>;
addNotificationActions(actions: Array<object>, categoryId: string): Promise<any>;
setLocation(latitude: number, longitude: number): Promise<any>;
startLogPageView(pageName: string): Promise<any>;
stopLogPageView(pageName: string): Promise<any>;
beginLogPageView(pageName: string, duration: number): 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>;
@@ -65,3 +93,5 @@ export declare class JPush extends IonicNativePlugin {
setSilenceTime(startHour: number, startMinute: number, endHour: number, endMinute: 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",
"version": "1.0.2",
"version": "2.0.0",
"description": "JPush support for ionic-native",
"module": "index.js",
"typings": "index.d.ts",
"author": "hevin",
"license": "MIT",
"peerDependencies": {
"@ionic-native/core": "^4.2.0",
"@ionic-native/core": "^5.1.0",
"@angular/core": "*",
"rxjs": "^5.0.1"
"rxjs": "^6.3.0"
},
"repository": {
"type": "git",

View File

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

View File

@@ -2,7 +2,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="jpush-phonegap-plugin"
version="3.6.1">
version="5.6.0">
<name>JPush</name>
<description>JPush for cordova plugin</description>
@@ -48,8 +48,7 @@
<header-file src="src/ios/Plugins/AppDelegate+JPush.h" />
<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-3.1.1.a" framework="true" />
<source-file src="src/ios/lib/jpush-ios-5.5.0.xcframework" framework="true" />
<resource-file src="src/ios/JPushConfig.plist" />
<framework src="CFNetwork.framework" weak="true" />
@@ -64,6 +63,8 @@
<framework src="AdSupport.framework" weak="true" />
<framework src="UserNotifications.framework" 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">
<string>$APP_KEY</string>
@@ -77,92 +78,62 @@
</feature>
</config-file>
<config-file target="AndroidManifest.xml" parent="/manifest" mode="merge">
<config-file target="AndroidManifest.xml" parent="/manifest">
<!-- Required 一些系统要求的权限,如访问网络等 -->
<permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required 一些系统要求的权限,如访问网络等-->
<uses-permission android:name="$PACKAGE_NAME.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<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.POST_NOTIFICATIONS"/>
<!-- Optional for location -->
<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 target="AndroidManifest.xml" parent="/manifest/application" mode="merge">
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<!-- Required SDK 核心功能-->
<service android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false"
android:process=":remote">
<!-- Rich push 核心功能 since 2.0.6-->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:exported="true"
android:theme="@style/JPushDialogStyle" >
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service>
<category android:name="android.intent.category.DEFAULT" />
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:exported="true" />
<action android:name="cn.jpush.android.ui.PopWinActivity" />
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 JPush 服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service android:name="cn.jpush.android.service.DaemonService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.DaemonService" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</service>
<!-- since 3.1.0 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DownloadProvider"
android:name="cn.jpush.android.service.DownloadProvider"
android:exported="true"
/>
</activity>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true">
<intent-filter android:priority="1000">
<!--Required 显示通知栏 -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<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" >
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
@@ -170,77 +141,187 @@
</intent-filter>
</activity>
<!-- SDK 核心功能-->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:theme="@style/MyDialogStyle">
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DataProvider"
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>
<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="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- Required SDK 核心功能 -->
<service android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false">
<!-- since 3.3.0 Required SDK 核心功能-->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<!--User defined. For test only 继承自cn.jpush.android.service.JCommonService-->
<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>
<!-- 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
android:name="cn.jiguang.cordova.push.JPushReceiver"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
android:name="cn.jiguang.cordova.push.JPushReceiver"
android:enabled="true"
android:exported="false">
<!-- <intent-filter>-->
<!-- <action android:name="cn.jpush.android.intent.REGISTRATION" />-->
<!-- <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />-->
<!-- <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />-->
<!-- <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />-->
<!-- <action android:name="cn.jpush.android.intent.CONNECTION" />-->
<!-- <category android:name="$PACKAGE_NAME" />-->
<!-- </intent-filter>-->
</receiver>
<!-- Required. Enable it you can get statistics data with channel -->
<meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL" />
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" />
<!-- Required . Enable it you can get statistics data with channel -->
<meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL"/>
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" /> <!-- </>值来自开发者平台取得的AppKey-->
<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>
<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/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/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"
target="res/drawable/jpush_richpush_btn_selector.xml" />
<resource-file src="src/android/res/drawable-hdpi/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"
target="res/drawable-hdpi/jpush_ic_richpush_actionbar_back.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" />
<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" />
<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" />
<resource-file src="src/android/res/layout/test_notification_layout.xml"
target="res/layout/test_notification_layout.xml" />
<resource-file src="src/android/res/layout/push_notification.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"
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>
</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;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
@@ -9,9 +10,17 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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.NotificationMessage;
import cn.jpush.android.helper.Logger;
import cn.jpush.android.local.JPushConstants;
import cn.jpush.android.service.JPushMessageReceiver;
public class JPushEventReceiver extends JPushMessageReceiver {
@@ -21,98 +30,211 @@ public class JPushEventReceiver extends JPushMessageReceiver {
@Override
public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
super.onTagOperatorResult(context, jPushMessage);
cn.jiguang.cordova.push.JLogger.d(TAG,"onTagOperatorResult:"+jPushMessage);
JSONObject resultJson = new JSONObject();
int sequence = jPushMessage.getSequence();
try {
resultJson.put("sequence", sequence);
} catch (JSONException e) {
e.printStackTrace();
}
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!");
return;
}
if (jPushMessage.getErrorCode() == 0) { // success
Set<String> tags = jPushMessage.getTags();
JSONArray tagsJsonArr = new JSONArray();
for (String tag : tags) {
tagsJsonArr.put(tag);
}
try {
tryCallback(jPushMessage, new SuccessCallback() {
@Override
public void onSuccessCallback(JSONObject resultJson) throws JSONException {
Set<String> tags = jPushMessage.getTags();
JSONArray tagsJsonArr = new JSONArray();
for (String tag : tags) {
tagsJsonArr.put(tag);
}
if (tagsJsonArr.length() != 0) {
resultJson.put("tags", tagsJsonArr);
}
} catch (JSONException e) {
e.printStackTrace();
}
callback.success(resultJson);
} else {
try {
resultJson.put("code", jPushMessage.getErrorCode());
} catch (JSONException e) {
e.printStackTrace();
}
callback.error(resultJson);
}
JPushPlugin.eventCallbackMap.remove(sequence);
});
}
@Override
public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
super.onCheckTagOperatorResult(context, jPushMessage);
JSONObject resultJson = new JSONObject();
cn.jiguang.cordova.push.JLogger.d(TAG,"onCheckTagOperatorResult:"+jPushMessage);
int sequence = jPushMessage.getSequence();
try {
resultJson.put("sequence", sequence);
} catch (JSONException e) {
e.printStackTrace();
}
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!");
return;
}
if (jPushMessage.getErrorCode() == 0) {
try {
tryCallback(jPushMessage, new SuccessCallback() {
@Override
public void onSuccessCallback(JSONObject resultJson) throws JSONException {
resultJson.put("tag", jPushMessage.getCheckTag());
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
public void onAliasOperatorResult(Context context, JPushMessage 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();
int sequence = jPushMessage.getSequence();
@@ -122,22 +244,19 @@ public class JPushEventReceiver extends JPushMessageReceiver {
e.printStackTrace();
}
CallbackContext callback = JPushPlugin.eventCallbackMap.get(sequence);
CallbackContext callback = cn.jiguang.cordova.push.JPushPlugin.eventCallbackMap.get(sequence);
if (callback == null) {
Log.i(TAG, "Unexpected error, callback is null!");
Logger.i(TAG, "Unexpected error, callback is null!");
return;
}
if (jPushMessage.getErrorCode() == 0) { // success
if (jPushMessage.getErrorCode() == 0) {
try {
if (!TextUtils.isEmpty(jPushMessage.getAlias())) {
resultJson.put("alias", jPushMessage.getAlias());
}
successCallback.onSuccessCallback(resultJson);
} catch (JSONException e) {
e.printStackTrace();
}
callback.success(resultJson);
} else {
@@ -146,10 +265,38 @@ public class JPushEventReceiver extends JPushMessageReceiver {
} catch (JSONException e) {
e.printStackTrace();
}
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.TagAliasCallback;
import cn.jpush.android.data.JPushLocalNotification;
import cn.jiguang.api.utils.JCollectionAuth;
public class JPushPlugin extends CordovaPlugin {
@@ -41,12 +42,10 @@ public class JPushPlugin extends CordovaPlugin {
private static JPushPlugin instance;
private static Activity cordovaActivity;
static String notificationTitle;
static String notificationAlert;
static JSONObject notificationJson;
static Map<String, Object> notificationExtras = new HashMap<String, Object>();
static String openNotificationTitle;
static String openNotificationAlert;
static JSONObject openNotificationJson;
static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
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) {
super.initialize(cordova, webView);
mContext = cordova.getActivity().getApplicationContext();
Log.d(TAG,"initialize plugin");
JPushInterface.init(mContext);
// JPushInterface.init(mContext);
cordovaActivity = cordova.getActivity();
// 如果同时缓存了打开事件 openNotificationAlert 和 消息事件 notificationAlert只向 UI 发打开事件。
// 这样做是为了和 iOS 统一。
if (openNotificationAlert != null) {
notificationAlert = null;
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
if (openNotificationJson != null) {
transmitNotificationOpen(openNotificationJson);
}
if (notificationAlert != null) {
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras);
if (notificationJson != null) {
transmitNotificationReceive(notificationJson);
}
}
public void onResume(boolean multitasking) {
if (openNotificationAlert != null) {
notificationAlert = null;
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
if (openNotificationJson != null) {
transmitNotificationOpen(openNotificationJson);
}
if (notificationAlert != null) {
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras);
if (notificationJson != null) {
transmitNotificationReceive(notificationJson);
}
}
@@ -159,11 +157,11 @@ public class JPushPlugin extends CordovaPlugin {
return data;
}
static void transmitMessageReceive(String message, Map<String, Object> extras) {
static void transmitMessageReceive(JSONObject data) {
if (instance == null) {
return;
}
JSONObject data = getMessageObject(message, extras);
// JSONObject data = getMessageObject(message, extras);
String format = "window.plugins.jPushPlugin.receiveMessageInAndroidCallback(%s);";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@@ -173,12 +171,39 @@ public class JPushPlugin extends CordovaPlugin {
}
});
}
static void transmitNotificationOpen(String title, String alert, Map<String, Object> extras) {
static void transmitInAppMessageClick( JSONObject data) {
if (instance == null) {
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);";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@@ -187,15 +212,14 @@ public class JPushPlugin extends CordovaPlugin {
instance.webView.loadUrl("javascript:" + js);
}
});
JPushPlugin.openNotificationTitle = null;
JPushPlugin.openNotificationAlert = null;
JPushPlugin.openNotificationJson = null;
}
static void transmitNotificationReceive(String title, String alert, Map<String, Object> extras) {
static void transmitNotificationReceive(JSONObject data) {
if (instance == null) {
return;
}
JSONObject data = getNotificationObject(title, alert, extras);
// JSONObject data = getNotificationObject(title, alert, extras);
String format = "window.plugins.jPushPlugin.receiveNotificationInAndroidCallback(%s);";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@@ -204,8 +228,7 @@ public class JPushPlugin extends CordovaPlugin {
instance.webView.loadUrl("javascript:" + js);
}
});
JPushPlugin.notificationTitle = null;
JPushPlugin.notificationAlert = null;
JPushPlugin.notificationJson = null;
}
static void transmitReceiveRegistrationId(String rId) {
@@ -246,6 +269,7 @@ public class JPushPlugin extends CordovaPlugin {
}
void init(JSONArray data, CallbackContext callbackContext) {
JPushInterface.setNotificationCallBackEnable(mContext, true);
JPushInterface.init(mContext);
}
@@ -254,6 +278,7 @@ public class JPushPlugin extends CordovaPlugin {
try {
mode = data.getBoolean(0);
JPushInterface.setDebugMode(mode);
JLogger.setLoggerEnable(mode);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
@@ -296,6 +321,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading num json");
return;
}
if (num != -1) {
JPushInterface.setLatestNotificationNumber(mContext, num);
@@ -364,6 +390,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.setAlias(mContext, sequence, alias);
@@ -379,6 +406,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.deleteAlias(mContext, sequence);
@@ -394,6 +422,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.getAlias(mContext, sequence);
@@ -416,6 +445,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.setTags(mContext, sequence, tags);
@@ -438,6 +468,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.addTags(mContext, sequence, tags);
@@ -460,6 +491,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.deleteTags(mContext, sequence, tags);
@@ -476,6 +508,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.cleanTags(mContext, sequence);
@@ -492,6 +525,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.getAllTags(mContext, sequence);
@@ -510,6 +544,7 @@ public class JPushPlugin extends CordovaPlugin {
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Parameters error.");
return;
}
JPushInterface.checkTagBindState(mContext, sequence, tag);
@@ -637,6 +672,41 @@ public class JPushPlugin extends CordovaPlugin {
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) {
return !(hour < 0 || hour > 23);
}

View File

@@ -18,69 +18,69 @@ public class JPushReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(JPushInterface.ACTION_REGISTRATION_ID)) {
String rId = intent.getStringExtra(JPushInterface.EXTRA_REGISTRATION_ID);
JPushPlugin.transmitReceiveRegistrationId(rId);
} else if (action.equals(JPushInterface.ACTION_MESSAGE_RECEIVED)) {
handlingMessageReceive(intent);
} else if (action.equals(JPushInterface.ACTION_NOTIFICATION_RECEIVED)) {
handlingNotificationReceive(context, intent);
} else if (action.equals(JPushInterface.ACTION_NOTIFICATION_OPENED)) {
handlingNotificationOpen(context, intent);
}
// String action = intent.getAction();
// if (action.equals(JPushInterface.ACTION_REGISTRATION_ID)) {
// String rId = intent.getStringExtra(JPushInterface.EXTRA_REGISTRATION_ID);
// JPushPlugin.transmitReceiveRegistrationId(rId);
// } else if (action.equals(JPushInterface.ACTION_MESSAGE_RECEIVED)) {
// handlingMessageReceive(intent);
// } else if (action.equals(JPushInterface.ACTION_NOTIFICATION_RECEIVED)) {
// handlingNotificationReceive(context, intent);
// } else if (action.equals(JPushInterface.ACTION_NOTIFICATION_OPENED)) {
// handlingNotificationOpen(context, intent);
// }
}
private void handlingMessageReceive(Intent intent) {
String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.transmitMessageReceive(msg, extras);
}
private void handlingNotificationOpen(Context context, Intent intent) {
String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
JPushPlugin.openNotificationTitle = title;
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
JPushPlugin.openNotificationAlert = alert;
Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.openNotificationExtras = extras;
JPushPlugin.transmitNotificationOpen(title, alert, extras);
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 handlingNotificationReceive(Context context, Intent intent) {
String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
JPushPlugin.notificationTitle = title;
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
JPushPlugin.notificationAlert = alert;
Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.notificationExtras = extras;
JPushPlugin.transmitNotificationReceive(title, alert, extras);
}
private Map<String, Object> getNotificationExtras(Intent intent) {
Map<String, Object> extrasMap = new HashMap<String, Object>();
for (String key : intent.getExtras().keySet()) {
if (!IGNORED_EXTRAS_KEYS.contains(key)) {
if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
extrasMap.put(key, intent.getIntExtra(key, 0));
} else {
extrasMap.put(key, intent.getStringExtra(key));
}
}
}
return extrasMap;
}
// private void handlingMessageReceive(Intent intent) {
// String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
// Map<String, Object> extras = getNotificationExtras(intent);
// JPushPlugin.transmitMessageReceive(msg, extras);
// }
//
// private void handlingNotificationOpen(Context context, Intent intent) {
// String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
// JPushPlugin.openNotificationJson = title;
//
// String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
// JPushPlugin.openNotificationAlert = alert;
//
// Map<String, Object> extras = getNotificationExtras(intent);
// JPushPlugin.openNotificationExtras = extras;
//
// JPushPlugin.transmitNotificationOpen(title, alert, extras);
//
// 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 handlingNotificationReceive(Context context, Intent intent) {
// String title = intent.getStringExtra(JPushInterface.EXTRA_NOTIFICATION_TITLE);
// JPushPlugin.notificationTitle = title;
//
// String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
// JPushPlugin.notificationAlert = alert;
//
// Map<String, Object> extras = getNotificationExtras(intent);
// JPushPlugin.notificationExtras = extras;
//
// JPushPlugin.transmitNotificationReceive(title, alert, extras);
// }
//
// private Map<String, Object> getNotificationExtras(Intent intent) {
// Map<String, Object> extrasMap = new HashMap<String, Object>();
// for (String key : intent.getExtras().keySet()) {
// if (!IGNORED_EXTRAS_KEYS.contains(key)) {
// if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
// extrasMap.put(key, intent.getIntExtra(key, 0));
// } else {
// extrasMap.put(key, intent.getStringExtra(key));
// }
// }
// }
// 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
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popLayoutId"
style="@style/MyDialogStyle"
style="@style/JPushDialogStyle"
android:orientation="vertical"
android:layout_width="280dp"
android:layout_height="250dp" >
android:layout_height="380dp" >
<WebView
android:layout_width="match_parent"

View File

@@ -13,11 +13,13 @@
<ImageButton
android:id="@+id/imgRichpushBtnBack"
android:layout_width="wrap_content"
android:layout_width="25dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
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" />
<ImageView
@@ -35,7 +37,7 @@
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="7dp"
android:layout_marginRight="5dp"
android:layout_marginRight="48dp"
android:layout_toRightOf="@id/imgView"
android:clickable="false"
android:text=" "
@@ -50,10 +52,10 @@
android:progress="0"
android:progressDrawable="@drawable/jpush_richpush_progressbar"
style="?android:attr/progressBarStyleHorizontal" />
<WebView
<!--<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fullWebView"
android:background="#000000" />
android:background="#000000" />-->
</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"?>
<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:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
@@ -10,4 +10,13 @@
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item>
</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>

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)
+(void)load{
Method origin1;
Method swizzle1;
origin1 = class_getInstanceMethod([self class],@selector(init));
swizzle1 = class_getInstanceMethod([self class], @selector(init_plus));
method_exchangeImplementations(origin1, swizzle1);
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
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{

View File

@@ -73,6 +73,9 @@ static NSMutableDictionary *_jpushEventCache;
-(void)addDismissActions:(CDVInvokedUrlCommand*)command;
-(void)addNotificationActions:(CDVInvokedUrlCommand*)command;
// 设置手机号
-(void)setMobileNumber:(CDVInvokedUrlCommand*)command;
/*
* 以下为js中可监听到的事件
* jpush.openNotification 点击推送消息启动或唤醒app

View File

@@ -61,7 +61,7 @@
#else
- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{
- (CDVPlugin*)initWithWebView:(WKWebView*)theWebView{
NSLog(@"### initWithWebView ");
if (self=[super initWithWebView:theWebView]) {
}
@@ -510,6 +510,29 @@
[[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 -
+(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</string>
<key>LibraryPath</key>
<string>libJPush.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<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>
</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.
*/
#define JPUSH_VERSION_NUMBER 3.1.1
#define JPUSH_VERSION_NUMBER 5.5.0
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class CLRegion;
@class UILocalNotification;
@class CLLocation;
@@ -20,11 +22,17 @@
@class UNNotificationSettings;
@class UNNotificationRequest;
@class UNNotification;
@class UIView;
@protocol JPUSHRegisterDelegate;
@protocol JPUSHGeofenceDelegate;
@protocol JPUSHNotiInMessageDelegate;
@protocol JPUSHInAppMessageDelegate;
typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq);
typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind);
typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq);
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; // 建立连接
@@ -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.
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.
};
/*!
@@ -62,7 +77,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* iOS10 UNNotificationCategory
* iOS8-iOS9 UIUserNotificationCategory
*/
@property (nonatomic, strong) NSSet *categories;
@property (nonatomic, strong, nullable) NSSet *categories;
@end
/*!
@@ -70,10 +85,10 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
@interface JPushNotificationIdentifier : NSObject<NSCopying, NSCoding>
@property (nonatomic, copy) NSArray<NSString *> *identifiers; // 推送的标识数组
@property (nonatomic, copy) UILocalNotification *notificationObj NS_DEPRECATED_IOS(4_0, 10_0); // iOS10以下可以传UILocalNotification对象数据iOS10以上无效
@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) 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
@@ -82,8 +97,8 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* iOS10以上有效
*/
@interface JPushNotificationSound : NSObject <NSCopying, NSCoding>
@property (nonatomic, copy) NSString *soundName; //普通通知铃声
@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
@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
@@ -96,17 +111,25 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@property (nonatomic, copy) NSString *title; // 推送标题
@property (nonatomic, copy) NSString *subtitle; // 推送副标题
@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 *categoryIdentifier; // 行为分类标识
@property (nonatomic, copy) NSDictionary *userInfo; // 本地推送时可以设置userInfo来增加附加信息远程推送时设置的payload推送内容作为此userInfo
@property (nonatomic, copy) NSString *sound; // 声音名称,不设置则为默认声音
@property (nonatomic, copy) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0); //推送声音实体
@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
@@ -133,7 +156,35 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@property (nonatomic, copy) NSString *requestIdentifier; // 推送请求标识
@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容
@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
@@ -147,12 +198,6 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
/// @name Setup 启动相关
///----------------------------------------------------
/*!
* @abstract SDK
*
* @discussion , PushConfig.plist . 使, .
*/
+ (void)setupWithOption:(NSDictionary *)launchingOption __attribute__((deprecated("JPush 2.1.0 版本已过期")));
/*!
* @abstract SDK
@@ -162,22 +207,33 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @param channel . .
* @param isProduction . , NO; , YES.
* App profile provision的配置.
* @param advertisingIdentifier 广IDFA 使IDFAnil.
*
* @discussion SDK启动必须的参数, SDK.
* App , JPush SDK .
*/
+ (void)setupWithOption:(NSDictionary *)launchingOption
+ (void)setupWithOption:(nullable NSDictionary *)launchingOption
appKey:(NSString *)appKey
channel:(NSString *)channel
channel:(nullable NSString *)channel
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
channel:(NSString *)channel
channel:(nullable NSString *)channel
apsForProduction:(BOOL)isProduction
advertisingIdentifier:(NSString *)advertisingId;
advertisingIdentifier:(nullable NSString *)advertisingId;
///----------------------------------------------------
@@ -192,7 +248,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*
*/
+ (void)registerForRemoteNotificationTypes:(NSUInteger)types
categories:(NSSet *)categories;
categories:(nullable NSSet *)categories;
/*!
* @abstract iOS10
*
@@ -200,17 +256,71 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @param delegate
*
*/
+ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(id<JPUSHRegisterDelegate>)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操作接口
* ////
@@ -225,7 +335,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq
*/
+ (void)addTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion
completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -237,7 +347,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq
*/
+ (void)setTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion
completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -248,7 +358,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq
*/
+ (void)deleteTags:(NSSet<NSString *> *)tags
completion:(JPUSHTagsOperationCompletion)completion
completion:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -256,7 +366,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion
@param seq
*/
+ (void)cleanTags:(JPUSHTagsOperationCompletion)completion
+ (void)cleanTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -265,7 +375,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion
@param seq
*/
+ (void)getAllTags:(JPUSHTagsOperationCompletion)completion
+ (void)getAllTags:(nullable JPUSHTagsOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -275,7 +385,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq
*/
+ (void)validTag:(NSString *)tag
completion:(JPUSHTagValidOperationCompletion)completion
completion:(nullable JPUSHTagValidOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -286,7 +396,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param seq
*/
+ (void)setAlias:(NSString *)alias
completion:(JPUSHAliasOperationCompletion)completion
completion:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -295,7 +405,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion
@param seq
*/
+ (void)deleteAlias:(JPUSHAliasOperationCompletion)completion
+ (void)deleteAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
/**
@@ -304,7 +414,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
@param completion
@param seq
*/
+ (void)getAlias:(JPUSHAliasOperationCompletion)completion
+ (void)getAlias:(nullable JPUSHAliasOperationCompletion)completion
seq:(NSInteger)seq;
@@ -316,6 +426,85 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (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 统计功能
///----------------------------------------------------
@@ -370,6 +559,33 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (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 本地通知
@@ -392,7 +608,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @discussion 使
*
*/
+ (void)removeNotification:(JPushNotificationIdentifier *)identifier;
+ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier;
/*!
* @abstract (iOS10iOS10以下版本)
@@ -529,7 +745,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
* @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 日志与其他
@@ -547,7 +763,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (NSString *)registrationID;
+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString *registrationID))completionHandler;
+ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString * _Nullable registrationID))completionHandler;
/*!
* @abstract Debug
@@ -573,6 +789,47 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
*/
+ (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操作接口**************
@@ -626,13 +883,100 @@ callbackSelector:(SEL)cbSelector
* @param response
* @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:]
* @param center [UNUserNotificationCenter currentNotificationCenter]
* @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
@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.5.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
/*!
* 推送触发方式实体类
* 注dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值如果同时传入值会根据优先级I、II、III使其中一种触发方式生效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 如果不需要使用IDFA传nil.
*
* @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的pushToStartToken如有更新请及时调用该方法更新pushToStartToken
* @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的pushToken如有更新请及时调用该方法更新pushToken
* @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为用户属性值只支持 NSString、NSNumber、NSDate类型如果属性为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 注册或更新推送 (支持iOS10并兼容iOS10以下版本)
*
* JPush 2.1.9新接口
* @param request JPushNotificationRequest类型设置推送的属性设置已有推送的request.requestIdentifier即更新已有的推送否则为注册新推送更新推送仅仅在iOS10以上有效结果通过request.completionHandler返回
* @discussion 旧的注册本地推送接口被废弃,使用此接口可以替换
*
*/
+ (void)addNotification:(JPushNotificationRequest *)request;
/*!
* @abstract 移除推送 (支持iOS10并兼容iOS10以下版本)
*
* JPush 2.1.9新接口
* @param identifier JPushNotificationIdentifier类型iOS10以上identifier设置为nil则移除所有在通知中心显示推送和待推送请求也可以通过设置identifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求iOS10以下identifier设置为nil则移除所有推送identifier.delivered属性无效另外可以通过identifier.notificationObj传入特定推送对象来移除此推送。
* @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换
*
*/
+ (void)removeNotification:(nullable JPushNotificationIdentifier *)identifier;
/*!
* @abstract 查找推送 (支持iOS10并兼容iOS10以下版本)
*
* 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 设置别名与标签
///----------------------------------------------------
/*!
* 下面的接口是可选的
* 设置标签和(或)别名若参数为nil则忽略若是空对象则清空详情请参考文档https://docs.jiguang.cn/jpush/client/iOS/ios_api/
* setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法不再需要显示声明回调函数只需要在block里面处理设置结果即可.
* WARN: 使用block时需要注意循环引用问题
*/
+ (void) setTags:(NSSet *)tags
alias:(NSString *)alias
callbackSelector:(SEL)cbSelector
target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期")));
+ (void) setTags:(NSSet *)tags
alias:(NSString *)alias
callbackSelector:(SEL)cbSelector
object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void) setTags:(NSSet *)tags
callbackSelector:(SEL)cbSelector
object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void)setTags:(NSSet *)tags
alias:(NSString *)alias
fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void) setTags:(NSSet *)tags
aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+ (void)setAlias:(NSString *)alias
callbackSelector:(SEL)cbSelector
object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
@end
@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);
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) {
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) {
window.plugins = {};
}