1.问题描述:
Push token什么场景下会发生变化?
解决方案:
下列场景Push Token会发生变化:
卸载应用后重新安装。
设备恢复出厂设置。
应用显式调用deleteToken()接口后重新调用getToken()接口。
应用显式调用deleteAAID()接口后重新调用getToken()接口。
将设备(仅涉及Wearable设备)拿到海外其他国家或者地区后,系统会更新设备的Token。更新后的Token通过pushService.on('tokenUpdate')接口的回调返回。
因此,建议在应用启动时调用getToken()接口,若设备的PushToken发生变化,及时上报到应用服务器更新PushToken。
以下是参考示例代码:
// 导入pushService模块及相关公共模块
// 建议在UIAbility(例如EntryAbility)的onCreate()方法中调用getToken()接口获取PushToken并上报到服务端,方便服务端向终端推送消息。
pushService.getToken().then((data: string) => {
hilog.info(0x0000, 'testTag', 'Succeeded in getting push token.');
}).catch((err: BusinessError) => {
});
} catch (err) {
let e: BusinessError = err as BusinessError;
2.问题描述:
推送卡片消息需要后台根据卡片页面绑定的字段处理好数据后调用推送服务,如果后台只能传递需要的参数参数,需要卡片里根据参数使用网络请求获取更多数据后刷新到卡片页面上,如何实现?
解决方案:
【背景知识】
推送卡片刷新消息:面对需要实时更新信息的应用卡片,Push Kit向开发者提供了卡片刷新服务。应用通过集成Push Kit后获取Push Token,基于Push Kit的系统级通道,便可以在合适场景向用户即时推送卡片内容,从而提升用户的感知度和活跃度。
message事件:可以使用message拉起FormExtensionAbility,通过onFormEvent接口回调通知,以完成点击卡片控件后传递消息给应用的功能。
postCardAction:在卡片页面中可以通过postCardAction接口触发事件拉起UIAbility,然后由UIAbility刷新卡片内容。
【解决方案】
按照开发步骤进行卡片和推送消息的开发。不同之处在于推送消息体中传递的字段换成需要的参数:
"payload": {
"moduleName": "entry",
"abilityName": "EntryFormAbility",
"formName": "widget",
"formId": 42***62,
"version": 12**56,
"formData": {
"query_key": "123****45"
"target": {
"token": [
"MAMzLg**********lPW"
"pushOptions": {
"testMessage": true
在卡片页面使用@LocalStorageProp修饰formData中传递的参数,并使用@watch监听。
@Watch('refresh') @LocalStorageProp('query_key') queryKey: number = -1;
当参数变化时使用postCardAction向发送message事件拉起UIAbility,传递参数。
refresh() {
postCardAction(this, {
action: 'message',
params: {
queryKey: this.queryKey
});
在FormExtensionAbility的onFormEvent生命周期中使用网络请求获取到需要的信息,组装数据后调用updateForm接口刷新卡片内容。
注意事项:此方式需要保证onFormEvent在10秒内能处理完业务,请参考卡片生命周期管理。若无法保证onFormEvent在10秒内能处理完业务,请在后台处理完数据后再推送消息,请参考推送卡片刷新消息。
3.问题描述:
App按照文档设置了自定义铃声:申请自定义铃声权益和通知消息自定义铃声实现,铃声持续时间半分钟以上。当收到通知,铃声开始响,但是点击收到的通知打开App后,铃声依旧在播放。
解决方案:
可以在打开应用时,对当前应用的消息通知做清除操作,示例代码如下:
export default class EntryAbility extends UIAbility {
onForeground(): void {
// Ability has brought to foreground
let cancelAllCallback = (err: BusinessError): void => {
if (err) {
} else {
console.info(`Succeeded in canceling all notification.`);
notificationManager.cancelAll(cancelAllCallback);
4.问题描述:
生命周期onCreate()或者onNewWant()里want中的uri是HarmonyOS自动生成的吗?
解决方案:
生命周期onCreate()或者onNewWant()里want中的uri为统一资源标识符,一般在应用启动场景中配合type使用,指明待处理的数据类型。如果在拉起方的Want中指定了uri,则Want将匹配指定的Uri信息,包括scheme、schemeSpecificPart、authority和path信息, 生命周期onCreate()或者onNewWant()里want中的uri为起方的Want中传递的uri,不传则默认为空字符串。例外:通过push kit拉起的场景下拉起方不是使用的want的方式,系统自动给uri赋值为"abilityEvent:clickAlertMessage"。
5.问题描述:
要实现Ap
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289031.htm
[推荐]【FAQ】HarmonyOS SDK 闭源开放能力 — Push Kit
498 浏览
0 回复
暂无回复,快来抢沙发吧!