- 在工程 pubspec.yaml 中加入 dependencies
//github 集成
dependencies:
jpush_harmony_sdk:
git:
url: "https://github.com/jpush/jpush-harmony-flutter-plugin.git"
- 代码导入:可以参考example里的代码
import 'package:jpush_harmony_sdk/jpush_harmony_sdk.dart';
创建对象
final _jpushHarmonySdkPlugin = JpushHarmonySdk();
说明:现在har为字节码,需升级ide到5.0.3.500以上,并在工程级(最外层)build-profile.json5,配置"useNormalizedOHMUrl": true
"products": [
{
"buildOption": {
"strictMode": {
"useNormalizedOHMUrl": true//打开
}
},
"name": "default",
"signingConfig": "default",
"compileSdkVersion": "5.0.0(12)",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS"
}
]
想要推送功能,需要配置 HarmonyOS 平台信息
主要步骤为:
- 在hmos平台开通推送服务
- 配置签署
发送通知,请选打开应用方式发通知。不然还需要写原生代码
通过打开应用方式来获取通知数据:
- 在flutter自动生成的EntryAbility.ets文件添加JpushHarmonySdkPlugin.setClickWant(want, this.context)代码
- 在onCreate和onNewWant 两个方法里添加,如下代码例子
import { FlutterAbility, FlutterEngine } from '@ohos/flutter_ohos';
import { GeneratedPluginRegistrant } from '../plugins/GeneratedPluginRegistrant';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
import JpushHarmonySdkPlugin from 'jpush_harmony_sdk';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'JPUSH-flutter-JLog-EntryAbility'
export default class EntryAbility extends FlutterAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
hilog.info(0x0000, TAG, 'onCreate :' + JSON.stringify(want));
JpushHarmonySdkPlugin.setClickWant(want, this.context)//这里添加代码
return super.onCreate(want, launchParam)
}
onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, TAG, 'onNewWant :' + JSON.stringify(want));
JpushHarmonySdkPlugin.setClickWant(want, this.context)//这里添加代码
super.onNewWant(want, launchParams)
}
configureFlutterEngine(flutterEngine: FlutterEngine) {
hilog.info(0x0000, TAG, 'configureFlutterEngine');
super.configureFlutterEngine(flutterEngine)
GeneratedPluginRegistrant.registerWith(flutterEngine)
}
}
如果有自定义信息需求,需以下配置
主要步骤为:
- 在项目模块级目录的 src/main/resources/base/profile/ 下创建 PushMessage.json 文件,文件内容如下:
{
"path": "pushmessage/t_push_message",
"type": "rdb",
"scope": "application"
}
-
path:固定值为 pushmessage/t_push_message,表示数据库和表名称。
-
type:固定值为 rdb,表示关系型数据库。
-
scope:表示数据库的范围,可填 application(应用级)或module(hap模块级)。
-
并且,在项目模块级目录的 src/main/module.json5 文件添加 proxyData 如下配置:
{
"module": {
"proxyData":[{
"uri": "datashareproxy://{bundleName}/PushMessage",
"requiredWritePermission": "ohos.permission.WRITE_PRIVACY_PUSH_DATA",
"metadata":{
"name": "dataProperties",
"resource": "$profile:PushMessage"
}
}]
}
}
- uri:固定格式为 datashareproxy://{bundleName}/PushMessage,请将{bundleName}替换为您应用的bundleName,PushMessage为固定名称,请勿随意更改。
- requiredWritePermission:固定值为 ohos.permission.WRITE_PRIVACY_PUSH_DATA,推送服务需要使用该权限往数据库里写入BACKGROUND消息数据。
- metadata:扩展配置,name固定值为dataProperties,resource固定格式为$profile:文件名称,文件名称固定为PushMessage。
- 在您项目的ability(下以PushMessageAbility为例)内导入push模块,
- 注意,您仅能使用UIAbility接收BACKGROUND消息。
import { UIAbility } from '@kit.AbilityKit';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import JpushHarmonySdkPlugin from 'jpush_harmony_sdk';
const TAG: string = 'JPUSH-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try { // receiveMessage中的参数固定为BACKGROUND-------后台自定义信息接收
pushService.receiveMessage('BACKGROUND', this, async (data: pushCommon.PushPayload) => {
let jg = await JpushHarmonySdkPlugin.customMessageBackgroundData(data)
if (jg) { //如果是true为已经处理
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'BACKGROUND fail:' + JSON.stringify(e));
}
}
}
- 并且,在项目工程的 src/main/module.json5文件的abilities模块中配置skills中actions内容为action.ohos.push.listener(有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空)。
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"skills": [
{
"actions": [
"action.ohos.push.listener"
]
}
]
}
]
如果有通知扩展消息需求,需以下配置
主要步骤为:
- 进程不存在会走这个流程(通知扩展进程),您在该进程中自行完成语音播报业务处理,并返回特定的消息内容(例如title、body等)覆盖当前消息内容后,Push Kit将弹出通知提醒。
- 在您的工程内创建一个ExtensionAbility类型的组件并且继承RemoteNotificationExtensionAbility,完成onReceiveMessage() 方法的覆写,调用JPushInterface.receiveExtraDataMessage方法获取数据,代码示例如下:
import { UIAbility } from '@kit.AbilityKit';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import JpushHarmonySdkPlugin from 'jpush_harmony_sdk';
const TAG: string = 'JPUSH-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try { // receiveMessage中的参数固定为IM-------拓展通知接收
pushService.receiveMessage('IM', this, async (data) => {
let jg = await JpushHarmonySdkPlugin.extraMessageBackgroundData(data)
if (jg) { //如果是true为已经处理
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'IM fail:' + JSON.stringify(e));
}
}
}
并且,在项目工程的src/main/module.json5文件的extensionAbilities模块中配置RemoteNotificationExtAbility的type和actions信息(有且仅有一个ExtensionAbility,配置如下,若同时添加uris参数,则uris内容需为空):
"extensionAbilities": [
{
"name": "RemoteNotificationExtAbility",
"type": "remoteNotification",
"srcEntry": "./ets/entryability/RemoteNotificationExtAbility.ets",
"description": "RemoteNotificationExtAbility test",
"exported": false,
"skills": [
{
"actions": ["action.hms.push.extension.remotenotification"]
}
]
}
]
- type:固定值为remoteNotification,表示通知扩展的ExtensionAbility类型。
- actions:固定值为action.hms.push.extension.remotenotification,用于接收通知扩展消息。
- 进程存在时会走这个流程,若您的应用进程存在,无论应用在前台或者在后台均不弹出通知提醒
- 您可以通过receiveMessage()方法实时获取通知扩展消息数据,示例代码如下:
import { UIAbility } from '@kit.AbilityKit';
import { JPushInterface } from '@jg/push';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'JPUSH-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try { // receiveMessage中的参数固定为IM-------拓展通知接收
pushService.receiveMessage('IM', this, async (data) => {
let jg = await JPushInterface.extraMessageBackgroundData(data)
if (jg) { //如果是true为已经处理
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'IM fail:'+JSON.stringify(e));
}
}
- 并且在项目模块的src/main/module.json5中的skills里配置actions内容为 action.ohos.push.listener(有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空):
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"skills": [
{
"actions": [
"action.ohos.push.listener"
]
}
]
}
]
如果有推送VoIP呼叫消息需求,需以下配置
主要步骤为:
- 在您的工程内创建一个UIAbility类型的组件,如PushMessageAbility.ets(在项目工程的src/main/ets/entryability目录下),负责处理VoIP呼叫消息接收,代码示例如下:
import { UIAbility } from '@kit.AbilityKit';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import JpushHarmonySdkPlugin from 'jpush_harmony_sdk';
const TAG: string = 'JPUSH-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try {
pushService.receiveMessage('VoIP', this, async (data) => {
let jg = await JpushHarmonySdkPlugin.voIPMessageBackgroundData(data)
if (jg) { //如果是true为已经处理
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'VoIP fail:' + JSON.stringify(e));
}
}
}
并且,在项目工程的 src/main/module.json5 文件的 abilities 模块中配置PushMessageAbility的actions信息。
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"description": "PushMessageAbility test",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": false,
"skills": [
{
"actions": ["action.ohos.push.listener"]
}
]
}
]
- actions:内容为action.ohos.push.listener,有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空。
上述步骤完成后,还需要配置极光平台信息
主要步骤为:
- 在极光平台创建应用,并确保如下两个信息:包名和 appKey,与极光平台一致。
说明1:
在本地工程配置包名,方式:在 AppScope 工程下的 app.json5 文件添加
{
"app": {
"bundleName": "你的包名",
}
}
说明2:
在本地工程配置极光appKey(极光控制台创建应用后自动生成的应用标识),代码配置 如:
_jpushHarmonySdkPlugin.setAppKey("你的appKey") //在init之前调用
说明3:
在本地工程配置接收回调信息, 代码配置 如:
_jpushHarmonySdkPlugin.setCallBack((eventName, data) async {
print("flutter_log_MyApp:eventName:$eventName");
print("flutter_log_MyApp:data:$data");
setState(() {
print("flutter_log_MyApp:setState");
_platformVersion += "\n$eventName:$data";
if(eventName == "onRegister"){
_RID = data;
}
});
});
主要步骤为:
- 在 init 之前要先设置 appKey
- 在 init 之前要先设置接收回调信息类
_jpushHarmonySdkPlugin.setCallBack((eventName, data) async {
print("flutter_log_MyApp:eventName:$eventName");
print("flutter_log_MyApp:data:$data");
setState(() {
print("flutter_log_MyApp:setState");
_platformVersion += "\n$eventName:$data";
if(eventName == "onRegister"){
_RID = data;
}
});
});
_jpushHarmonySdkPlugin.setAppKey("你的appkey");
_jpushHarmonySdkPlugin.init();