Compare commits
118 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76d6c5ddb1 | ||
|
|
521422cac0 | ||
|
|
c629dcc033 | ||
|
|
aeee619eab | ||
|
|
bc9e441fe2 | ||
|
|
fad4745e01 | ||
|
|
10b29611c5 | ||
|
|
03429474c0 | ||
|
|
e56a05c64b | ||
|
|
a50bafcf3e | ||
|
|
60176c1ea6 | ||
|
|
c929496721 | ||
|
|
bdd9a8beea | ||
|
|
511eee622f | ||
|
|
2f4669471f | ||
|
|
85e3a23f88 | ||
|
|
206f2ac89e | ||
|
|
57b9364279 | ||
|
|
e0db803818 | ||
|
|
e140dc3b77 | ||
|
|
a26822b894 | ||
|
|
7dd7a4a86c | ||
|
|
b7a2a74d88 | ||
|
|
2f8234c29f | ||
|
|
a9b5af06a5 | ||
|
|
ddfb952bcf | ||
|
|
74fea46b1c | ||
|
|
b2f79c6234 | ||
|
|
9e23995555 | ||
|
|
a7455240a1 | ||
|
|
07466a8718 | ||
|
|
2b5d59e32e | ||
|
|
e4b70a561a | ||
|
|
da8c6c29e9 | ||
|
|
2ebacad254 | ||
|
|
9751b15bf0 | ||
|
|
b5fd5aa51a | ||
|
|
ee3e6b9e75 | ||
|
|
72407b0b9c | ||
|
|
2a427c70f9 | ||
|
|
bc12d3c606 | ||
|
|
9b1bff2ce1 | ||
|
|
3b5fc629dd | ||
|
|
fa4f3ac0d7 | ||
|
|
3ad9a415e9 | ||
|
|
d76d01c856 | ||
|
|
b7d4ba5111 | ||
|
|
7c326599aa | ||
|
|
2adbba2943 | ||
|
|
5b22d798cb | ||
|
|
eb624a7bb2 | ||
|
|
e29f00f77f | ||
|
|
1ecb2b273a | ||
|
|
6767af7488 | ||
|
|
03eab0c59e | ||
|
|
23ae6ad342 | ||
|
|
ccfffc9a69 | ||
|
|
16c3c96844 | ||
|
|
b2e818e88d | ||
|
|
5a8a926c50 | ||
|
|
0903b58270 | ||
|
|
f0dc403ca8 | ||
|
|
5c53749171 | ||
|
|
68bb0ebfdf | ||
|
|
30fc85fc8d | ||
|
|
fa0ca5f335 | ||
|
|
8de93a3a07 | ||
|
|
a4c17d3882 | ||
|
|
1d420b5bb6 | ||
|
|
d69f50915c | ||
|
|
e26d8448a0 | ||
|
|
387eaa1aff | ||
|
|
45785a569c | ||
|
|
0c8a6d25a6 | ||
|
|
529f08df88 | ||
|
|
e60d7c2b8c | ||
|
|
265d88e766 | ||
|
|
894c7d7ac1 | ||
|
|
aabc1453b8 | ||
|
|
6f78522cca | ||
|
|
ff735854ec | ||
|
|
e63f9d1774 | ||
|
|
f9a5cef603 | ||
|
|
ef8b1a7b4c | ||
|
|
82d68c3562 | ||
|
|
bdaeb5dbec | ||
|
|
0677094086 | ||
|
|
1d0d972737 | ||
|
|
3186de6111 | ||
|
|
9cb75a85db | ||
|
|
c022a06461 | ||
|
|
cc7328ad77 | ||
|
|
b5d3661240 | ||
|
|
1ae98e13e6 | ||
|
|
27cdf61ff3 | ||
|
|
1fb87d8fba | ||
|
|
a0e408f05f | ||
|
|
2d71db888f | ||
|
|
1bfd8a2836 | ||
|
|
6c80b47bad | ||
|
|
179220874e | ||
|
|
5e85c6b5b0 | ||
|
|
c526a26231 | ||
|
|
0380fbdc60 | ||
|
|
9c888aa964 | ||
|
|
14f03abce6 | ||
|
|
4b554fa2ca | ||
|
|
4085787f95 | ||
|
|
1eaf73a8d3 | ||
|
|
6c2bc206e3 | ||
|
|
10b457d489 | ||
|
|
5b0613628b | ||
|
|
6f77da5f41 | ||
|
|
24328f2ac9 | ||
|
|
8ccdbd525b | ||
|
|
67421b5091 | ||
|
|
83b7ca162a | ||
|
|
7f2179fe32 |
2
.gitignore
vendored
@@ -1,5 +1,5 @@
|
||||
# Created by https://www.gitignore.io/api/macos,apachecordova
|
||||
|
||||
.idea
|
||||
### ApacheCordova ###
|
||||
# Apache Cordova generated files and directories
|
||||
bin/*
|
||||
|
||||
45
README.md
@@ -1,7 +1,7 @@
|
||||
# JPush PhoneGap / Cordova Plugin
|
||||
|
||||
[](https://travis-ci.org/jpush/jpush-phonegap-plugin)
|
||||
[](https://github.com/jpush/jpush-phonegap-plugin/releases)
|
||||
[](https://github.com/jpush/jpush-phonegap-plugin/releases)
|
||||
[](https://github.com/jpush/jpush-phonegap-plugin)
|
||||
[](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)
|
||||
|
||||
@@ -11,12 +11,16 @@
|
||||
- 如需要短信验证码功能插件,可关注 [cordova-plugin-jsms](https://github.com/jpush/cordova-plugin-jsms)
|
||||
- 如需要统计分析功能插件,可关注 [cordova-plugin-janalytics](https://github.com/jpush/cordova-plugin-janalytics)
|
||||
|
||||
注意:目前插件暂未支持 cordova-android 7.0.0,因此在添加 android platform 时,请指定 7.0.0 以下版本,例如 6.4.0。
|
||||
|
||||
>注意:插件从 v3.4.0 开始支持 cordova-android 7.0.0,因 cordova-android 7.0.0 修改了 Android 项目结构,因此不兼容之前的版本,升级前请务必注意。
|
||||
>
|
||||
>如果需要在cordova-android 7.0.0之前版本集成最新插件,参照[这篇文章](https://www.jianshu.com/p/23b117ca27a6)
|
||||
>
|
||||
>如果需要安装之前版本的插件,请先安装 v1.2.0 以下版本(建议安装 v1.1.12)的 [cordova-plugin-jcore](https://github.com/jpush/cordova-plugin-jcore),再安装旧版本插件(比如 v3.3.2),否则运行会报错。
|
||||
>
|
||||
>[Cordova Android版本与原生版本对应表](http://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#requirements-and-support)
|
||||
## Install
|
||||
|
||||
> 注意:
|
||||
>
|
||||
> - 应用的包名一定要和 APP_KEY 对应应用的包名一致,否则极光推送服务无法注册成功。
|
||||
> - 在使用 8 或以上版本的 Xcode 调试 iOS 项目时,需要先在项目配置界面的 Capabilities 中打开 Push Notifications 开关。
|
||||
|
||||
@@ -37,19 +41,46 @@
|
||||
```shell
|
||||
cordova plugin add Your_Plugin_Path --variable APP_KEY=your_jpush_appkey
|
||||
```
|
||||
|
||||
|
||||
### 参数
|
||||
|
||||
- APP_KEY: 必须设置,JPush 上注册的包名对应的 Appkey
|
||||
|
||||
```shell
|
||||
--variable APP_KEY=your_jpush_appkey
|
||||
```
|
||||
|
||||
- CHANNEL: 可以不设置,v3.6.0+ 版本开始支持(Android Only),方便开发者统计 APK 分发渠道,默认为 developer-default.
|
||||
|
||||
```shell
|
||||
--variable CHANNEL=your_channel
|
||||
```
|
||||
|
||||
- 同时动态配置 APP_KEY 和 CHANNEL 示例
|
||||
|
||||
```shell
|
||||
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey --variable CHANNEL=your_channel
|
||||
```
|
||||
|
||||
### Ionic
|
||||
|
||||
如果使用了 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: [
|
||||
...
|
||||
@@ -119,6 +150,10 @@ Android 的推送通过长连接的方式实现,只有在保持连接的情况
|
||||
|
||||
### iOS
|
||||
|
||||
#### XCode 10 收不到推送怎么办?
|
||||
|
||||
打开 xcode -> file -> WorkSpace Settings… -> Build System 改成 Legacy Build System 然后卸载 App 重新运行。
|
||||
|
||||
#### 打包时遇到 i386 打包失败怎么办?
|
||||
|
||||
```shell
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
- [通知栏样式定制](#通知栏样式定制)
|
||||
- [设置保留最近通知条数](#设置保留最近通知条数)
|
||||
- [本地通知](#本地通知)
|
||||
- [获取推送连接状态](#获取推送连接状态)
|
||||
- [地理围栏](#地理围栏)
|
||||
|
||||
## 获取集成日志(同时适用于 iOS)
|
||||
|
||||
@@ -185,4 +187,77 @@ window.JPush.clearLocalNotifications() // 同时适用于 iOS
|
||||
- title: 设置本地通知的 title。
|
||||
- notificationID: 设置本地通知的 ID(不要为 0)。
|
||||
- broadcastTime: 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒。
|
||||
- extras: 设置额外的数据信息 extras 为 json 字符串。
|
||||
- extras: 设置额外的数据信息 extras 为 json 字符串。
|
||||
|
||||
## 获取推送连接状态
|
||||
|
||||
### API - getConnectionState
|
||||
|
||||
开发者可以使用此功能获取当前 Push 服务的连接状态
|
||||
|
||||
#### 接口定义
|
||||
|
||||
```js
|
||||
window.JPush.getConnectionState(callback)
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- callback: 回调函数,用来通知 JPush 的推送服务是否开启。
|
||||
|
||||
#### 代码示例
|
||||
|
||||
```js
|
||||
window.JPush.getConnectionState(function (result) {
|
||||
if (result == 0) {
|
||||
// 链接状态
|
||||
} else {
|
||||
// 断开状态
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
## 地理围栏
|
||||
|
||||
### API - setGeofenceInterval
|
||||
|
||||
设置地理围栏监控周期,最小3分钟,最大1天。默认为15分钟,当距离地理围栏边界小于1000米周期自动调整为3分钟。设置成功后一直使用设置周期,不会进行调整。
|
||||
|
||||
#### 接口定义
|
||||
|
||||
```js
|
||||
window.JPush.setGeofenceInterval(interval)
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- interval: 监控周期,单位是毫秒。
|
||||
|
||||
### API - setMaxGeofenceNumber
|
||||
|
||||
设置最多允许保存的地理围栏数量,超过最大限制后,如果继续创建先删除最早创建的地理围栏。默认数量为10个,允许设置最小1个,最大100个。
|
||||
|
||||
#### 接口定义
|
||||
|
||||
```js
|
||||
window.JPush.setMaxGeofenceNumber(maxNumber)
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- maxNumber: 最多允许保存的地理围栏个数
|
||||
|
||||
|
||||
### API - setBadgeNumber
|
||||
|
||||
设置App角标,目前仅华为系手机支持。
|
||||
|
||||
#### 接口定义
|
||||
|
||||
```js
|
||||
window.JPush.setBadgeNumber(badgeNumb)
|
||||
```
|
||||
|
||||
#### 参数说明
|
||||
|
||||
- badgeNumb: 角标显示数字,小于或等0,角标显示数字清楚
|
||||
@@ -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) {
|
||||
// 系统设置中打开了应用推送。
|
||||
})
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
@@ -47,14 +47,6 @@ window.JPush.startJPushSDK()
|
||||
|
||||
调用此 API,用来开启 JPush SDK 提供的推送服务。
|
||||
|
||||
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
|
||||
|
||||
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
|
||||
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
|
||||
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
|
||||
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
|
||||
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
|
||||
|
||||
#### 接口定义
|
||||
|
||||
```js
|
||||
@@ -63,6 +55,14 @@ window.JPush.init()
|
||||
|
||||
### API - stopPush
|
||||
|
||||
开发者 App 可以通过调用停止推送服务 API 来停止极光推送服务,当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。
|
||||
|
||||
本功能是一个完全本地的状态操作。也就是说:停止推送服务的状态不会保存到服务器上。
|
||||
如果停止推送服务后,开发者 App 被重新安装,或者被清除数据,
|
||||
JPush SDK 会恢复正常的默认行为。(因为保存在本地的状态数据被清除掉了)。
|
||||
本功能其行为类似于网络中断的效果,即:推送服务停止期间推送的消息,
|
||||
恢复推送服务后,如果推送的消息还在保留的时长范围内,则客户端是会收到离线消息。
|
||||
|
||||
- 不推荐调用,因为这个 API 只是让你的 DeviceToken 失效,在 设置-通知 中您的应用程序没有任何变化。
|
||||
- 推荐:设置一个 UI 界面,提醒用户在 设置-通知 中关闭推送服务。
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { NavController } from 'ionic-angular';
|
||||
import { JPush } from '@jiguang-ionic/jpush';
|
||||
import { Device } from '@ionic-native/device';
|
||||
import { Component } from "@angular/core";
|
||||
import { NavController } from "ionic-angular";
|
||||
import { JPush } from "@jiguang-ionic/jpush";
|
||||
import { Device } from "@ionic-native/device";
|
||||
|
||||
@Component({
|
||||
selector: 'page-home',
|
||||
templateUrl: 'home.html'
|
||||
selector: "page-home",
|
||||
templateUrl: "home.html"
|
||||
})
|
||||
export class HomePage {
|
||||
|
||||
public registrationId: string;
|
||||
|
||||
devicePlatform: string;
|
||||
@@ -17,130 +16,161 @@ export class HomePage {
|
||||
tagResultHandler = function(result) {
|
||||
var sequence: number = result.sequence;
|
||||
var tags: Array<string> = result.tags == null ? [] : result.tags;
|
||||
alert('Success!' + '\nSequence: ' + sequence + '\nTags: ' + tags.toString());
|
||||
alert(
|
||||
"Success!" + "\nSequence: " + sequence + "\nTags: " + tags.toString()
|
||||
);
|
||||
};
|
||||
|
||||
aliasResultHandler = function(result) {
|
||||
var sequence: number = result.sequence;
|
||||
var alias: string = result.alias;
|
||||
alert('Success!' + '\nSequence: ' + sequence + '\nAlias: ' + alias);
|
||||
alert("Success!" + "\nSequence: " + sequence + "\nAlias: " + alias);
|
||||
};
|
||||
|
||||
errorHandler = function(err) {
|
||||
var sequence: number = err.sequence;
|
||||
var code = err.code;
|
||||
alert('Error!' + '\nSequence: ' + sequence + '\nCode: ' + code);
|
||||
alert("Error!" + "\nSequence: " + sequence + "\nCode: " + code);
|
||||
};
|
||||
|
||||
constructor(public navCtrl: NavController, public jpush: JPush, device: Device) {
|
||||
|
||||
constructor(
|
||||
public navCtrl: NavController,
|
||||
public jpush: JPush,
|
||||
device: Device
|
||||
) {
|
||||
this.devicePlatform = device.platform;
|
||||
|
||||
document.addEventListener('jpush.receiveNotification', (event: any) => {
|
||||
var content;
|
||||
if (this.devicePlatform == 'Android') {
|
||||
content = event.alert;
|
||||
} else {
|
||||
content = event.aps.alert;
|
||||
}
|
||||
alert('Receive notification: ' + JSON.stringify(event));
|
||||
}, false);
|
||||
|
||||
document.addEventListener('jpush.openNotification', (event: any) => {
|
||||
var content;
|
||||
if (this.devicePlatform == 'Android') {
|
||||
content = event.alert;
|
||||
} else { // iOS
|
||||
if (event.aps == undefined) { // 本地通知
|
||||
content = event.content;
|
||||
} else { // APNS
|
||||
document.addEventListener(
|
||||
"jpush.receiveNotification",
|
||||
(event: any) => {
|
||||
var content;
|
||||
if (this.devicePlatform == "Android") {
|
||||
content = event.alert;
|
||||
} else {
|
||||
content = event.aps.alert;
|
||||
}
|
||||
}
|
||||
alert('open notification: ' + JSON.stringify(event));
|
||||
}, false);
|
||||
alert("Receive notification: " + JSON.stringify(event));
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
document.addEventListener('jpush.receiveLocalNotification', (event: any) => {
|
||||
// iOS(*,9) Only , iOS(10,*) 将在 jpush.openNotification 和 jpush.receiveNotification 中触发。
|
||||
var content;
|
||||
if (this.devicePlatform == 'Android') {
|
||||
} else {
|
||||
content = event.content;
|
||||
}
|
||||
alert('receive local notification: ' + JSON.stringify(event));
|
||||
}, false);
|
||||
document.addEventListener(
|
||||
"jpush.openNotification",
|
||||
(event: any) => {
|
||||
var content;
|
||||
if (this.devicePlatform == "Android") {
|
||||
content = event.alert;
|
||||
} else {
|
||||
// iOS
|
||||
if (event.aps == undefined) {
|
||||
// 本地通知
|
||||
content = event.content;
|
||||
} else {
|
||||
// APNS
|
||||
content = event.aps.alert;
|
||||
}
|
||||
}
|
||||
alert("open notification: " + JSON.stringify(event));
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"jpush.receiveLocalNotification",
|
||||
(event: any) => {
|
||||
// iOS(*,9) Only , iOS(10,*) 将在 jpush.openNotification 和 jpush.receiveNotification 中触发。
|
||||
var content;
|
||||
if (this.devicePlatform == "Android") {
|
||||
} else {
|
||||
content = event.content;
|
||||
}
|
||||
alert("receive local notification: " + JSON.stringify(event));
|
||||
},
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
getRegistrationID() {
|
||||
this.jpush.getRegistrationID()
|
||||
.then(rId => {
|
||||
this.registrationId = rId;
|
||||
});
|
||||
this.jpush.getRegistrationID().then(rId => {
|
||||
this.registrationId = rId;
|
||||
});
|
||||
}
|
||||
|
||||
setTags() {
|
||||
this.jpush.setTags({ sequence: this.sequence++, tags: ['Tag1', 'Tag2']})
|
||||
this.jpush
|
||||
.setTags({ sequence: this.sequence++, tags: ["Tag1", "Tag2"] })
|
||||
.then(this.tagResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
addTags() {
|
||||
this.jpush.addTags({ sequence: this.sequence++, tags: ['Tag3', 'Tag4']})
|
||||
this.jpush
|
||||
.addTags({ sequence: this.sequence++, tags: ["Tag3", "Tag4"] })
|
||||
.then(this.tagResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
checkTagBindState() {
|
||||
this.jpush.checkTagBindState({ sequence: this.sequence++, tag: 'Tag1' })
|
||||
this.jpush
|
||||
.checkTagBindState({ sequence: this.sequence++, tag: "Tag1" })
|
||||
.then(result => {
|
||||
var sequence = result.sequence;
|
||||
var tag = result.tag;
|
||||
var isBind = result.isBind;
|
||||
alert('Sequence: ' + sequence + '\nTag: ' + tag + '\nIsBind: ' + isBind);
|
||||
}).catch(this.errorHandler);
|
||||
alert(
|
||||
"Sequence: " + sequence + "\nTag: " + tag + "\nIsBind: " + isBind
|
||||
);
|
||||
})
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
deleteTags() {
|
||||
this.jpush.deleteTags({ sequence: this.sequence++, tags: ['Tag4']})
|
||||
this.jpush
|
||||
.deleteTags({ sequence: this.sequence++, tags: ["Tag4"] })
|
||||
.then(this.tagResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
getAllTags() {
|
||||
this.jpush.getAllTags({ sequence: this.sequence++ })
|
||||
this.jpush
|
||||
.getAllTags({ sequence: this.sequence++ })
|
||||
.then(this.tagResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
cleanTags() {
|
||||
this.jpush.cleanTags({ sequence: this.sequence++ })
|
||||
this.jpush
|
||||
.cleanTags({ sequence: this.sequence++ })
|
||||
.then(this.tagResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
setAlias() {
|
||||
this.jpush.setAlias({ sequence: this.sequence++, alias: 'TestAlias' })
|
||||
this.jpush
|
||||
.setAlias({ sequence: this.sequence++, alias: "TestAlias" })
|
||||
.then(this.aliasResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
getAlias() {
|
||||
this.jpush.getAlias({ sequence: this.sequence++ })
|
||||
this.jpush
|
||||
.getAlias({ sequence: this.sequence++ })
|
||||
.then(this.aliasResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
deleteAlias() {
|
||||
this.jpush.deleteAlias({ sequence: this.sequence++ })
|
||||
this.jpush
|
||||
.deleteAlias({ sequence: this.sequence++ })
|
||||
.then(this.aliasResultHandler)
|
||||
.catch(this.errorHandler);
|
||||
}
|
||||
|
||||
addLocalNotification() {
|
||||
if (this.devicePlatform == 'Android') {
|
||||
this.jpush.addLocalNotification(0, 'Hello JPush', 'JPush', 1, 5000);
|
||||
if (this.devicePlatform == "Android") {
|
||||
this.jpush.addLocalNotification(0, "Hello JPush", "JPush", 1, 5000);
|
||||
} else {
|
||||
this.jpush.addLocalNotificationForIOS(5, 'Hello JPush', 1, 'localNoti1');
|
||||
this.jpush.addLocalNotificationForIOS(5, "Hello JPush", 1, "localNoti1");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
58
ionic/jpush/index.d.ts
vendored
@@ -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;
|
||||
95
ionic/jpush/ngx/index.d.ts
vendored
Normal 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
1
ionic/jpush/ngx/index.metadata.json
Normal 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"}]}}}}]
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jpush-phonegap-plugin",
|
||||
"version": "3.3.0",
|
||||
"version": "3.8.2",
|
||||
"description": "JPush for cordova plugin",
|
||||
"cordova": {
|
||||
"id": "jpush-phonegap-plugin",
|
||||
@@ -23,7 +23,7 @@
|
||||
],
|
||||
"devDependencies": {
|
||||
"cordova-plugin-device": "*",
|
||||
"cordova-plugin-jcore": "*"
|
||||
"cordova-plugin-jcore": ">=1.4.0"
|
||||
},
|
||||
"author": "JiGuang",
|
||||
"license": "MIT",
|
||||
|
||||
258
plugin.xml
@@ -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.3.0">
|
||||
version="3.8.2">
|
||||
|
||||
<name>JPush</name>
|
||||
<description>JPush for cordova plugin</description>
|
||||
@@ -11,6 +11,7 @@
|
||||
<license>MIT License</license>
|
||||
|
||||
<preference name="APP_KEY" />
|
||||
<preference name="CHANNEL" default="developer-default" />
|
||||
|
||||
<engines>
|
||||
<engine name="cordova" version=">=3.0" />
|
||||
@@ -30,7 +31,17 @@
|
||||
<param name="ios-package" value="JPushPlugin" />
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<config-file target="*-Info.plist" parent="UIBackgroundModes">
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
</array>
|
||||
</config-file>
|
||||
<config-file target="*-Debug.plist" parent="aps-environment">
|
||||
<string>development</string>
|
||||
</config-file>
|
||||
<config-file target="*-Release.plist" parent="aps-environment">
|
||||
<string>production</string>
|
||||
</config-file>
|
||||
<header-file src="src/ios/Plugins/JPushDefine.h" />
|
||||
<header-file src="src/ios/Plugins/JPushPlugin.h" />
|
||||
<source-file src="src/ios/Plugins/JPushPlugin.m" />
|
||||
@@ -38,7 +49,7 @@
|
||||
<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.0.7.a" framework="true" />
|
||||
<source-file src="src/ios/lib/jpush-ios-3.7.4.a" framework="true" />
|
||||
<resource-file src="src/ios/JPushConfig.plist" />
|
||||
|
||||
<framework src="CFNetwork.framework" weak="true" />
|
||||
@@ -53,14 +64,11 @@
|
||||
<framework src="AdSupport.framework" weak="true" />
|
||||
<framework src="UserNotifications.framework" weak="true" />
|
||||
<framework src="libresolv.tbd" weak="true" />
|
||||
<framework src="StoreKit.framework" weak="true" />
|
||||
|
||||
<config-file target="*JPushConfig.plist" parent="Appkey">
|
||||
<string>$APP_KEY</string>
|
||||
</config-file>
|
||||
|
||||
<!-- <hook type="after_platform_add" src="hooks/iosEnablePush.js" />
|
||||
<hook type="after_plugin_install" src="hooks/iosEnablePush.js" />
|
||||
<hook type="before_plugin_uninstall" src="hooks/iosDisablePush.js" /> -->
|
||||
</platform>
|
||||
|
||||
<platform name="android">
|
||||
@@ -70,31 +78,56 @@
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<config-file target="AndroidManifest.xml" parent="/manifest">
|
||||
<!-- Required 一些系统要求的权限,如访问网络等-->
|
||||
<config-file target="AndroidManifest.xml" parent="/manifest" mode="merge">
|
||||
<!-- 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.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
|
||||
|
||||
|
||||
<!-- Optional for location -->
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
|
||||
<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.ACCESS_LOCATION_EXTRA_COMMANDS" />
|
||||
<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"/>
|
||||
</config-file>
|
||||
|
||||
<config-file target="AndroidManifest.xml" parent="/manifest/application">
|
||||
<config-file target="AndroidManifest.xml" parent="/manifest/application" mode="merge">
|
||||
|
||||
|
||||
<!-- Rich push 核心功能 since 2.0.6-->
|
||||
<activity
|
||||
android:name="cn.jpush.android.ui.PopWinActivity"
|
||||
android:theme="@style/MyDialogStyle"
|
||||
android:exported="false">
|
||||
</activity>
|
||||
|
||||
<!-- Required SDK核心功能-->
|
||||
<activity android:name="cn.jpush.android.ui.PushActivity"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||
android:configChanges="orientation|keyboardHidden">
|
||||
<activity
|
||||
android:name="cn.jpush.android.ui.PushActivity"
|
||||
android:configChanges="orientation|keyboardHidden"
|
||||
android:theme="@android:style/Theme.NoTitleBar"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="cn.jpush.android.ui.PushActivity" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
@@ -102,23 +135,12 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<!-- Rich push 核心功能 since 2.0.6-->
|
||||
<activity android:name="cn.jpush.android.ui.PopWinActivity"
|
||||
android:theme="@style/MyDialogStyle"
|
||||
android:exported="false">
|
||||
</activity>
|
||||
|
||||
<!-- Required SDK核心功能-->
|
||||
<service android:name="cn.jpush.android.service.DownloadService"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
</service>
|
||||
|
||||
<!-- Required SDK 核心功能-->
|
||||
<service android:name="cn.jpush.android.service.PushService"
|
||||
android:enabled="true"
|
||||
android:exported="false"
|
||||
android:process=":remote">
|
||||
<!-- 可配置android:process参数将PushService放在其他进程中 -->
|
||||
<service
|
||||
android:name="cn.jpush.android.service.PushService"
|
||||
android:process=":pushcore"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="cn.jpush.android.intent.REGISTER" />
|
||||
<action android:name="cn.jpush.android.intent.REPORT" />
|
||||
@@ -127,13 +149,41 @@
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<!-- 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"
|
||||
/>
|
||||
|
||||
<!-- 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"
|
||||
/>
|
||||
|
||||
<!-- Required SDK核心功能-->
|
||||
<receiver android:name="cn.jpush.android.service.PushReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
<receiver
|
||||
android:name="cn.jpush.android.service.PushReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
<intent-filter android:priority="1000">
|
||||
<!--Required 显示通知栏 -->
|
||||
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
|
||||
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!--Required 显示通知栏 -->
|
||||
<category android:name="$PACKAGE_NAME" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
@@ -144,78 +194,122 @@
|
||||
<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>
|
||||
|
||||
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
|
||||
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
|
||||
<service android:name="cn.jpush.android.service.DaemonService"
|
||||
android:enabled="true"
|
||||
android:exported="true">
|
||||
<!-- Required SDK核心功能-->
|
||||
<receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/>
|
||||
|
||||
<!-- 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.DaemonService" />
|
||||
<category android:name="$PACKAGE_NAME" />
|
||||
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
|
||||
<category android:name="$PACKAGE_NAME"></category>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!--since 3.3.0 Required SDK核心功能-->
|
||||
|
||||
<activity
|
||||
android:name="cn.jpush.android.service.JNotifyActivity"
|
||||
android:exported="true"
|
||||
android:taskAffinity="jpush.custom"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar">
|
||||
<intent-filter>
|
||||
<action android:name="cn.jpush.android.intent.JNotifyActivity" />
|
||||
<category android:name="android.intent.category.DEFAULT" /><!--Required SDK核心功能 since 4.2.2-->
|
||||
<category android:name="$PACKAGE_NAME" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<!-- 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>
|
||||
|
||||
<!-- User defined. For test only 用户自定义的广播接收器 -->
|
||||
|
||||
<receiver
|
||||
android:name="cn.jiguang.cordova.push.JPushReceiver"
|
||||
android:enabled="true">
|
||||
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 SDK核心功能-->
|
||||
<receiver
|
||||
android:name="cn.jpush.android.service.AlarmReceiver"
|
||||
android:exported="false" />
|
||||
<!-- 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-->
|
||||
|
||||
<!-- since 3.0.9 Required SDK 核心功能-->
|
||||
<provider
|
||||
android:authorities="$PACKAGE_NAME.DataProvider"
|
||||
android:name="cn.jpush.android.service.DataProvider"
|
||||
android:exported="true" />
|
||||
|
||||
<receiver android:name="cn.jiguang.cordova.push.JPushEventReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
|
||||
<category android:name="$PACKAGE_NAME" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!-- Required. Enable it you can get statistics data with channel -->
|
||||
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default" />
|
||||
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" />
|
||||
</config-file>
|
||||
|
||||
<source-file src="src/android/libs/jpush-android-3.1.1.jar" target-dir="libs" />
|
||||
<lib-file src="src/android/libs/jpush-android-4.2.8.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" />
|
||||
|
||||
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml"
|
||||
target-dir="res/drawable" />
|
||||
<source-file src="src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml"
|
||||
target-dir="res/drawable" />
|
||||
<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" />
|
||||
|
||||
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png"
|
||||
target-dir="res/drawable-hdpi" />
|
||||
<source-file src="src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png"
|
||||
target-dir="res/drawable-hdpi" />
|
||||
<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"
|
||||
target="res/layout/jpush_webview_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" />
|
||||
|
||||
<source-file src="src/android/res/layout/jpush_popwin_layout.xml" target-dir="res/layout" />
|
||||
<source-file src="src/android/res/layout/jpush_webview_layout.xml" target-dir="res/layout" />
|
||||
<source-file src="src/android/res/layout/test_notification_layout.xml" target-dir="res/layout" />
|
||||
<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" />
|
||||
|
||||
<source-file src="src/android/res/values/jpush_style.xml" target-dir="res/values" />
|
||||
<resource-file src="src/android/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" />
|
||||
</platform>
|
||||
</plugin>
|
||||
|
||||
46
src/android/JLogger.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package cn.jiguang.cordova.push;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import org.apache.cordova.CallbackContext;
|
||||
import org.json.JSONArray;
|
||||
@@ -11,10 +11,12 @@ import org.json.JSONObject;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import cn.jpush.android.api.CustomMessage;
|
||||
import cn.jpush.android.api.JPushMessage;
|
||||
import cn.jpush.android.api.NotificationMessage;
|
||||
import cn.jpush.android.helper.Logger;
|
||||
import cn.jpush.android.service.JPushMessageReceiver;
|
||||
|
||||
|
||||
public class JPushEventReceiver extends JPushMessageReceiver {
|
||||
|
||||
private static final String TAG = JPushEventReceiver.class.getSimpleName();
|
||||
@@ -22,98 +24,108 @@ public class JPushEventReceiver extends JPushMessageReceiver {
|
||||
@Override
|
||||
public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
|
||||
super.onTagOperatorResult(context, jPushMessage);
|
||||
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();
|
||||
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);
|
||||
|
||||
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) {
|
||||
JLogger.d(TAG,"onRegister:"+regId);
|
||||
JPushPlugin.transmitReceiveRegistrationId(regId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(Context context, CustomMessage customMessage) {
|
||||
super.onMessage(context,customMessage);
|
||||
//Log.e(TAG,"onMessage:"+customMessage);
|
||||
// String msg = customMessage.message;//intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
|
||||
// Map<String, Object> extras = getNotificationExtras(intent);
|
||||
// JPushPlugin.transmitMessageReceive(msg, extras);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotifyMessageArrived(Context context, NotificationMessage notificationMessage) {
|
||||
super.onNotifyMessageArrived(context, notificationMessage);
|
||||
|
||||
JLogger.d(TAG,"onNotifyMessageArrived:"+notificationMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotifyMessageOpened(Context context, NotificationMessage notificationMessage) {
|
||||
super.onNotifyMessageOpened(context, notificationMessage);
|
||||
JLogger.d(TAG,"onNotifyMessageOpened:"+notificationMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
|
||||
super.onMobileNumberOperatorResult(context, jPushMessage);
|
||||
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);
|
||||
JLogger.d(TAG,"onMultiActionClicked:"+intent);
|
||||
}
|
||||
|
||||
interface SuccessCallback{
|
||||
void onSuccessCallback(JSONObject resultJson) throws JSONException;
|
||||
}
|
||||
public void tryCallback(JPushMessage jPushMessage,SuccessCallback successCallback){
|
||||
JSONObject resultJson = new JSONObject();
|
||||
|
||||
int sequence = jPushMessage.getSequence();
|
||||
@@ -126,19 +138,16 @@ public class JPushEventReceiver extends JPushMessageReceiver {
|
||||
CallbackContext callback = 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 {
|
||||
@@ -147,10 +156,10 @@ public class JPushEventReceiver extends JPushMessageReceiver {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
callback.error(resultJson);
|
||||
}
|
||||
|
||||
JPushPlugin.eventCallbackMap.remove(sequence);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package cn.jiguang.cordova.push;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.os.Build;
|
||||
@@ -20,22 +20,17 @@ import org.json.JSONObject;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
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.jpush.android.service.JPushMessageReceiver;
|
||||
|
||||
public class JPushPlugin extends CordovaPlugin {
|
||||
|
||||
@@ -64,33 +59,30 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
|
||||
super.initialize(cordova, webView);
|
||||
mContext = cordova.getActivity().getApplicationContext();
|
||||
|
||||
JPushInterface.init(mContext);
|
||||
Log.d(TAG,"initialize plugin");
|
||||
|
||||
// JPushInterface.init(mContext);
|
||||
|
||||
cordovaActivity = cordova.getActivity();
|
||||
|
||||
//如果同时缓存了打开事件 openNotificationAlert 和 消息事件 notificationAlert,只向 UI 发打开事件。
|
||||
//这样做是为了和 iOS 统一。
|
||||
// 如果同时缓存了打开事件 openNotificationAlert 和 消息事件 notificationAlert,只向 UI 发打开事件。
|
||||
// 这样做是为了和 iOS 统一。
|
||||
if (openNotificationAlert != null) {
|
||||
notificationAlert = null;
|
||||
transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
|
||||
openNotificationExtras);
|
||||
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
|
||||
}
|
||||
if (notificationAlert != null) {
|
||||
transmitNotificationReceive(notificationTitle, notificationAlert,
|
||||
notificationExtras);
|
||||
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras);
|
||||
}
|
||||
}
|
||||
|
||||
public void onResume(boolean multitasking) {
|
||||
if (openNotificationAlert != null) {
|
||||
notificationAlert = null;
|
||||
transmitNotificationOpen(openNotificationTitle, openNotificationAlert,
|
||||
openNotificationExtras);
|
||||
transmitNotificationOpen(openNotificationTitle, openNotificationAlert, openNotificationExtras);
|
||||
}
|
||||
if (notificationAlert != null) {
|
||||
transmitNotificationReceive(notificationTitle, notificationAlert,
|
||||
notificationExtras);
|
||||
transmitNotificationReceive(notificationTitle, notificationAlert, notificationExtras);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,14 +230,13 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(final String action, final JSONArray data,
|
||||
final CallbackContext callbackContext) throws JSONException {
|
||||
public boolean execute(final String action, final JSONArray data, final CallbackContext callbackContext)
|
||||
throws JSONException {
|
||||
cordova.getThreadPool().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Method method = JPushPlugin.class.getDeclaredMethod(action,
|
||||
JSONArray.class, CallbackContext.class);
|
||||
Method method = JPushPlugin.class.getDeclaredMethod(action, JSONArray.class, CallbackContext.class);
|
||||
method.invoke(JPushPlugin.this, data, callbackContext);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.toString());
|
||||
@@ -264,6 +255,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
try {
|
||||
mode = data.getBoolean(0);
|
||||
JPushInterface.setDebugMode(mode);
|
||||
JLogger.setLoggerEnable(mode);
|
||||
callbackContext.success();
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
@@ -306,10 +298,10 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("error reading num json");
|
||||
return;
|
||||
}
|
||||
if (num != -1) {
|
||||
JPushInterface.setLatestNotificationNumber(
|
||||
mContext, num);
|
||||
JPushInterface.setLatestNotificationNumber(mContext, num);
|
||||
} else {
|
||||
callbackContext.error("error num");
|
||||
}
|
||||
@@ -375,6 +367,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.setAlias(mContext, sequence, alias);
|
||||
@@ -390,6 +383,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.deleteAlias(mContext, sequence);
|
||||
@@ -405,6 +399,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.getAlias(mContext, sequence);
|
||||
@@ -427,6 +422,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.setTags(mContext, sequence, tags);
|
||||
@@ -449,6 +445,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.addTags(mContext, sequence, tags);
|
||||
@@ -471,6 +468,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.deleteTags(mContext, sequence, tags);
|
||||
@@ -487,6 +485,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.cleanTags(mContext, sequence);
|
||||
@@ -503,6 +502,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.getAllTags(mContext, sequence);
|
||||
@@ -521,6 +521,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("Parameters error.");
|
||||
return;
|
||||
}
|
||||
|
||||
JPushInterface.checkTagBindState(mContext, sequence, tag);
|
||||
@@ -529,15 +530,18 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
|
||||
void getConnectionState(JSONArray data, CallbackContext callback) {
|
||||
boolean isConnected = JPushInterface.getConnectionState(cordovaActivity.getApplicationContext());
|
||||
callback.success(String.valueOf(isConnected));
|
||||
if (isConnected) {
|
||||
callback.success(1);
|
||||
} else {
|
||||
callback.success(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义通知行为,声音、震动、呼吸灯等。
|
||||
* 自定义通知行为,声音、震动、呼吸灯等。
|
||||
*/
|
||||
void setBasicPushNotificationBuilder(JSONArray data, CallbackContext callbackContext) {
|
||||
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(
|
||||
this.cordova.getActivity());
|
||||
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(this.cordova.getActivity());
|
||||
builder.developerArg0 = "Basic builder 1";
|
||||
JPushInterface.setPushNotificationBuilder(1, builder);
|
||||
JSONObject obj = new JSONObject();
|
||||
@@ -549,14 +553,12 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义推送通知栏样式,需要自己实现具体代码。
|
||||
* http://docs.jiguang.cn/client/android_tutorials/#_11
|
||||
* 自定义推送通知栏样式,需要自己实现具体代码。 http://docs.jiguang.cn/client/android_tutorials/#_11
|
||||
*/
|
||||
void setCustomPushNotificationBuilder(JSONArray data,
|
||||
CallbackContext callbackContext) {
|
||||
void setCustomPushNotificationBuilder(JSONArray data, CallbackContext callbackContext) {
|
||||
// CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(
|
||||
// this.cordova.getActivity(), R.layout.test_notification_layout,
|
||||
// R.id.icon, R.id.title, R.id.text);
|
||||
// this.cordova.getActivity(), R.layout.test_notification_layout,
|
||||
// R.id.icon, R.id.title, R.id.text);
|
||||
// JPushInterface.setPushNotificationBuilder(2, builder);
|
||||
// JPushInterface.setDefaultPushNotificationBuilder(builder);
|
||||
}
|
||||
@@ -614,8 +616,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置通知静默时间
|
||||
* http://docs.jpush.io/client/android_api/#api_5
|
||||
* 设置通知静默时间 http://docs.jpush.io/client/android_api/#api_5
|
||||
*/
|
||||
void setSilenceTime(JSONArray data, CallbackContext callbackContext) {
|
||||
try {
|
||||
@@ -631,14 +632,47 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
callbackContext.error("结束时间数值错误");
|
||||
return;
|
||||
}
|
||||
JPushInterface.setSilenceTime(this.cordova.getActivity(), startHour, startMinute,
|
||||
endHour, endMinute);
|
||||
JPushInterface.setSilenceTime(this.cordova.getActivity(), startHour, startMinute, endHour, endMinute);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
callbackContext.error("error: reading json data.");
|
||||
}
|
||||
}
|
||||
|
||||
void setGeofenceInterval(JSONArray data, CallbackContext callbackContext) throws JSONException {
|
||||
long interval = data.getLong(0);
|
||||
JPushInterface.setGeofenceInterval(this.cordova.getActivity(), interval);
|
||||
}
|
||||
|
||||
void setMaxGeofenceNumber(JSONArray data, CallbackContext callbackContext) throws JSONException {
|
||||
int maxNumber = data.getInt(0);
|
||||
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);
|
||||
}
|
||||
|
||||
private boolean isValidHour(int hour) {
|
||||
return !(hour < 0 || hour > 23);
|
||||
}
|
||||
@@ -666,8 +700,7 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
data.put("resultCode", code);
|
||||
data.put("tags", tags);
|
||||
data.put("alias", alias);
|
||||
final String jsEvent = String.format(
|
||||
"cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
|
||||
final String jsEvent = String.format("cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
|
||||
data.toString());
|
||||
cordova.getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
@@ -681,35 +714,43 @@ public class JPushPlugin extends CordovaPlugin {
|
||||
}
|
||||
};
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||
private boolean hasPermission(String appOpsServiceId) {
|
||||
|
||||
Context context = cordova.getActivity().getApplicationContext();
|
||||
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||
ApplicationInfo appInfo = context.getApplicationInfo();
|
||||
if (Build.VERSION.SDK_INT >= 24) {
|
||||
NotificationManager mNotificationManager = (NotificationManager) context
|
||||
.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
return mNotificationManager.areNotificationsEnabled();
|
||||
} else {
|
||||
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||
ApplicationInfo appInfo = context.getApplicationInfo();
|
||||
|
||||
String pkg = context.getPackageName();
|
||||
int uid = appInfo.uid;
|
||||
Class appOpsClazz;
|
||||
String pkg = context.getPackageName();
|
||||
int uid = appInfo.uid;
|
||||
Class appOpsClazz;
|
||||
|
||||
try {
|
||||
appOpsClazz = Class.forName(AppOpsManager.class.getName());
|
||||
Method checkOpNoThrowMethod = appOpsClazz.getMethod("checkOpNoThrow",
|
||||
Integer.TYPE, Integer.TYPE, String.class);
|
||||
Field opValue = appOpsClazz.getDeclaredField(appOpsServiceId);
|
||||
int value = opValue.getInt(Integer.class);
|
||||
Object result = checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
|
||||
return Integer.parseInt(result.toString()) == AppOpsManager.MODE_ALLOWED;
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
try {
|
||||
appOpsClazz = Class.forName(AppOpsManager.class.getName());
|
||||
Method checkOpNoThrowMethod = appOpsClazz.getMethod("checkOpNoThrow", Integer.TYPE, Integer.TYPE,
|
||||
String.class);
|
||||
Field opValue = appOpsClazz.getDeclaredField(appOpsServiceId);
|
||||
int value = opValue.getInt(Integer.class);
|
||||
Object result = checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
|
||||
return Integer.parseInt(result.toString()) == AppOpsManager.MODE_ALLOWED;
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,13 +13,8 @@ import cn.jpush.android.api.JPushInterface;
|
||||
|
||||
public class JPushReceiver extends BroadcastReceiver {
|
||||
|
||||
private static final List<String> IGNORED_EXTRAS_KEYS =
|
||||
Arrays.asList(
|
||||
"cn.jpush.android.TITLE",
|
||||
"cn.jpush.android.MESSAGE",
|
||||
"cn.jpush.android.APPKEY",
|
||||
"cn.jpush.android.NOTIFICATION_CONTENT_TITLE"
|
||||
);
|
||||
private static final List<String> IGNORED_EXTRAS_KEYS = Arrays.asList("cn.jpush.android.TITLE",
|
||||
"cn.jpush.android.MESSAGE", "cn.jpush.android.APPKEY", "cn.jpush.android.NOTIFICATION_CONTENT_TITLE","key_show_entity","platform");
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@@ -54,8 +49,7 @@ public class JPushReceiver extends BroadcastReceiver {
|
||||
|
||||
JPushPlugin.transmitNotificationOpen(title, alert, extras);
|
||||
|
||||
Intent launch = context.getPackageManager().getLaunchIntentForPackage(
|
||||
context.getPackageName());
|
||||
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);
|
||||
|
||||
6
src/android/PushService.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package cn.jiguang.cordova.push;
|
||||
|
||||
import cn.jpush.android.service.JCommonService;
|
||||
|
||||
public class PushService extends JCommonService {
|
||||
}
|
||||
BIN
src/android/libs/jpush-android-4.2.8.jar
Executable file
BIN
src/android/res/drawable-hdpi/jpush_ic_action_cancle.png
Executable file
|
After Width: | Height: | Size: 551 B |
BIN
src/android/res/drawable-hdpi/jpush_ic_action_close.png
Executable file
|
After Width: | Height: | Size: 591 B |
BIN
src/android/res/drawable-hdpi/jpush_ic_action_close2.png
Executable file
|
After Width: | Height: | Size: 759 B |
0
src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_back.png
Normal file → Executable file
|
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 695 B |
0
src/android/res/drawable-hdpi/jpush_ic_richpush_actionbar_divider.png
Normal file → Executable file
|
Before Width: | Height: | Size: 181 B After Width: | Height: | Size: 181 B |
0
src/android/res/drawable-hdpi/jpush_richpush_btn_selector.xml
Normal file → Executable file
0
src/android/res/drawable-hdpi/jpush_richpush_progressbar.xml
Normal file → Executable file
296
src/android/res/layout-v21/push_notification.xml
Executable 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>
|
||||
298
src/android/res/layout-v21/push_notification_large.xml
Executable 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>
|
||||
298
src/android/res/layout-v21/push_notification_middle.xml
Executable 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>
|
||||
85
src/android/res/layout/jpush_inapp_banner.xml
Executable 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>
|
||||
0
src/android/res/layout/jpush_popwin_layout.xml
Normal file → Executable file
0
src/android/res/layout/jpush_webview_layout.xml
Normal file → Executable file
297
src/android/res/layout/push_notification.xml
Executable 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>
|
||||
297
src/android/res/layout/push_notification_large.xml
Executable 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>
|
||||
297
src/android/res/layout/push_notification_middle.xml
Executable 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>
|
||||
@@ -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>
|
||||
7
src/android/res/values-zh/jpush_string.xml
Executable 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>
|
||||
8
src/android/res/values/jpush_string.xml
Executable 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>
|
||||
0
src/android/res/values/jpush_style.xml
Normal file → Executable file
@@ -40,7 +40,8 @@ NSDictionary *_launchOptions;
|
||||
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_receiveRegistrationId jsString:[event toJsonString]];
|
||||
}];
|
||||
|
||||
if (notification) {
|
||||
if (notification != nil &&
|
||||
[[UIDevice currentDevice].systemVersion floatValue] < 10.0) {// iOS 10 以后通过 openNotification 这个回调触发事件。
|
||||
if (notification.userInfo) {
|
||||
|
||||
if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
|
||||
@@ -50,27 +51,27 @@ NSDictionary *_launchOptions;
|
||||
|
||||
if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]) {
|
||||
UILocalNotification *localNotification = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
|
||||
|
||||
NSDictionary* localNotificationEvent = @{@"content":localNotification.alertBody,
|
||||
@"badge": @(localNotification.applicationIconBadgeNumber),
|
||||
@"extras":localNotification.userInfo,
|
||||
};
|
||||
NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
|
||||
localNotificationEvent[@"content"] = localNotification.alertBody;
|
||||
localNotificationEvent[@"badge"] = @(localNotification.applicationIconBadgeNumber);
|
||||
localNotificationEvent[@"extras"] = localNotification.userInfo;
|
||||
|
||||
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[localNotificationEvent toJsonString]];
|
||||
}
|
||||
}
|
||||
|
||||
[JPUSHService setDebugMode];
|
||||
|
||||
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
|
||||
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
|
||||
NSNumber *delay = [plistData valueForKey:JPushConfig_Delay];
|
||||
|
||||
_launchOptions = notification.userInfo;
|
||||
|
||||
if (![delay boolValue]) {
|
||||
[self startJPushSDK];
|
||||
}
|
||||
}
|
||||
|
||||
[JPUSHService setDebugMode];
|
||||
|
||||
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
|
||||
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
|
||||
NSNumber *delay = [plistData valueForKey:JPushConfig_Delay];
|
||||
|
||||
_launchOptions = notification.userInfo;
|
||||
|
||||
if (![delay boolValue]) {
|
||||
[self startJPushSDK];
|
||||
}
|
||||
}
|
||||
|
||||
-(void)startJPushSDK{
|
||||
@@ -136,17 +137,12 @@ NSDictionary *_launchOptions;
|
||||
[JPUSHService handleRemoteNotification:userInfo];
|
||||
NSString *eventName;
|
||||
switch ([UIApplication sharedApplication].applicationState) {
|
||||
case UIApplicationStateInactive:
|
||||
eventName = JPushDocumentEvent_OpenNotification;
|
||||
break;
|
||||
case UIApplicationStateActive:
|
||||
eventName = JPushDocumentEvent_ReceiveNotification;
|
||||
break;
|
||||
case UIApplicationStateBackground:
|
||||
eventName = JPushDocumentEvent_BackgroundNotification;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case UIApplicationStateBackground:
|
||||
eventName = JPushDocumentEvent_BackgroundNotification;
|
||||
break;
|
||||
default:
|
||||
eventName = JPushDocumentEvent_ReceiveNotification;
|
||||
break;
|
||||
}
|
||||
|
||||
[JPushPlugin fireDocumentEvent:eventName jsString:[[self jpushFormatAPNSDic:userInfo] toJsonString]];
|
||||
@@ -156,35 +152,39 @@ NSDictionary *_launchOptions;
|
||||
}
|
||||
|
||||
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
|
||||
NSMutableDictionary *userInfo = @[].mutableCopy;
|
||||
NSMutableDictionary *userInfo = @{}.mutableCopy;
|
||||
|
||||
if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
|
||||
userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
|
||||
} else {
|
||||
UNNotificationContent *content = notification.request.content;
|
||||
userInfo = [NSMutableDictionary dictionaryWithDictionary:@{@"content": content.body,
|
||||
@"badge": content.badge,
|
||||
@"extras": content.userInfo
|
||||
}];
|
||||
userInfo[@"content"] = content.body;
|
||||
userInfo[@"badge"] = content.badge;
|
||||
userInfo[@"extras"] = content.userInfo;
|
||||
userInfo[@"identifier"] = notification.request.identifier;
|
||||
}
|
||||
|
||||
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
|
||||
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
|
||||
|
||||
if ([userInfo[@"aps"][@"content-available"] isEqualToNumber:@(1)]) {// content-available 当用户开启后台推送是,防止触发两次事件
|
||||
return;
|
||||
}
|
||||
|
||||
[JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
|
||||
|
||||
}
|
||||
|
||||
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
|
||||
UNNotification *notification = response.notification;
|
||||
NSMutableDictionary *userInfo = nil;
|
||||
NSMutableDictionary *userInfo = @{}.mutableCopy;
|
||||
|
||||
if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
|
||||
userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
|
||||
} else {
|
||||
UNNotificationContent *content = notification.request.content;
|
||||
userInfo = [NSMutableDictionary dictionaryWithDictionary:@{@"content": content.body,
|
||||
@"badge": content.badge,
|
||||
@"extras": content.userInfo
|
||||
}];
|
||||
userInfo[@"content"] = content.body;
|
||||
userInfo[@"badge"] = content.badge;
|
||||
userInfo[@"extras"] = content.userInfo;
|
||||
userInfo[@"identifier"] = notification.request.identifier;
|
||||
}
|
||||
|
||||
@@ -193,12 +193,12 @@ NSDictionary *_launchOptions;
|
||||
}
|
||||
|
||||
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
|
||||
NSDictionary* localNotificationEvent = @{@"content":notification.alertBody,
|
||||
@"badge": @(notification.applicationIconBadgeNumber),
|
||||
@"extras":notification.userInfo,
|
||||
};
|
||||
NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
|
||||
localNotificationEvent[@"content"] = notification.alertBody;
|
||||
localNotificationEvent[@"badge"] = @(notification.applicationIconBadgeNumber);
|
||||
localNotificationEvent[@"extras"] = notification.userInfo;
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:localNotificationEvent];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:localNotificationEvent];
|
||||
}
|
||||
|
||||
- (void)applicationWillEnterForeground:(UIApplication *)application {
|
||||
|
||||
@@ -73,6 +73,9 @@ static NSMutableDictionary *_jpushEventCache;
|
||||
-(void)addDismissActions:(CDVInvokedUrlCommand*)command;
|
||||
-(void)addNotificationActions:(CDVInvokedUrlCommand*)command;
|
||||
|
||||
// 设置手机号
|
||||
-(void)setMobileNumber:(CDVInvokedUrlCommand*)command;
|
||||
|
||||
/*
|
||||
* 以下为js中可监听到的事件
|
||||
* jpush.openNotification 点击推送消息启动或唤醒app
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
#else
|
||||
|
||||
- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{
|
||||
- (CDVPlugin*)initWithWebView:(WKWebView*)theWebView{
|
||||
NSLog(@"### initWithWebView ");
|
||||
if (self=[super initWithWebView:theWebView]) {
|
||||
}
|
||||
@@ -395,13 +395,14 @@
|
||||
}
|
||||
|
||||
JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
|
||||
// 由于 不支持 0 作为传入参数,在传入参数基础上添加一个极小的时间于 android 端保持一致。
|
||||
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
|
||||
if (delay) {
|
||||
trigger.timeInterval = [delay doubleValue];
|
||||
trigger.timeInterval = [delay doubleValue] + 0.000001;
|
||||
}
|
||||
} else {
|
||||
if (delay) {
|
||||
trigger.fireDate = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] intValue]];
|
||||
trigger.fireDate = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] doubleValue] + 0.001];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -509,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{
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
|
||||
*/
|
||||
|
||||
#define JPUSH_VERSION_NUMBER 3.0.7
|
||||
#define JPUSH_VERSION_NUMBER 3.7.4
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@@ -20,11 +20,15 @@
|
||||
@class UNNotificationSettings;
|
||||
@class UNNotificationRequest;
|
||||
@class UNNotification;
|
||||
@class UIView;
|
||||
@protocol JPUSHRegisterDelegate;
|
||||
@protocol JPUSHGeofenceDelegate;
|
||||
@protocol JPushInMessageDelegate;
|
||||
|
||||
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 (^JPUSHInMssageCompletion)(NSInteger iResCode);
|
||||
|
||||
extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
|
||||
extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
|
||||
@@ -40,6 +44,29 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
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.
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSInteger,JPushInMessageContentType){
|
||||
JPushAdContentType = 1, //广告类型的inMessage
|
||||
JPushNotiContentType = 2, //通知类型的inMessage
|
||||
};
|
||||
|
||||
typedef NS_OPTIONS(NSUInteger, JPInMessageType) {
|
||||
JPInMessageTypeBanner = (1 << 0), // 横幅
|
||||
JPInMessageTypeModal = (1 << 1), // 模态
|
||||
JPInMessageTypeFloat = (1 << 2), // 小浮窗
|
||||
};
|
||||
|
||||
/*!
|
||||
@@ -72,6 +99,17 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
|
||||
@end
|
||||
|
||||
/*!
|
||||
* 推送通知声音实体类
|
||||
* iOS10以上有效
|
||||
*/
|
||||
@interface JPushNotificationSound : NSObject <NSCopying, NSCoding>
|
||||
@property (nonatomic, copy) NSString *soundName; //普通通知铃声
|
||||
@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
|
||||
@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1
|
||||
@end
|
||||
|
||||
|
||||
/*!
|
||||
* 推送内容实体类
|
||||
*/
|
||||
@@ -85,12 +123,17 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
@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) 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) 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.
|
||||
|
||||
@end
|
||||
|
||||
|
||||
/*!
|
||||
* 推送触发方式实体类
|
||||
* 注:dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值,如果同时传入值会根据优先级I、II、III使其中一种触发方式生效,fireDate为iOS10以下根据时间触发时须传入的参数
|
||||
@@ -127,12 +170,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
|
||||
@@ -142,7 +179,6 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
* @param channel 发布渠道. 可选.
|
||||
* @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES.
|
||||
* App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致.
|
||||
* @param advertisingIdentifier 广告标识符(IDFA) 如果不需要使用IDFA,传nil.
|
||||
*
|
||||
* @discussion 提供SDK启动必须的参数, 来启动 SDK.
|
||||
* 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
|
||||
@@ -152,7 +188,19 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
channel:(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:(NSDictionary *)launchingOption
|
||||
appKey:(NSString *)appKey
|
||||
channel:(NSString *)channel
|
||||
@@ -185,12 +233,38 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
|
||||
+ (void)registerDeviceToken:(NSData *)deviceToken;
|
||||
|
||||
|
||||
/*!
|
||||
* @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:(void (^)(JPAuthorizationStatus status))completion;
|
||||
|
||||
/*!
|
||||
* @abstract 跳转至系统设置页面,iOS8及以上有效
|
||||
*/
|
||||
+ (void)openSettingsForNotification:(void (^)(BOOL success))completionHandler NS_AVAILABLE_IOS(8_0);
|
||||
|
||||
/*!
|
||||
* Tags操作接口
|
||||
* 支持增加/覆盖/删除/清空/查询操作
|
||||
@@ -304,23 +378,26 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
* @abstract 开始记录页面停留
|
||||
*
|
||||
* @param pageName 页面名称
|
||||
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
|
||||
*/
|
||||
+ (void)startLogPageView:(NSString *)pageName;
|
||||
+ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
|
||||
|
||||
/*!
|
||||
* @abstract 停止记录页面停留
|
||||
*
|
||||
* @param pageName 页面
|
||||
* @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
|
||||
*/
|
||||
+ (void)stopLogPageView:(NSString *)pageName;
|
||||
+ (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;
|
||||
+ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期")));
|
||||
|
||||
/*!
|
||||
* @abstract 开启Crash日志收集
|
||||
@@ -347,6 +424,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:(NSDictionary *)launchOptions;
|
||||
|
||||
/**
|
||||
删除地理围栏
|
||||
|
||||
@param geofenceId 地理围栏id
|
||||
*/
|
||||
+ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId;
|
||||
|
||||
///----------------------------------------------------
|
||||
/// @name Local Notification 本地通知
|
||||
@@ -375,7 +479,7 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
* @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)返回相应对象数组。
|
||||
* @param identifier JPushNotificationIdentifier类型,iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier.delivered属性无效,identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果,通过(NSArray *results)返回相应对象数组。
|
||||
* @discussion 旧的查找推送接口被废弃,使用此接口可以替换
|
||||
*
|
||||
*/
|
||||
@@ -493,6 +597,20 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
*/
|
||||
+ (void)resetBadge;
|
||||
|
||||
///----------------------------------------------------
|
||||
/// @name Other Feature 其他功能
|
||||
///----------------------------------------------------
|
||||
|
||||
/*!
|
||||
* @abstract 设置手机号码(到服务器)
|
||||
*
|
||||
* @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码
|
||||
* @param completion 响应回调。成功则error为空,失败则error带有错误码及错误信息
|
||||
*
|
||||
* @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。
|
||||
*
|
||||
*/
|
||||
+ (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion;
|
||||
|
||||
///----------------------------------------------------
|
||||
/// @name Logs and others 日志与其他
|
||||
@@ -536,6 +654,103 @@ typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
|
||||
*/
|
||||
+ (void)setLogOFF;
|
||||
|
||||
/*!
|
||||
* @abstract 设置SDK地理位置权限开关
|
||||
*
|
||||
* @discussion 关闭地理位置之后,SDK地理围栏的相关功能将受到影响,默认是开启。
|
||||
*
|
||||
*/
|
||||
+ (void)setLocationEanable:(BOOL)isEanble;
|
||||
|
||||
/*!
|
||||
* @abstract 设置应用内消息的代理
|
||||
*
|
||||
* @discussion 遵守JPushInMessageDelegate的代理对象
|
||||
*
|
||||
*/
|
||||
+ (void)setInMessageDelegate:(id<JPushInMessageDelegate>)inMessageDelegate;
|
||||
|
||||
/*!
|
||||
* @abstract 设置应用内消息的inMessageView的父控件
|
||||
*
|
||||
* @discussion 建议设置成当前展示的window,SDK默认取当前APP顶层的Window。
|
||||
*
|
||||
*/
|
||||
+ (void)setInMessageSuperView:(UIView *)view;
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 主动拉取应用内消息的接口
|
||||
*
|
||||
* @discussion 拉取结果的回调
|
||||
*
|
||||
*/
|
||||
+ (void)pullInMessageCompletion:(JPUSHInMssageCompletion)completion __attribute__((deprecated("JPush 3.7.0 版本已过期")));
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 主动拉取应用内消息的接口
|
||||
*
|
||||
* @param types 应用内消息样式
|
||||
*
|
||||
* @discussion 拉取结果的回调
|
||||
*/
|
||||
+ (void)pullInMessageWithTypes:(NSUInteger)types completion:(JPUSHInMssageCompletion)completion __attribute__((deprecated("JPush 3.7.0 版本已过期")));
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 主动拉取应用内消息的接口
|
||||
*
|
||||
* @param adPosition 广告位
|
||||
*
|
||||
* @discussion 拉取结果的回调
|
||||
*/
|
||||
+ (void)pullInMessageWithAdPosition:(NSString *)adPosition completion:(JPUSHInMssageCompletion)completion;
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 主动拉取应用内消息的接口
|
||||
*
|
||||
* @param params 拉取条件 可传参数: @"adPosition" -> 广告位 NSString, @"event" -> 事件 NSString
|
||||
*
|
||||
* @discussion 拉取结果的回调
|
||||
*/
|
||||
+ (void)pullInMessageWithParams:(NSDictionary *)params completion:(JPUSHInMssageCompletion)completion;
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 通过事件触发应用内消息下发
|
||||
*
|
||||
* @param event 事件
|
||||
*
|
||||
*/
|
||||
+ (void)triggerInMessageByEvent:(NSString *)event;
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 在页面切换的时候调用,告诉sdk当前切换到的页面名称
|
||||
*
|
||||
* @param className 当前页面的类名
|
||||
*
|
||||
* @discussion
|
||||
通过定向页面触发应用内消息下发的功能、页面跳转到黑名单页面隐藏正在曝光中的inapp的功能、inapp页面延迟展示功能都依赖于该接口调用。
|
||||
请在页面切换的时候调用此方法。确保在所有页面的viewDidAppear中调用此方法。不然可能会造成inapp部分功能不完善。建议在viewController的基类中调用,或者使用method swizzling方法交换viewController的viewDidAppear方法。
|
||||
*
|
||||
*/
|
||||
+ (void)currentViewControllerName:(NSString *)className;
|
||||
|
||||
|
||||
/*!
|
||||
* @abstract 通过定向页面触发应用内消息下发
|
||||
*
|
||||
* @param pageName 当前页面的类名
|
||||
*
|
||||
* @discussion 请在页面切换的时候调用此方法。确保在所有页面的viewDidAppear中调用此方法。不然可能会造成该功能不完善。建议在viewController的基类中调用,或者使用method swizzling方法交换viewController的viewDidAppear方法。
|
||||
*
|
||||
*/
|
||||
+ (void)triggerInMessageByPageChange:(NSString *)pageName __attribute__((deprecated("JPush 3.7.4 版本已过期")));
|
||||
|
||||
|
||||
|
||||
///----------------------------------------------------
|
||||
///********************下列方法已过期********************
|
||||
@@ -590,6 +805,96 @@ 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:(UNNotification *)notification NS_AVAILABLE_IOS(12.0);
|
||||
|
||||
/**
|
||||
* 监测通知授权状态返回的结果
|
||||
* @param status 授权通知状态,详见JPAuthorizationStatus
|
||||
* @param info 更多信息,预留参数
|
||||
*/
|
||||
- (void)jpushNotificationAuthorization:(JPAuthorizationStatus)status withInfo:(NSDictionary *)info;
|
||||
|
||||
@end
|
||||
|
||||
@protocol JPUSHGeofenceDelegate <NSObject>
|
||||
/**
|
||||
触发地理围栏
|
||||
@param geofence 地理围栏触发时返回的信息
|
||||
@param error 错误信息
|
||||
*/
|
||||
- (void)jpushGeofenceRegion:(NSDictionary *)geofence
|
||||
error:(NSError *)error;
|
||||
|
||||
/**
|
||||
拉取地理围栏列表的回调
|
||||
|
||||
@param geofenceList 地理围栏列表
|
||||
*/
|
||||
- (void)jpushCallbackGeofenceReceived:(NSArray<NSDictionary*> *)geofenceList;
|
||||
|
||||
/**
|
||||
进入地理围栏区域
|
||||
|
||||
@param geofenceId 地理围栏id
|
||||
@param userInfo 地理围栏触发时返回的信息
|
||||
@param error 错误信息
|
||||
*/
|
||||
- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didEnterRegion:(NSDictionary *)userInfo error:(NSError *)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
|
||||
|
||||
/**
|
||||
离开地理围栏区域
|
||||
|
||||
@param geofenceId 地理围栏id
|
||||
@param userInfo 地理围栏触发时返回的信息
|
||||
@param error 错误信息
|
||||
*/
|
||||
- (void)jpushGeofenceIdentifer:(NSString *)geofenceId didExitRegion:(NSDictionary *)userInfo error:(NSError *)error __attribute__((deprecated("JPush 3.6.0 版本已过期")));
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@protocol JPushInMessageDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
/**
|
||||
*是否允许应用内消息弹出,默认为允许
|
||||
*/
|
||||
- (BOOL)jPushInMessageIsAllowedInMessagePop;
|
||||
|
||||
/**
|
||||
*应用内消息展示的回调
|
||||
*/
|
||||
- (void)jPushInMessageAlreadyPop __attribute__((deprecated("JPush 3.4.0 版本已过期")));
|
||||
|
||||
/**
|
||||
*应用内消息已消失
|
||||
*/
|
||||
- (void)jPushInMessageAlreadyDisappear;
|
||||
|
||||
|
||||
/**
|
||||
inMessage展示的回调
|
||||
|
||||
@param messageType inMessage
|
||||
@param content 下发的数据,广告类的返回数据为空时返回的信息
|
||||
|
||||
*/
|
||||
- (void)jPushInMessageAlreadyPopInMessageType:(JPushInMessageContentType)messageType Content:(NSDictionary *)content;
|
||||
|
||||
/**
|
||||
inMessage点击的回调
|
||||
|
||||
@param messageType inMessage
|
||||
@param content 下发的数据,广告类的返回数据为空时返回的信息
|
||||
|
||||
*/
|
||||
- (void)jpushInMessagedidClickInMessageType:(JPushInMessageContentType)messageType Content:(NSDictionary *)content;
|
||||
|
||||
@end
|
||||
|
||||
BIN
src/ios/lib/jpush-ios-3.7.4.a
Executable file
@@ -1,157 +1,211 @@
|
||||
var JPushPlugin = function () {}
|
||||
var JPushPlugin = function() {};
|
||||
|
||||
// private plugin function
|
||||
|
||||
JPushPlugin.prototype.receiveMessage = {}
|
||||
JPushPlugin.prototype.openNotification = {}
|
||||
JPushPlugin.prototype.receiveNotification = {}
|
||||
JPushPlugin.prototype.receiveMessage = {};
|
||||
JPushPlugin.prototype.openNotification = {};
|
||||
JPushPlugin.prototype.receiveNotification = {};
|
||||
|
||||
JPushPlugin.prototype.isPlatformIOS = function () {
|
||||
return (device.platform === 'iPhone' ||
|
||||
device.platform === 'iPad' ||
|
||||
device.platform === 'iPod touch' ||
|
||||
device.platform === 'iOS')
|
||||
}
|
||||
JPushPlugin.prototype.isPlatformIOS = function() {
|
||||
return (
|
||||
device.platform === "iPhone" ||
|
||||
device.platform === "iPad" ||
|
||||
device.platform === "iPod touch" ||
|
||||
device.platform === "iOS"
|
||||
);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.errorCallback = function (msg) {
|
||||
console.log('JPush Callback Error: ' + msg)
|
||||
}
|
||||
JPushPlugin.prototype.errorCallback = function(msg) {
|
||||
console.log("JPush Callback Error: " + msg);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.callNative = function (name, args, successCallback, errorCallback) {
|
||||
JPushPlugin.prototype.callNative = function(
|
||||
name,
|
||||
args,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
if (errorCallback) {
|
||||
cordova.exec(successCallback, errorCallback, 'JPushPlugin', name, args)
|
||||
cordova.exec(successCallback, errorCallback, "JPushPlugin", name, args);
|
||||
} else {
|
||||
cordova.exec(successCallback, this.errorCallback, 'JPushPlugin', name, args)
|
||||
cordova.exec(
|
||||
successCallback,
|
||||
this.errorCallback,
|
||||
"JPushPlugin",
|
||||
name,
|
||||
args
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Common methods
|
||||
JPushPlugin.prototype.init = function () {
|
||||
JPushPlugin.prototype.init = function() {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('initial', [], null)
|
||||
this.callNative("initial", [], null);
|
||||
} else {
|
||||
this.callNative('init', [], null)
|
||||
this.callNative("init", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setDebugMode = function (mode) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('setDebugMode', [mode], null)
|
||||
JPushPlugin.prototype.setDebugMode = function(mode) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setDebugMode", [mode], null);
|
||||
} else {
|
||||
if (mode === true) {
|
||||
this.setDebugModeFromIos()
|
||||
this.setDebugModeFromIos();
|
||||
} else {
|
||||
this.setLogOFF()
|
||||
this.setLogOFF();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.getRegistrationID = function (successCallback) {
|
||||
this.callNative('getRegistrationID', [], successCallback)
|
||||
}
|
||||
JPushPlugin.prototype.getRegistrationID = function(successCallback) {
|
||||
this.callNative("getRegistrationID", [], successCallback);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.stopPush = function () {
|
||||
this.callNative('stopPush', [], null)
|
||||
}
|
||||
JPushPlugin.prototype.stopPush = function() {
|
||||
this.callNative("stopPush", [], null);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.resumePush = function () {
|
||||
this.callNative('resumePush', [], null)
|
||||
}
|
||||
JPushPlugin.prototype.resumePush = function() {
|
||||
this.callNative("resumePush", [], null);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.isPushStopped = function (successCallback) {
|
||||
this.callNative('isPushStopped', [], successCallback)
|
||||
}
|
||||
JPushPlugin.prototype.isPushStopped = function(successCallback) {
|
||||
this.callNative("isPushStopped", [], successCallback);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.clearLocalNotifications = function () {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('clearLocalNotifications', [], null)
|
||||
JPushPlugin.prototype.clearLocalNotifications = function() {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("clearLocalNotifications", [], null);
|
||||
} else {
|
||||
this.clearAllLocalNotifications()
|
||||
this.clearAllLocalNotifications();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置标签。
|
||||
* 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
|
||||
*/
|
||||
JPushPlugin.prototype.setTags = function (params, successCallback, errorCallback) {
|
||||
this.callNative('setTags', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.setTags = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("setTags", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增标签。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
|
||||
*/
|
||||
JPushPlugin.prototype.addTags = function (params, successCallback, errorCallback) {
|
||||
this.callNative('addTags', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.addTags = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("addTags", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除指定标签。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
|
||||
*/
|
||||
JPushPlugin.prototype.deleteTags = function (params, successCallback, errorCallback) {
|
||||
this.callNative('deleteTags', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.deleteTags = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("deleteTags", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 清除所有标签。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number }
|
||||
*/
|
||||
JPushPlugin.prototype.cleanTags = function (params, successCallback, errorCallback) {
|
||||
this.callNative('cleanTags', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.cleanTags = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("cleanTags", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询所有标签。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number }
|
||||
*/
|
||||
JPushPlugin.prototype.getAllTags = function (params, successCallback, errorCallback) {
|
||||
this.callNative('getAllTags', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.getAllTags = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("getAllTags", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询指定标签与当前用户的绑定状态。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number, 'tag': string }
|
||||
*/
|
||||
JPushPlugin.prototype.checkTagBindState = function (params, successCallback, errorCallback) {
|
||||
this.callNative('checkTagBindState', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.checkTagBindState = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative(
|
||||
"checkTagBindState",
|
||||
[params],
|
||||
successCallback,
|
||||
errorCallback
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置别名。
|
||||
* 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number, 'alias': string }
|
||||
*/
|
||||
JPushPlugin.prototype.setAlias = function (params, successCallback, errorCallback) {
|
||||
this.callNative('setAlias', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.setAlias = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("setAlias", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除别名。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number }
|
||||
*/
|
||||
JPushPlugin.prototype.deleteAlias = function (params, successCallback, errorCallback) {
|
||||
this.callNative('deleteAlias', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.deleteAlias = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("deleteAlias", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询当前绑定的别名。
|
||||
*
|
||||
*
|
||||
* @param params = { 'sequence': number }
|
||||
*/
|
||||
JPushPlugin.prototype.getAlias = function (params, successCallback, errorCallback) {
|
||||
this.callNative('getAlias', [params], successCallback, errorCallback)
|
||||
}
|
||||
JPushPlugin.prototype.getAlias = function(
|
||||
params,
|
||||
successCallback,
|
||||
errorCallback
|
||||
) {
|
||||
this.callNative("getAlias", [params], successCallback, errorCallback);
|
||||
};
|
||||
|
||||
// 判断系统设置中是否对本应用启用通知。
|
||||
// iOS: 返回值如果大于 0,代表通知开启;0: 通知关闭。
|
||||
@@ -161,224 +215,293 @@ JPushPlugin.prototype.getAlias = function (params, successCallback, errorCallbac
|
||||
// UIRemoteNotificationTypeAlert = 1 << 2,
|
||||
// UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,
|
||||
// Android: 返回值 1 代表通知启用;0: 通知关闭。
|
||||
JPushPlugin.prototype.getUserNotificationSettings = function (successCallback) {
|
||||
JPushPlugin.prototype.getUserNotificationSettings = function(successCallback) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('getUserNotificationSettings', [], successCallback)
|
||||
} else if (device.platform === 'Android') {
|
||||
this.callNative('areNotificationEnabled', [], successCallback)
|
||||
this.callNative("getUserNotificationSettings", [], successCallback);
|
||||
} else if (device.platform === "Android") {
|
||||
this.callNative("areNotificationEnabled", [], successCallback);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// iOS methods
|
||||
|
||||
JPushPlugin.prototype.startJPushSDK = function () {
|
||||
this.callNative('startJPushSDK', [], null)
|
||||
}
|
||||
JPushPlugin.prototype.startJPushSDK = function() {
|
||||
this.callNative("startJPushSDK", [], null);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setBadge = function (value) {
|
||||
JPushPlugin.prototype.setBadge = function(value) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('setBadge', [value], null)
|
||||
this.callNative("setBadge", [value], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.resetBadge = function () {
|
||||
JPushPlugin.prototype.resetBadge = function() {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('resetBadge', [], null)
|
||||
this.callNative("resetBadge", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setDebugModeFromIos = function () {
|
||||
JPushPlugin.prototype.setDebugModeFromIos = function() {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('setDebugModeFromIos', [], null)
|
||||
this.callNative("setDebugModeFromIos", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setLogOFF = function () {
|
||||
JPushPlugin.prototype.setLogOFF = function() {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('setLogOFF', [], null)
|
||||
this.callNative("setLogOFF", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setCrashLogON = function () {
|
||||
JPushPlugin.prototype.setCrashLogON = function() {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('crashLogON', [], null)
|
||||
this.callNative("crashLogON", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.addLocalNotificationForIOS = function (delayTime, content,
|
||||
badge, notificationID, extras) {
|
||||
JPushPlugin.prototype.addLocalNotificationForIOS = function(
|
||||
delayTime,
|
||||
content,
|
||||
badge,
|
||||
notificationID,
|
||||
extras
|
||||
) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('setLocalNotification', [delayTime, content, badge, notificationID, extras], null)
|
||||
this.callNative(
|
||||
"setLocalNotification",
|
||||
[delayTime, content, badge, notificationID, extras],
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function (identifierKey) {
|
||||
JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function(
|
||||
identifierKey
|
||||
) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('deleteLocalNotificationWithIdentifierKey', [identifierKey], null)
|
||||
this.callNative(
|
||||
"deleteLocalNotificationWithIdentifierKey",
|
||||
[identifierKey],
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.clearAllLocalNotifications = function () {
|
||||
JPushPlugin.prototype.clearAllLocalNotifications = function() {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('clearAllLocalNotifications', [], null)
|
||||
this.callNative("clearAllLocalNotifications", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setLocation = function (latitude, longitude) {
|
||||
JPushPlugin.prototype.setLocation = function(latitude, longitude) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('setLocation', [latitude, longitude], null)
|
||||
this.callNative("setLocation", [latitude, longitude], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.startLogPageView = function (pageName) {
|
||||
JPushPlugin.prototype.startLogPageView = function(pageName) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('startLogPageView', [pageName], null)
|
||||
this.callNative("startLogPageView", [pageName], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.stopLogPageView = function (pageName) {
|
||||
JPushPlugin.prototype.stopLogPageView = function(pageName) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('stopLogPageView', [pageName], null)
|
||||
this.callNative("stopLogPageView", [pageName], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.beginLogPageView = function (pageName, duration) {
|
||||
JPushPlugin.prototype.beginLogPageView = function(pageName, duration) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('beginLogPageView', [pageName, duration], null)
|
||||
this.callNative("beginLogPageView", [pageName, duration], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setApplicationIconBadgeNumber = function (badge) {
|
||||
JPushPlugin.prototype.setApplicationIconBadgeNumber = function(badge) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('setApplicationIconBadgeNumber', [badge], null)
|
||||
this.callNative("setApplicationIconBadgeNumber", [badge], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.getApplicationIconBadgeNumber = function (callback) {
|
||||
JPushPlugin.prototype.getApplicationIconBadgeNumber = function(callback) {
|
||||
if (this.isPlatformIOS()) {
|
||||
this.callNative('getApplicationIconBadgeNumber', [], callback)
|
||||
this.callNative("getApplicationIconBadgeNumber", [], callback);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.addDismissActions = function (actions, categoryId) {
|
||||
this.callNative('addDismissActions', [actions, categoryId])
|
||||
}
|
||||
JPushPlugin.prototype.addDismissActions = function(actions, categoryId) {
|
||||
this.callNative("addDismissActions", [actions, categoryId]);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.addNotificationActions = function (actions, categoryId) {
|
||||
this.callNative('addNotificationActions', [actions, categoryId])
|
||||
}
|
||||
JPushPlugin.prototype.addNotificationActions = function(actions, categoryId) {
|
||||
this.callNative("addNotificationActions", [actions, categoryId]);
|
||||
};
|
||||
|
||||
// Android methods
|
||||
JPushPlugin.prototype.getConnectionState = function (successCallback) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('getConnectionState', [], successCallback)
|
||||
JPushPlugin.prototype.getConnectionState = function(successCallback) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("getConnectionState", [], successCallback);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setBasicPushNotificationBuilder = function () {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('setBasicPushNotificationBuilder', [], null)
|
||||
JPushPlugin.prototype.setBasicPushNotificationBuilder = function() {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setBasicPushNotificationBuilder", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setCustomPushNotificationBuilder = function () {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('setCustomPushNotificationBuilder', [], null)
|
||||
JPushPlugin.prototype.setCustomPushNotificationBuilder = function() {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setCustomPushNotificationBuilder", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function (data) {
|
||||
if (device.platform === 'Android') {
|
||||
data = JSON.stringify(data)
|
||||
var event = JSON.parse(data)
|
||||
cordova.fireDocumentEvent('jpush.receiveRegistrationId', event)
|
||||
JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function(data) {
|
||||
if (device.platform === "Android") {
|
||||
data = JSON.stringify(data);
|
||||
var event = JSON.parse(data);
|
||||
cordova.fireDocumentEvent("jpush.receiveRegistrationId", event);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) {
|
||||
data = JSON.stringify(data)
|
||||
this.receiveMessage = JSON.parse(data)
|
||||
cordova.fireDocumentEvent('jpush.receiveMessage', this.receiveMessage)
|
||||
}
|
||||
JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) {
|
||||
data = JSON.stringify(data);
|
||||
this.receiveMessage = JSON.parse(data);
|
||||
cordova.fireDocumentEvent("jpush.receiveMessage", this.receiveMessage);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.openNotificationInAndroidCallback = function (data) {
|
||||
data = JSON.stringify(data)
|
||||
this.openNotification = JSON.parse(data)
|
||||
cordova.fireDocumentEvent('jpush.openNotification', this.openNotification)
|
||||
}
|
||||
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
|
||||
data = JSON.stringify(data);
|
||||
this.openNotification = JSON.parse(data);
|
||||
cordova.fireDocumentEvent("jpush.openNotification", this.openNotification);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function (data) {
|
||||
data = JSON.stringify(data)
|
||||
this.receiveNotification = JSON.parse(data)
|
||||
cordova.fireDocumentEvent('jpush.receiveNotification', this.receiveNotification)
|
||||
}
|
||||
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data) {
|
||||
data = JSON.stringify(data);
|
||||
this.receiveNotification = JSON.parse(data);
|
||||
cordova.fireDocumentEvent(
|
||||
"jpush.receiveNotification",
|
||||
this.receiveNotification
|
||||
);
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.clearAllNotification = function () {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('clearAllNotification', [], null)
|
||||
JPushPlugin.prototype.clearAllNotification = function() {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("clearAllNotification", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.clearNotificationById = function (id) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('clearNotificationById', [id], null)
|
||||
JPushPlugin.prototype.clearNotificationById = function(id) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("clearNotificationById", [id], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setLatestNotificationNum = function (num) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('setLatestNotificationNum', [num], null)
|
||||
JPushPlugin.prototype.setLatestNotificationNum = function(num) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setLatestNotificationNum", [num], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.addLocalNotification = function (builderId, content, title,
|
||||
notificationID, broadcastTime, extras) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('addLocalNotification',
|
||||
[builderId, content, title, notificationID, broadcastTime, extras], null)
|
||||
JPushPlugin.prototype.addLocalNotification = function(
|
||||
builderId,
|
||||
content,
|
||||
title,
|
||||
notificationID,
|
||||
broadcastTime,
|
||||
extras
|
||||
) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative(
|
||||
"addLocalNotification",
|
||||
[builderId, content, title, notificationID, broadcastTime, extras],
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.removeLocalNotification = function (notificationID) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('removeLocalNotification', [notificationID], null)
|
||||
JPushPlugin.prototype.removeLocalNotification = function(notificationID) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("removeLocalNotification", [notificationID], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.reportNotificationOpened = function (msgID) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('reportNotificationOpened', [msgID], null)
|
||||
JPushPlugin.prototype.reportNotificationOpened = function(msgID) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("reportNotificationOpened", [msgID], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 用于在 Android 6.0 及以上系统,申请一些权限
|
||||
* 具体可看:http://docs.jpush.io/client/android_api/#android-60
|
||||
*/
|
||||
JPushPlugin.prototype.requestPermission = function () {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('requestPermission', [], null)
|
||||
JPushPlugin.prototype.requestPermission = function() {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("requestPermission", [], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setSilenceTime = function (startHour, startMinute, endHour, endMinute) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('setSilenceTime', [startHour, startMinute, endHour, endMinute], null)
|
||||
JPushPlugin.prototype.setSilenceTime = function(
|
||||
startHour,
|
||||
startMinute,
|
||||
endHour,
|
||||
endMinute
|
||||
) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative(
|
||||
"setSilenceTime",
|
||||
[startHour, startMinute, endHour, endMinute],
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setPushTime = function (weekdays, startHour, endHour) {
|
||||
if (device.platform === 'Android') {
|
||||
this.callNative('setPushTime', [weekdays, startHour, endHour], null)
|
||||
JPushPlugin.prototype.setPushTime = function(weekdays, startHour, endHour) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setPushTime", [weekdays, startHour, endHour], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setGeofenceInterval = function(interval) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setGeofenceInterval", [interval], null);
|
||||
}
|
||||
};
|
||||
|
||||
JPushPlugin.prototype.setMaxGeofenceNumber = function(maxNumber) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setMaxGeofenceNumber", [maxNumber], null);
|
||||
}
|
||||
};
|
||||
|
||||
//设置角标
|
||||
JPushPlugin.prototype.setBadgeNumber = function(badgeNumb) {
|
||||
if (device.platform === "Android") {
|
||||
this.callNative("setBadgeNumber", [badgeNumb], 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 = {}
|
||||
window.plugins = {};
|
||||
}
|
||||
|
||||
if (!window.plugins.jPushPlugin) {
|
||||
window.plugins.jPushPlugin = new JPushPlugin()
|
||||
window.plugins.jPushPlugin = new JPushPlugin();
|
||||
}
|
||||
|
||||
module.exports = new JPushPlugin()
|
||||
module.exports = new JPushPlugin();
|
||||
|
||||