Compare commits

..

6 Commits

26 changed files with 430 additions and 2142 deletions

View File

@@ -0,0 +1,150 @@
# 更新 SDK
根据**输入的需要更新的 SDK 版本号**,同时更新本插件的 **iOS****Android** 依赖。本插件 Android 使用 Maven 集成、iOS 使用 CocoaPods 集成,无需下载或替换本地 SDK 包,只需在 `plugin.xml` 中修改两端的依赖版本号。
## 输入
执行本命令时请提供**目标 SDK 版本号**(如 `5.9.1``6.0.0`)。该版本号将用于:
- **iOS**CocoaPods 的 JPush pod 版本(`plugin.xml` 中的 `spec`
- **Android**Maven 的 `cn.jiguang.sdk:jpush` 版本(`plugin.xml` 中的 `framework src`
若 iOS 与 Android 官方发布的版本号不一致请分别说明「iOS 目标版本」与「Android 目标版本」。
## 更新步骤
### 1. 更新 iOS SDK 版本CocoaPods
根据输入的版本号,在 `plugin.xml` 的 iOS 平台下修改 `<pod name="JPush" spec="..." />` 中的版本号。
**位置**:约第 5155 行,`<podspec><pods>` 内。
**示例**
```xml
<!-- 固定版本,如 6.0.0、6.0.1 -->
<pod name="JPush" spec="6.0.0" />
```
**说明**CocoaPods 上 JPush 官方 pod 的版本以 [CocoaPods JPush](https://cocoapods.org/pods/jpush) 为准。修改后执行 `cordova build ios` 或进入 `platforms/ios` 执行 `pod install` 即可拉取对应版本。
### 2. 更新 Android SDK 版本Maven
根据输入的版本号,在 `plugin.xml` 的 Android 平台下修改 `<framework src="cn.jiguang.sdk:jpush:x.x.x" />` 中的版本号。
**位置**:约第 252253 行。
**示例**
```xml
<!-- 更新为 5.9.1 -->
<framework src="cn.jiguang.sdk:jpush:5.9.1" />
```
**说明**:依赖从 Maven Central 拉取,无需替换本地 jar。修改后执行 `cordova build android` 即可使用新版本。
### 3. 查找 SDK 新增 API
**⚠️ 重要:必须逐项查看更新日志,不要因为看到「更新各厂商 SDK」等描述就跳过新增 API 的检查。**
执行本步时按文末「文档内容获取方式」获取下方更新日志页面的内容,逐条阅读,不要仅依赖网页搜索。
#### Android SDK
- 访问 [极光推送 Android SDK 更新日志](https://docs.jiguang.cn/jpush/jpush_changelog/updates_Android) 查找目标版本的新增对外 API。
- **检查方法**
1. 找到目标版本(如 5.9.0)的更新内容。
2. **逐条阅读**每一条,不要跳过。
3. 重点看包含「新增」「新增接口」「新增 API」「新增方法」或 Java 方法签名的条目。
4. 对每个疑似新增 API记录方法名、完整方法签名、功能说明。
- 在 [Android SDK API 文档](https://docs.jiguang.cn/jpush/client/Android/android_api) 中确认用法、参数和示例。
#### iOS SDK
- 访问 [极光推送 iOS SDK 更新说明](https://docs.jiguang.cn/jpush/jpush_changelog/updates_iOS) 查找目标版本的新增对外 API。
- **检查方法**
1. 找到目标版本的更新内容。
2. **逐条阅读**每一条。
3. 重点看包含「新增」「新增接口」「新增 API」或 Objective-C 方法签名的条目。
4. 对每个疑似新增 API记录方法名、完整方法签名、功能说明。
- 在 [iOS SDK API 文档](https://docs.jiguang.cn/jpush/client/iOS/ios_api) 中确认用法、参数和示例。
**检查清单**(完成后勾选):
- [ ] 已找到目标版本的更新日志
- [ ] 已逐条阅读所有更新内容(含次要更新)
- [ ] 已识别所有含「新增」「API」「接口」「方法」等的条目
- [ ] 已记录所有新增 API 的方法名和签名
- [ ] 已在对应平台 API 文档中确认每个新增 API 的用法
- [ ] 已区分「需在插件中封装的对外 API」与「仅内部实现、无需封装」的更新
**常见误区**
- ❌ 看到「更新各厂商 SDK」就认为没有新增 API → ✅ 仍要逐条检查
- ❌ 只扫一眼主要更新 → ✅ 必须逐条检查
- ❌ 靠搜索判断有没有新增 API → ✅ 以官方更新日志为准
- ❌ 文档有缺字/错字时直接忽略 → ✅ 需到官方文档核实
### 4. 封装新增 API如有
**⚠️ 若无新增 API需明确写「经检查该版本无新增对外 API」再跳过本步。**
若有新增 API需在插件中封装
-`www/JPushPlugin.js` 中增加 JavaScript 接口
-`src/android/JPushPlugin.java` 中实现 Android 逻辑
-`src/ios/Plugins/JPushPlugin.m``AppDelegate+JPush.m` 中实现 iOS 逻辑
**封装原则**
- Android 与 iOS 为同一功能时,封装为一个插件方法
- 不同功能分别封装
- **直接调用 SDK API不要用反射**
- 若无新增 API**必须写明「已检查并确认无新增 API」后跳过**
**封装步骤**
1. 确认 API 的完整签名与参数类型
2. 确认调用时机(是否需在 init 之前调用)
3. 在对应平台实现
4. 在 JS 层增加方法,风格与现有 API 一致
5. 补充必要的错误处理与日志
### 5. 更新 API 文档
若新增了插件方法,需更新文档:
- `doc/Common_detail_api.md`:通用或跨平台方法
- `doc/Android_detail_api.md`:仅 Android 方法
- `doc/iOS_API.md`:仅 iOS 方法
若无新增方法,跳过此步。
### 6. 在 example/index.html 中添加示例(若有新增 API
**若有新增插件方法**,需在示例工程中增加可操作示例,便于开发者验证与参考:
-`example/index.html` 中为每个新增 API 增加:
1. **按钮**:在合适位置的 `<div data-role="fieldcontain">` 中增加 `<input type="button" id="xxx" value="Xxx" />`id 与 API 含义对应)。
2. **点击逻辑**:在 `initiateUI` 内用 `$("#xxx").click(...)` 调用 `window.JPush.新方法(...)`,在回调中用 `alert``$("#某结果区").html(...)` 展示结果。
3. 若有结果展示,可复用已有结果区域或新增 `<label id="xxxResult">` 等。
风格与现有示例保持一致(如 setTags、getAlias、setMobileNumber 等),便于用户对照文档在真机/模拟器上点击验证。
若无新增方法,跳过此步。
### 7. 更新插件版本号
**⚠️ 重要:`plugin.xml``package.json` 中的版本号需一致。**
本插件版本号与 **Android SDK 版本号** 对齐(如 SDK 5.9.0 → 插件 5.9.0)。
-`plugin.xml` 根节点 `version` 中更新版本号(约第 5 行)
-`package.json``version` 中更新为相同版本号
**示例**
- 当前插件版本5.9.0,本次升级 Android SDK 到 5.9.1 → 插件版本改为 **5.9.1**
- 若仅升级 CocoaPods 侧 JPush 版本、且希望插件版本与 Android 一致,可继续使用当前 Android SDK 版本作为插件版本
## 文档内容获取方式
文档中的链接极光更新日志、API 文档、CocoaPods 等)需要获取内容时:用 **curl 拉取对应 URL**,在返回的 HTML 里用 **grep 或搜索** 定位所需段落(极光页面为服务端渲染,内容均在 HTML 中,无需执行 JS
## 注意事项
- **必须逐条检查更新日志,避免遗漏新增 API**
- 确保 AndroidMaven与 iOSCocoaPods使用的 SDK 版本符合预期
- 新增 API 的封装风格需与现有 API 一致
- 更新后建议做一次完整构建与功能验证
- **若更新日志有缺字、错字,以极光官方文档为准**
- **`plugin.xml``package.json` 的版本号必须一致**
- 本插件不包含本地 SDK 包,所有依赖通过 MavenAndroid和 CocoaPodsiOS拉取

2
.npmignore Normal file
View File

@@ -0,0 +1,2 @@
cursor.md
.cursor/

View File

@@ -18,6 +18,8 @@
>如果需要安装之前版本的插件,请先安装 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)
>
>**集成方式说明**Android 通过 Maven 拉取 `cn.jiguang.sdk:jpush`iOS 通过 CocoaPods 拉取 `JPush` pod无需再依赖插件内的本地 SDK 包。
## Install
> 注意:
@@ -32,6 +34,7 @@
- 或直接通过 url 安装:
```shell
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable APP_KEY=your_jpush_appkey
```

30
cursor.md Normal file
View File

@@ -0,0 +1,30 @@
使用方法修改需求里的内容将需求和步骤内容作为指令让cursor进行执行。
需求:
1. 更新iOS JPush SDK 到 x.x.x 版本, JPush SDK 包的路径是xxx
2. 更新Android JPush SDK 到 x.x.x 版本, JPush SDK 包的路径是xxx
3. 将原生iOS、Android SDK 新增的方法,封装在插件中。
原生SDK新增方法一
iOS:
```
```
Android:
```
```
统一封装为 方法名为 "" 的对外方法。
请按照以下步骤完成:
1. iOS 使用 CocoaPods 集成:在 plugin.xml 的 iOS 平台下修改 `<pod name="JPush" spec="x.x.x" />` 中的版本号(固定版本,如 6.0.0)即可。
2. Android 使用 Maven 集成:在 plugin.xml 的 Android 平台下修改 `<framework src="cn.jiguang.sdk:jpush:x.x.x" />` 中的版本号即可。
3. 封装新增的方法。(如果没有新增的方法就不用执行这一步)
4. 在 plugin.xml 中更新插件版本号,使用安卓 SDK 包的版本号。
5. 在 package.json 中更新插件版本号,使用安卓 SDK 包的版本号。

View File

@@ -7,6 +7,7 @@
- [stopPush](#stoppush)
- [resumePush](#resumepush)
- [isPushStopped](#ispushstopped)
- [getPushStatus](#getpushstatus)
- [开启 Debug 模式](#开启-debug-模式)
- [setDebugMode](#setdebugmode)
- [获取 RegistrationID](#获取-registrationid)
@@ -131,6 +132,37 @@ window.JPush.isPushStopped(function (result) {
})
```
### getPushStatus
- **Android 6.0.0+ / iOS 6.0.0+**:推荐使用本接口替代 `isPushStopped`,用于检查推送是否被停止。
- 回调结果为 `{ code: number, isStopped: 0|1 }``code` 为 0 表示成功,非 0 表示错误码;**`isStopped` 仅在 `code === 0` 时有效**0 表示推送未停止1 表示推送已停止),当 `code !== 0` 时请勿依赖 `isStopped` 做业务判断。
#### 接口定义
```js
window.JPush.getPushStatus(callback)
```
#### 参数说明
- callback: 回调函数,参数为 `(result)`result 为 `{ code: number, isStopped: 0|1 }`。**注意:`isStopped` 仅在 `code === 0` 时有效。**
#### 代码示例
```js
window.JPush.getPushStatus(function (result) {
if (result.code !== 0) {
// 获取状态失败,不解析 isStopped
return;
}
if (result.isStopped === 0) {
// 推送未停止
} else if (result.isStopped === 1) {
// 推送已停止
}
})
```
## 开启 Debug 模式
### setDebugMode
用于开启 Debug 模式,显示更多的日志信息。
@@ -586,6 +618,27 @@ document.addEventListener("jpush.receiveMessage", function (event) {
}
```
## 获取通知点击的参数 (Android only)
### event - jpush.receiveNotifyButtonClick
#### 代码示例
- 在你需要接收通知的的 js 文件中加入:
```js
document.addEventListener("jpush.receiveNotifyButtonClick", function (event) {
if(device.platform == "Android") {
var msgId = event.msgId;
var platform = event.platform;
var name = event.name;
var actionType = event.actionType;
var action = event.action;
var data = event.data;
}
}, false)
```
## 判断系统设置中是否允许当前应用推送
### API - getUserNotificationSettings
判断系统设置中是否允许当前应用推送。

View File

@@ -210,6 +210,16 @@
alert(error.code)
})
})
$("#getPushStatus").click(function (event) {
window.JPush.getPushStatus(function (result) {
var text = "code: " + result.code + ", isStopped: " + result.isStopped;
if (result.code !== 0) {
text += " (isStopped 仅当 code 为 0 时有效)";
}
$("#pushStatusResult").html(text);
});
});
};
document.addEventListener("deviceready", onDeviceReady, false);
@@ -287,6 +297,10 @@
<input type="button" id="setMobileNumber" value="Set mobileNumber" />
</div>
<div data-role="fieldcontain">
<input type="button" id="getPushStatus" value="Get push status" />
</div>
<div data-role="fieldcontain">
<label id="tagsPrompt">设置 Tag 的结果:</label>
<label id="tagsResult">null</label>
@@ -299,6 +313,10 @@
<label id="mobileNumberPrompt">设置手机号的结果:</label>
<label id="mobileNumberResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="pushStatusPrompt">Get push status 结果 (code=0 成功, isStopped 仅当 code 为 0 时有效):</label>
<label id="pushStatusResult">null</label>
</div>
<div data-role="fieldcontain">
<label id="notificationPrompt">接受的通知内容:</label>
<label id="notificationResult">null</label>

View File

@@ -47,6 +47,9 @@ export class JPush extends IonicNativePlugin {
@Cordova()
isPushStopped(): Promise<any> { return; }
@Cordova()
getPushStatus(): Promise<{ code: number; isStopped: 0 | 1 }> { return; }
@Cordova()
setTags(params: TagOptions): Promise<any> { return; }

View File

@@ -42,6 +42,8 @@ export declare class JPushOriginal extends IonicNativePlugin {
stopPush(): Promise<any>;
resumePush(): Promise<any>;
isPushStopped(): Promise<any>;
/** 检查推送是否被停止SDK 6.0+ 推荐),返回 { code: number, isStopped: 0|1 }。isStopped 仅在 code 为 0 时有效 */
getPushStatus(): Promise<{ code: number; isStopped: 0 | 1 }>;
setTags(params: TagOptions): Promise<any>;
addTags(params: TagOptions): Promise<any>;
deleteTags(params: TagOptions): Promise<any>;

View File

@@ -24,6 +24,7 @@ var JPushOriginal = /** @class */ (function (_super) {
JPushOriginal.prototype.stopPush = function () { return cordova(this, "stopPush", {}, arguments); };
JPushOriginal.prototype.resumePush = function () { return cordova(this, "resumePush", {}, arguments); };
JPushOriginal.prototype.isPushStopped = function () { return cordova(this, "isPushStopped", {}, arguments); };
JPushOriginal.prototype.getPushStatus = function () { return cordova(this, "getPushStatus", {}, arguments); };
JPushOriginal.prototype.setTags = function (params) { return cordova(this, "setTags", {}, arguments); };
JPushOriginal.prototype.addTags = function (params) { return cordova(this, "addTags", {}, arguments); };
JPushOriginal.prototype.deleteTags = function (params) { return cordova(this, "deleteTags", {}, arguments); };

View File

@@ -42,6 +42,8 @@ export declare class JPush extends IonicNativePlugin {
stopPush(): Promise<any>;
resumePush(): Promise<any>;
isPushStopped(): Promise<any>;
/** isStopped 仅在 code 为 0 时有效 */
getPushStatus(): Promise<{ code: number; isStopped: 0 | 1 }>;
setTags(params: TagOptions): Promise<any>;
addTags(params: TagOptions): Promise<any>;
deleteTags(params: TagOptions): Promise<any>;

View File

@@ -42,6 +42,7 @@ var JPush = /** @class */ (function (_super) {
JPush.prototype.stopPush = function () { return cordova(this, "stopPush", {}, arguments); };
JPush.prototype.resumePush = function () { return cordova(this, "resumePush", {}, arguments); };
JPush.prototype.isPushStopped = function () { return cordova(this, "isPushStopped", {}, arguments); };
JPush.prototype.getPushStatus = function () { return cordova(this, "getPushStatus", {}, arguments); };
JPush.prototype.setTags = function (params) { return cordova(this, "setTags", {}, arguments); };
JPush.prototype.addTags = function (params) { return cordova(this, "addTags", {}, arguments); };
JPush.prototype.deleteTags = function (params) { return cordova(this, "deleteTags", {}, arguments); };

View File

@@ -1,6 +1,6 @@
{
"name": "jpush-phonegap-plugin",
"version": "5.6.0",
"version": "6.0.1",
"description": "JPush for cordova plugin",
"cordova": {
"id": "jpush-phonegap-plugin",

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
id="jpush-phonegap-plugin"
version="5.6.0">
version="6.0.1">
<name>JPush</name>
<description>JPush for cordova plugin</description>
@@ -48,7 +49,12 @@
<header-file src="src/ios/Plugins/AppDelegate+JPush.h" />
<source-file src="src/ios/Plugins/AppDelegate+JPush.m" />
<source-file src="src/ios/lib/jpush-ios-5.5.0.xcframework" framework="true" />
<!-- JPush SDK 通过 CocoaPods 集成 -->
<podspec>
<pods>
<pod name="JPush" spec="6.0.0" />
</pods>
</podspec>
<resource-file src="src/ios/JPushConfig.plist" />
<framework src="CFNetwork.framework" weak="true" />
@@ -72,6 +78,11 @@
</platform>
<platform name="android">
<!-- aar 合并时与 cn.jiguang.sdk:jpush 的 meta-data 冲突,需声明 tools 并用 tools:replace 覆盖 -->
<edit-config file="AndroidManifest.xml" target="/manifest" mode="merge">
<manifest xmlns:tools="http://schemas.android.com/tools" />
</edit-config>
<config-file target="res/xml/config.xml" parent="/*">
<feature name="JPushPlugin">
<param name="android-package" value="cn.jiguang.cordova.push.JPushPlugin" />
@@ -113,58 +124,6 @@
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<!-- Rich push 核心功能 since 2.0.6-->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:exported="true"
android:theme="@style/JPushDialogStyle" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="cn.jpush.android.ui.PopWinActivity" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- Required SDK核心功能-->
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- since 3.0.9 Required SDK 核心功能-->
<provider
android:authorities="$PACKAGE_NAME.DataProvider"
android:name="cn.jpush.android.service.DataProvider"
android:process=":pushcore"
android:exported="false"
/>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!--Required 显示通知栏 -->
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</receiver>
<!-- 3.5.0新增,用于定时展示功能 -->
<receiver android:name="cn.jpush.android.service.SchedulerReceiver" android:exported="false"/>
@@ -178,35 +137,7 @@
</intent-filter>
</receiver>
<!--since 3.3.0 Required SDK核心功能-->
<!-- since 3.3.0 Required SDK核心功能 -->
<activity
android:name="cn.jpush.android.service.JNotifyActivity"
android:exported="true"
android:taskAffinity=""
android:theme="@style/JPushTheme" >
<intent-filter>
<action android:name="cn.jpush.android.intent.JNotifyActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- since 4.6.0 Required SDK核心功能 -->
<activity
android:name="cn.android.service.JTransitActivity"
android:exported="true"
android:taskAffinity=""
android:theme="@style/JPushTheme" >
<intent-filter>
<action android:name="cn.android.service.JTransitActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="$PACKAGE_NAME" />
</intent-filter>
</activity>
<!-- since 3.3.0 Required SDK 核心功能-->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<!--User defined. For test only 继承自cn.jpush.android.service.JCommonService-->
@@ -233,9 +164,9 @@
<!-- </intent-filter>-->
</receiver>
<!-- Required . Enable it you can get statistics data with channel -->
<meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL"/>
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" /> <!-- </>值来自开发者平台取得的AppKey-->
<!-- RequiredSDK 从合并后的 AndroidManifest 读取。aar 内也有同名 meta-data用 tools:replace 覆盖占位符 -->
<meta-data android:name="JPUSH_CHANNEL" android:value="$CHANNEL" tools:replace="android:value" />
<meta-data android:name="JPUSH_APPKEY" android:value="$APP_KEY" tools:replace="android:value" />
<provider
android:name="cn.jpush.android.service.InitProvider"
android:authorities="${applicationId}.jiguang.InitProvider"
@@ -244,7 +175,8 @@
android:writePermission="${applicationId}.permission.JPUSH_MESSAGE" />
</config-file>
<lib-file src="src/android/libs/jpush-android-5.6.0.jar" />
<!-- JPush SDK 通过 Maven 集成,替代本地 jar -->
<framework src="cn.jiguang.sdk:jpush:6.0.1" />
<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" />

View File

@@ -15,10 +15,12 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import cn.jpush.android.api.CmdMessage;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.api.NotificationCustomButton;
import cn.jpush.android.helper.Logger;
import cn.jpush.android.local.JPushConstants;
import cn.jpush.android.service.JPushMessageReceiver;
@@ -85,6 +87,17 @@ public class JPushEventReceiver extends JPushMessageReceiver {
cn.jiguang.cordova.push.JPushPlugin.transmitReceiveRegistrationId(regId);
}
@Override
public void onCommandResult(Context context, CmdMessage cmdMessage) {
super.onCommandResult(context, cmdMessage);
if (cmdMessage == null) return;
// cmd 2003: getPushStatus / isPushStopped 状态回调。errorCode: 0=未停止, 1=已停止, 其他=异常
if (cmdMessage.cmd == 2003) {
cn.jiguang.cordova.push.JLogger.d(TAG, "[onCommandResult] getPushStatus, errorCode=" + cmdMessage.errorCode);
cn.jiguang.cordova.push.JPushPlugin.onGetPushStatusResult(cmdMessage.errorCode);
}
}
@Override
public void onMessage(Context context, CustomMessage customMessage) {
// super.onMessage(context,customMessage);
@@ -231,6 +244,23 @@ public class JPushEventReceiver extends JPushMessageReceiver {
}
}
@Override
public void onNotifyButtonClick(Context context, NotificationCustomButton notificationCustomButton) {
cn.jiguang.cordova.push.JLogger.d(TAG, "[onNotifyButtonClick], " + notificationCustomButton.toString());
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("msgId", notificationCustomButton.a);
jsonObject.put("platform", notificationCustomButton.b);
jsonObject.put("name", notificationCustomButton.c);
jsonObject.put("actionType", notificationCustomButton.d);
jsonObject.put("action", notificationCustomButton.e);
jsonObject.put("data", notificationCustomButton.f);
cn.jiguang.cordova.push.JPushPlugin.transmitNotifyButtonClick(jsonObject);
} catch (Throwable throwable) {
cn.jiguang.cordova.push.JLogger.d(TAG, "[onNotifyButtonClick] throwable:" + throwable);
}
}
interface SuccessCallback{
void onSuccessCallback(JSONObject resultJson) throws JSONException;
}

View File

@@ -50,6 +50,9 @@ public class JPushPlugin extends CordovaPlugin {
static Map<Integer, CallbackContext> eventCallbackMap = new HashMap<Integer, CallbackContext>();
/** getPushStatus 异步结果通过 JPushMessageReceiver.onCommandResult(cmd==2003) 回调,此处暂存 CallbackContext */
static CallbackContext getPushStatusCallbackContext;
public JPushPlugin() {
instance = this;
}
@@ -197,6 +200,20 @@ public class JPushPlugin extends CordovaPlugin {
}
});
}
static void transmitNotifyButtonClick( JSONObject data) {
if (instance == null) {
return;
}
String format = "window.plugins.jPushPlugin.receiveNotifyButtonClickCallback(%s);";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.webView.loadUrl("javascript:" + js);
}
});
}
static void transmitNotificationOpen(JSONObject data) {
@@ -285,6 +302,17 @@ public class JPushPlugin extends CordovaPlugin {
}
}
void setDataInsightsEnable(JSONArray data, CallbackContext callbackContext) {
boolean mode;
try {
mode = data.getBoolean(0);
JPushInterface.setDataInsightsEnable(mContext,mode);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
}
}
void stopPush(JSONArray data, CallbackContext callbackContext) {
JPushInterface.stopPush(mContext);
callbackContext.success();
@@ -304,6 +332,35 @@ public class JPushPlugin extends CordovaPlugin {
}
}
void getPushStatus(JSONArray data, CallbackContext callbackContext) {
getPushStatusCallbackContext = callbackContext;
JPushInterface.getPushStatus(mContext);
// 结果在 JPushEventReceiver.onCommandResult 中当 cmd==2003 时回调
}
/**
* 由 JPushEventReceiver.onCommandResult 在 cmd==2003 时调用,传递 getPushStatus 异步结果。
* 与 iOS 对齐code=0 表示成功,非 0 表示错误码isStopped=0 未停止1 已停止。
* Android errorCode: 0=未停止, 1=已停止, 其他=异常。
*/
static void onGetPushStatusResult(int errorCode) {
if (getPushStatusCallbackContext == null) return;
try {
JSONObject result = new JSONObject();
if (errorCode == 0 || errorCode == 1) {
result.put("code", 0);
result.put("isStopped", errorCode == 1 ? 1 : 0);
} else {
result.put("code", errorCode);
result.put("isStopped", 0);
}
getPushStatusCallbackContext.success(result);
} catch (JSONException e) {
getPushStatusCallbackContext.error("getPushStatus result error");
}
getPushStatusCallbackContext = null;
}
void areNotificationEnabled(JSONArray data, final CallbackContext callback) {
int isEnabled;
if (hasPermission("OP_POST_NOTIFICATION")) {

View File

@@ -52,6 +52,8 @@ static NSMutableDictionary *_jpushEventCache;
-(void)stopPush:(CDVInvokedUrlCommand*)command;
-(void)resumePush:(CDVInvokedUrlCommand*)command;
-(void)isPushStopped:(CDVInvokedUrlCommand*)command;
// 检查推送是否被停止iOS 6.0.0+ 推荐,替代 isPushStopped
-(void)getPushStatus:(CDVInvokedUrlCommand*)command;
//开关日志
-(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command;
@@ -76,10 +78,14 @@ static NSMutableDictionary *_jpushEventCache;
// 设置手机号
-(void)setMobileNumber:(CDVInvokedUrlCommand*)command;
// 设置进入后台是否允许长连接 (iOS 5.9.0+)
-(void)setBackgroundEnable:(CDVInvokedUrlCommand*)command;
/*
* 以下为js中可监听到的事件
* jpush.openNotification 点击推送消息启动或唤醒app
* jpush.receiveMessage 收到自定义消息
* jpush.receiveNotifyButtonClick 收到通知栏自定义按钮点击事件
* jpush.receiveNotification 前台收到推送
* jpush.backgroundNotification 后台收到推送
*/

View File

@@ -48,6 +48,18 @@
[self handleResultWithValue:result command:command];
}
-(void)getPushStatus:(CDVInvokedUrlCommand*)command{
WEAK_SELF(weakSelf)
[JPUSHService getPushStatus:^(NSInteger iResCode, BOOL isStopped) {
NSDictionary *result = @{
@"code": @(iResCode),
@"isStopped": isStopped ? @1 : @0
};
CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result];
[weakSelf.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}];
}
-(void)initial:(CDVInvokedUrlCommand*)command{
//do nithng,because Cordova plugin use lazy load mode.
}
@@ -533,6 +545,12 @@
}
#pragma mark - (iOS 5.9.0+)
-(void)setBackgroundEnable:(CDVInvokedUrlCommand *)command {
NSNumber* isEnable = [command argumentAtIndex:0];
[JPUSHService setBackgroundEnable:[isEnable boolValue]];
}
#pragma mark -
+(void)setupJPushSDK:(NSDictionary*)userInfo{

View File

@@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>HeadersPath</key>
<string>Headers</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>libJPush.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>HeadersPath</key>
<string>Headers</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>libJPush.a</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

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

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

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

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

@@ -5,6 +5,7 @@ var JPushPlugin = function() {};
JPushPlugin.prototype.receiveMessage = {};
JPushPlugin.prototype.openNotification = {};
JPushPlugin.prototype.receiveNotification = {};
JPushPlugin.prototype.notifyButtonClick = {};
JPushPlugin.prototype.isPlatformIOS = function() {
return (
@@ -59,6 +60,12 @@ JPushPlugin.prototype.setDebugMode = function(mode) {
}
};
JPushPlugin.prototype.setDataInsightsEnable = function(mode) {
if (device.platform === "Android") {
this.callNative("setDataInsightsEnable", [mode], null);
}
};
JPushPlugin.prototype.getRegistrationID = function(successCallback) {
this.callNative("getRegistrationID", [], successCallback);
};
@@ -75,6 +82,14 @@ JPushPlugin.prototype.isPushStopped = function(successCallback) {
this.callNative("isPushStopped", [], successCallback);
};
/**
* 检查推送是否被停止推荐SDK 6.0+ 新增接口,替代 isPushStopped
* @param successCallback 回调 (result) => {}result 为 { code: number, isStopped: 0|1 }code 为 0 表示成功isStopped 为 1 表示已停止
*/
JPushPlugin.prototype.getPushStatus = function(successCallback) {
this.callNative("getPushStatus", [], successCallback);
};
JPushPlugin.prototype.clearLocalNotifications = function() {
if (device.platform === "Android") {
this.callNative("clearLocalNotifications", [], null);
@@ -384,6 +399,14 @@ JPushPlugin.prototype.receiveInAppMessageShowCallback = function(data) {
}
};
JPushPlugin.prototype.receiveNotifyButtonClickCallback = function(data) {
if (device.platform === "Android") {
data = JSON.stringify(data);
this.notifyButtonClick = JSON.parse(data);
cordova.fireDocumentEvent("jpush.receiveNotifyButtonClick", this.notifyButtonClick);
}
};
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
data = JSON.stringify(data);
this.openNotification = JSON.parse(data);
@@ -517,6 +540,17 @@ JPushPlugin.prototype.setAuth = function(isAuth){
};
/**
* 设置进入后台是否允许长连接 (iOS 5.9.0+)
*
* @param isEnable boolean 是否允许长连接
*/
JPushPlugin.prototype.setBackgroundEnable = function(isEnable) {
if (this.isPlatformIOS()) {
this.callNative("setBackgroundEnable", [isEnable], null);
}
};
if (!window.plugins) {
window.plugins = {};
}