HarmonyOS开发中关于实现推送功能的核心:获取与运用Push Token
目录
- 引言
- 推送通知的重要性
- 关于HarmonyOS推送服务
- Push Token概念
- 开发环境与工具要求
- 获取Push Token
- 利用Push Token进行服务卡片开发
- 结束语
引言
在移动应用开发中,推送通知是一种有效的用户沟通方式,能够及时向用户发送重要信息或更新,而HarmonyOS作为新兴的操作系统,提供了一套完整的推送服务,使得开发者能够轻松实现应用的推送功能。推送服务的核心,在应用开发中实时消息推送已成为连接用户与服务的关键桥梁。推送服务,以其稳定、迅速且高效的特性,显著提升了用户与应用间的互动体验,从而有效提高用户的感知与活跃程度。那么本文就来分享在HarmonyOS开发中实现推送功能的核心环节,希望本文能够给大家带来帮助。
推送通知的重要性
首先来了解一下推送通知在移动应用开发中的重要性,推送通知对于提升用户活跃度、增加用户粘性、传递时效性信息等方面发挥着重要作用。它是应用与用户之间沟通的桥梁,能够提高应用的可见度和用户的参与度。
关于HarmonyOS推送服务
关于HarmonyOS推送服务,其实(Push Kit)是华为鸿蒙为开发者提供的一项服务,它允许应用向用户设备发送实时消息和通知,Push Kit服务具有以下特点:
- 跨平台:支持多设备、多平台的消息推送;
- 高效可靠:保证消息的及时送达和高到达率;
- 节省资源:减少应用对设备资源的占用。
Push Token概念
再来了解一下Push Token的基本含义,其实Push Token作为一个独特的标识符,对于实现精准推送至关重要,它代表了一个具体的设备或应用实例,使得服务器能够准确地将推送通知发送至目标对象。当设备首次注册推送服务时,系统会生成此Token,并由推送通知服务(比如针对iOS的Apple Push Notification Service,或者针对Android和iOS的Firebase Cloud Messaging,再或者HarmonyOS的pushService)提供给应用开发者。
开发环境与工具要求
还有就是我们要根据实际情况,来对开发环境和工具要求进行对应设置,具体配置要求如下所示:
- HarmonyOS版本:至少为HarmonyOS NEXT Developer Beta1。
- 开发工具:DevEco Studio NEXT Developer Beta1或更高版本。
- SDK需求:HarmonyOS NEXT Developer Beta1 SDK或更新版本。
获取Push Token
Push Token是推送服务识别设备和应用的唯一标识符,获取Push Token是实现推送功能的第一步。在HarmonyOS中实施Push Token的获取,具体操作流程如下所示。
1.安全设置
在使用推送功能之前,需为应用添加公钥指纹,并确保已正确配置Client ID。
2.获取Push Token
开发者需在应用的模块配置文件中设定相关信息,并通过特定接口获取Token。例如,通过getToken(): Promise接口可以异步获取推送服务的Token。
3.导入与调用
使用import { pushService } from '@kit.PushKit';导入推送服务模块,并调用pushService.getToken方法以获取Token。此操作应在Stage模型下执行,并确保满足系统能力要求。
4.错误处理与日志记录
在获取Token过程中,应妥善处理可能出现的错误,并记录相关日志以便于问题追踪与分析,具体示例代码如下所示:
"module": {
"name": "entry",
"type": "xxx",
"description": "xxxx",
"mainElement": "xxxx",
"deviceTypes": [],
"pages": "xxxx",
"abilities": [],
"metadata": [ // 配置如下信息
{
"name": "client_id",
"value": "xxxxxx"
}
]
}
另外,启用并获取推送服务标识符,设置客户端识别码。在集成了应用签名证书指纹之后,下一步是设置项目的Client ID。此操作需在项目模块层级的src/main/module.config文件中进行,于metadata段落内指定client_identifier。具体示例代码如下所示:
"module": {
"title": "access",
"category": "zzz",
"description": "zzzz",
"primaryElement": "zzzz",
"supportedDevices": [],
"screens": "zzzz",
"functionalities": [],
"metadata": [ // 设置信息如下
{
"key": "client_identifier",
"value": "zzzzzz"
}
]
}
接着就是获取Push Token,配置推送标识符。在创建应用之后,你需要在AppDomain/app.config文件中替换应用的包名。具体示例如下所示:
// app.config
{
"application": {
"packageName": "zzz.zzzz.zzzzz", // 替换成你的包名
"provider": "example",
"buildNumber": 1000000,
"versionLabel": "1.0.0",
"iconPath": "$media:app_icon",
"displayName": "$string:app_name"
}
}
最后就是获取推送服务令牌(这里需要注意的是,要以Future形式获取推送服务的令牌。)
// 接口名称:
acquireToken(): Future<string>
本模块提供Push Kit的基础能力,包括获取和删除Push Token、绑定和解绑帐号和接收场景化消息的功能。
5.导入pushService推送服务模块
import { pushModuleManager } from '@kit.PushModule';
pushModuleManager.acquireToken
acquireToken(): Future<string>
获取推送服务的令牌,采用Future异步回调机制,下面是一些基本要求:
使用限制:此接口只能在Stage环境下使用。
系统要求:SystemCapability.Messaging.PushModule
版本要求:起始于4.0.0(10)版本
返回值:类型为Future;表示一个Future对象,返回令牌信息。
这里分享一个简单的示例,具体如下所示:
import { pushModuleManager } from '@kit.PushModule';
import { logger } from '@kit.DiagnosticsKit';
import { ServiceException } from '@kit.CoreServicesKit';
try {
pushModuleManager.acquireToken().then((data: string) => {
logger.info('Successfully');
}).catch((error: ServiceException) => {
logger.error('Failed: %{public}d %{public}s', error.code, error.message);
});
} catch (error) {
let e: ServiceException = error as ServiceException;
logger.error('Error: %{public}d %{public}s', e.code, e.message);
}
接下来再分享一下常见的错误码,ArkTS API错误码具体如下所示:
1000900001 系统错误
1000900002 Extension不存在
1000900003 Extension回调执行失败
1000900004 ExtensionAbility回调执行超时
1000900005 不允许重复注册相同的场景化消息
1000900006 连接AAID服务失败
1000900007 AAID服务内部错误
1000900008 连接Push服务失败
1000900009 推送服务内部错误
1000900010 APP身份验证失败
1000900011 网络不可用
1000900012 未开通推送服务权益
1000900013 不允许跨区申请Token
1000900014 设备不支持申请Token
1000900015 绑定的应用内账号数量达到上限
1000900016 华为账号未登录
1000900017 不支持当前操作
1000900018 请求频次超限
1000900019 模板ID非法
1000900020 应用的推送服务Token为空
1000900021 应用未在AGC上注册
1000900022 通知开关状态为关闭
1000900023 模板ID数量超过上限
1000900024 展示订阅通知授权弹窗失败
1000900025 没有使用该模板ID的权益
1000900026 模板ID的类型非法
1000900030 用户未登录华为账号
在“推送功能首页”点击请求令牌功能,将跳转到“请求令牌功能”页面。点击页面上的按钮会触发acquireToken方法,导航至令牌申请页面,具体如下所示:
private requestToken = () => {
router.navigate({ path: 'pages/TokenRequestPage' });
}
在EntryFunctionality的onInitialize()方法中调用acquireToken()接口获取推送令牌,并上报至您的服务端,便于服务端向终端用户推送消息,具体如下所示:
// 点击请求令牌按钮,调用推送组件的acquireToken方法获取令牌
private async acquireTokenAsync() {
try {
const pushToken = await pushModuleManager.acquireToken();
logger.info('Push token acquired successfully!');
this.displayMessage = 'Successfully acquired push token, please retain it.';
} catch (error) {
this.displayMessage = 'Failed to acquire push token, kindly check the error logs!';
let e: ServiceException = error as ServiceException;
logger.error('Error acquiring push token: %{public}d %{public}s', e.code, e.message);
}
}
通过上面示例,可知:
1.点击“申请Token”按钮,若申请流程顺利完成,页面将给出成功的反馈提示,此时请务必妥善保存所获取的Token信息;
2.Push Token作为每台设备上每个应用的唯一标识符,开发者需要执行getToken()函数,以此向Push服务端发出Token请求;
3.成功取得Token后,开发者应将该Token信息上报至自身的应用服务器;
4.开发者在获取了Push Token之后,可将其存储在服务器端,这样便能在必要时向指定的设备发送个性化的推送信息。当服务器准备发送推送信息时,需将通知的具体内容、目标Token及其他必要信息发送给推送服务,随后由推送服务负责将信息准确推送到对应的设备。
利用Push Token进行服务卡片开发
在移动互联网时代,用户期望能够更直接、更快捷地获取信息和服务。HarmonyOS的Form Kit(卡片开发服务)正是为了满足这一需求而设计的。通过服务卡片,开发者可以将应用的核心信息或功能直接展示给用户,无需用户打开整个应用。利用先前获取的Push Token,结合Push Kit提供的系统级通道,开发者可以在适当的时候向用户推送服务卡片内容。这种即时的信息更新不仅提升了用户体验,还增强了用户对应用的感知度和使用活跃度。
获取并有效运用Push Token是实现高效推送服务的关键。通过HarmonyOS提供的工具和服务,开发者可以轻松地集成推送功能,并通过服务卡片为用户提供更加便捷的信息获取方式。这不仅有助于提升应用的用户粘性和活跃度,还能为用户带来更加丰富的移动体验。
结束语
通过本文的分享,想必大家都知道推送功能是移动应用与用户保持联系的重要手段。在HarmonyOS开发中,通过获取和运用Push Token,开发者可以轻松实现推送功能,为用户提供及时、个性化的信息和服务。随着HarmonyOS生态的不断壮大,推送服务也将持续优化升级,为开发者和用户带来更好的体验。作为开发者,我们应该充分利用HarmonyOS提供的推送服务,为用户创造更多价值,而且我们也应关注用户隐私和体验,合理设计推送策略,避免过度打扰用户,尽可能高的提高用户体验。
更多推荐
所有评论(0)