HarmonyOS应用开发实战:猫猫大作战-PushKit 的接收与处理
前言PushKit是 HarmonyOS 的远程推送服务支持服务端向用户设备发送推送消息。对于游戏应用远程推送可用于活动通知“周末双倍积分”、好友邀请“你的好友超过了你的得分”、以及流失召回“猫咪们想念你回来合并”。本文以「猫猫大作战」的推送集成为锚点讲解 PushKit 的完整使用流程包括推送权限申请、接收推送、消息解析、点击跳转、以及推送策略最佳实践。提示本系列不讲 ArkTS 基础语法与环境搭建。本篇是阶段五第 153 篇。一、PushKit 基础概念1.1 推送架构┌──────────┐ ┌─────────────┐ ┌──────────┐ │ 服务端 │────►│ 华为推送服务 │────►│ 用户设备 │ │ (AGC) │ │ (PushKit) │ │ (App) │ └──────────┘ └─────────────┘ └──────────┘ │ │ │ 发送推送请求 │ on(receive) 回调 │ JSON 格式 │ 弹通知栏消息 └──────────────────────────────────────┘1.2 推送数据类型// 推送消息的 JSON 结构示例interfacePushMessage{type:activity|reminder|invite|notice;title:string;body:string;data?:Recordstring,string;// 自定义数据action?:string;// 点击后的跳转路由}提示HarmonyOS 推送消息体最大 4KB结构化数据放在data字段展示文本放在title/body。二、推送权限与配置2.1 module.json5 权限声明// entry/src/main/module.json5 { module: { requestPermissions: [ { name: ohos.permission.PUSH, reason: $string:push_permission_reason, } ], // ... } }2.2 运行时权限申请import{abilityAccessCtrl}fromkit.AbilityKit;asyncfunctionrequestPushPermission(context:common.UIAbilityContext):Promiseboolean{constatManagerabilityAccessCtrl.createAtManager();try{constresultawaitatManager.requestPermissionsFromUser(context,[ohos.permission.PUSH]);returnresult.authResults[0]0;// 0 表示授权}catch(err){console.error(推送权限申请失败:${err.message});returnfalse;}}三、接收推送消息3.1 注册推送监听import{pushService}fromkit.PushKit;import{hilog}fromkit.PerformanceAnalysisKit;import{BusinessError}fromkit.BasicServicesKit;EntryComponentstruct GameApp{privateTAGPushKit;privateDOMAIN0xFF00;aboutToAppear(){this.initPush();}initPush(){// 注册推送接收回调pushService.on(receive,(data:string){hilog.info(this.DOMAIN,this.TAG,收到推送消息:${data});this.handlePushMessage(data);});// 注册推送点击回调pushService.on(click,(data:string){hilog.info(this.DOMAIN,this.TAG,推送被点击:${data});this.handlePushClick(data);});}handlePushMessage(data:string){try{constmsg:PushMessageJSON.parse(data);switch(msg.type){caseactivity:this.showActivityBanner(msg.title,msg.body);break;casereminder:// 系统已弹通知栏应用无需额外处理break;caseinvite:this.showInviteBadge();break;default:console.info(未知推送类型:${msg.type});}}catch(err){console.error(推送数据解析失败:${(errasBusinessError).message});}}handlePushClick(data:string){try{constmsg:PushMessageJSON.parse(data);if(msg.actiongame){// 跳转到游戏页面this.routerToGame();}elseif(msg.actionactivity){// 跳转到活动详情this.routerToActivity(msg.data?.activityId??);}}catch(err){console.error(推送点击处理失败);}}}3.2 推送回调详解回调事件触发时机data 内容典型处理on(receive)设备收到推送完整的 JSON 字符串更新 UI 角标、处理自定义数据on(click)用户点击通知栏推送消息的 JSON路由跳转、打开指定页面on(token)推送 Token 更新新 Token 字符串上报给服务端四、游戏中的推送应用4.1 活动通知推送// 处理活动推送在游戏内显示活动横幅showActivityBanner(title:string,body:string){// 只在非游戏进行时弹横幅if(this.gameState!GameState.PLAYING){promptAction.showToast({message:${title}:${body},duration:3000,});}}4.2 好友邀请推送handleInvitePush(data:string){constmsgJSON.parse(data);constinvitermsg.data?.inviter??好友;// 显示邀请红点this.hasInviteBadgetrue;// 弹窗提示promptAction.showDialog({title:${inviter}邀请你,message:你的好友${inviter}在猫猫大作战中获得了${msg.data?.score}分快来挑战吧,buttons:[{text:稍后,color:#95A5A6},{text:去挑战,color:#2ECC71},],}).then((result){if(result.index1){this.startGame();}});}五、推送 Token 管理5.1 获取和上报 TokenasyncfunctionsetupPush(context:common.UIAbilityContext):Promisevoid{// 获取推送 TokenconsttokenawaitpushService.getToken();hilog.info(0xFF00,PushKit,推送 Token:${token});// 将 Token 上报到自己的服务端awaitreportTokenToServer(token);}asyncfunctionreportTokenToServer(token:string):Promisevoid{constresponseawaitfetch(https://api.example.com/push/register,{method:POST,body:JSON.stringify({token,platform:harmonyos}),});if(!response.ok){console.error(Token 上报失败);}}5.2 Token 刷新监听// 监听 Token 刷新切换账号、重新安装等场景pushService.on(token,(newToken:string){hilog.info(0xFF00,PushKit,Token 已刷新:${newToken});reportTokenToServer(newToken);});六、服务端推送6.1 通过 AGC 发送推送# 使用 AGC REST API 发送推送curl-XPOST https://push-api.cloud.huawei.com/v1/{appId}/messages:send\-HAuthorization: Bearer {accessToken}\-HContent-Type: application/json\-d{ message: { token: [user_device_token], notification: { title: 周末双倍积分, body: 本周末所有合并得分翻倍 }, data: JSON.stringify({ type: activity, action: game }) } }6.2 推送策略建议推送类型频率最佳时间内容建议活动通知每周 1-2 次周五 18:00-20:00限时活动、双倍积分召回提醒每 3-7 天用户活跃时段“猫咪想念你”好友邀请不定时好友在线时“好友超过了你”版本更新每次更新发布后 24h新功能预告提示推送频率过高会导致用户关闭通知权限。建议每月不超过 8 条推送且推送内容要提供实际价值福利、好友互动。七、推送调试7.1 真机调试asyncfunctiondebugPush(context:common.UIAbilityContext){// 检查推送权限constatManagerabilityAccessCtrl.createAtManager();constresultawaitatManager.checkAccessToken({token:atManager.getApplicationTokenSync(),permission:ohos.permission.PUSH});console.info(推送权限:${result0?已授权:未授权});// 获取 Tokentry{consttokenawaitpushService.getToken();console.info(当前 Token:${token});}catch(err){console.error(获取 Token 失败:${err.message});}}7.2 常见问题问题可能原因解决方法收不到推送未申请权限 / Token 未上报检查权限声明和设备 Token推送无点击回调未注册 click 事件添加on(click, handler)Token 为空网络问题 / 服务异常重试获取或重启应用推送 JSON 解析失败data 格式异常服务端确保 data 为 JSON 字符串八、节电与合规8.1 推送接收的电源策略// PushKit 接收推送不额外消耗电量// 系统级长连接应用无需保活// 但在 on(receive) 中做耗时操作会额外耗电// ✅ 推荐收到推送后只做轻量操作pushService.on(receive,(data:string){this.pendingPushdata;// 仅缓存});// 避免在回调中做网络请求或数据库写入8.2 隐私合规// 在隐私政策中声明推送服务constprivacyPolicy我们使用 PushKit 向您发送游戏活动通知和好友邀请。 您可以随时在系统设置中关闭推送通知权限。;// 首次启动时弹窗获取同意asyncfunctionshowPrivacyDialog(context:common.UIAbilityContext){consthasAgreedAppStorage.getboolean(privacyAgreed);if(!hasAgreed){constresultawaitpromptAction.showDialog({title:隐私政策,message:privacyPolicy,buttons:[{text:不同意,color:#E74C3C},{text:同意,color:#2ECC71},],});AppStorage.setOrCreate(privacyAgreed,result.index1);}}九、完整接入示例EntryComponentstruct PushDemo{StatehasPermission:booleanfalse;StatelastPush:string;aboutToAppear(){this.initPushService();}asyncinitPushService(){constctxgetContext()ascommon.UIAbilityContext;// 1. 请求权限this.hasPermissionawaitrequestPushPermission(ctx);if(!this.hasPermission)return;// 2. 注册监听this.registerPushListeners();// 3. 获取并上报 TokenawaitsetupPush(ctx);}registerPushListeners(){pushService.on(receive,(data:string){this.lastPushdata;// 更新 UI 角标});pushService.on(click,(data:string){// 路由跳转});pushService.on(token,(token:string){reportTokenToServer(token);});}aboutToDisappear(){// 取消注册推送监听pushService.off(receive);pushService.off(click);pushService.off(token);}}十、PushKit vs 其他通知方式维度PushKit本地通知WebSocket触发方服务端应用自身服务端在线要求设备联网即可无需联网需保持连接实时性秒级延迟精确定时毫秒级保活要求无需无需需保活电量消耗低系统长连接低高持续连接适用场景活动通知、召回每日提醒、闹钟实时对战、聊天总结PushKit 是 HarmonyOS 的远程推送服务通过on(receive)接收推送消息、on(click)处理点击跳转、on(token)管理设备 Token。核心要点权限在 module.json5 和运行时双重申请、 推送数据 JSON.parse 解析、 点击回调路由跳转、 Token 上报服务端、 推送频率适度防骚扰。下一篇将深入 ShareKit——分享战绩到社交平台。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源PushKit 官方文档PushKit API 参考AGC 推送服务推送权限申请通知栏与推送最佳实践WantAgent 跳转开源鸿蒙跨平台社区HarmonyOS 开发者官方文档第 152 篇addSlot 通知渠道第 154 篇ShareKit 分享

相关新闻

为什么90%的AI路径系统在雨天/晚高峰崩盘?资深LBS架构师首度公开时空约束建模的6个隐性变量

为什么90%的AI路径系统在雨天/晚高峰崩盘?资深LBS架构师首度公开时空约束建模的6个隐性变量

更多请点击: https://codechina.net 第一章:AI 配送路线优化 在城市物流日益复杂的背景下,AI 驱动的配送路线优化正成为提升时效性与降低碳排放的关键技术。传统基于规则或简单启发式算法的路径规划难以应对实时交通变化、动态订单涌入及多约…

2026/7/29 16:40:03 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-定时更新与动态卡片

HarmonyOS应用开发实战:猫猫大作战-定时更新与动态卡片

前言 HarmonyOS 的 Form Kit 支持定时更新卡片内容,让用户在不打开应用的情况下看到最新信息。在「猫猫大作战」中,我们将高分记录和每日签到状态展示在桌面卡片上,通过定时更新保持信息新鲜。 一、定时更新配置 // form_config.json — 卡…

2026/7/29 16:40:03 阅读更多 →
基于Python与OpenSCAD的盲文3D打印自动化工具链实践

基于Python与OpenSCAD的盲文3D打印自动化工具链实践

1. 项目概述:从文字到触觉的桥梁 最近在做一个挺有意思的小项目,起因是想给一位视障朋友送一份特别的生日礼物——一本刻有祝福语的立体盲文书。市面上虽然有现成的盲文书籍,但个性化定制几乎找不到,而且价格不菲。于是&#xff0…

2026/7/29 16:40:03 阅读更多 →

最新新闻

Unlock Music:5分钟快速解锁加密音乐的终极免费方案

Unlock Music:5分钟快速解锁加密音乐的终极免费方案

Unlock Music:5分钟快速解锁加密音乐的终极免费方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:/…

2026/7/29 16:50:07 阅读更多 →
别把大模型 API Key 写进 APK:移动 AI 应用接口防盗刷实践

别把大模型 API Key 写进 APK:移动 AI 应用接口防盗刷实践

别把大模型 API Key 写进 APK:移动 AI 应用接口防盗刷实践 移动 AI 应用要防止接口被盗刷,第一原则不是把长期 API Key 换一种藏法,而是让不可信的客户端不再持有长期主密钥。更可落地的做法是:客户端只申请短期、受范围约束的访…

2026/7/29 16:50:07 阅读更多 →
LinkSwift:解锁九大网盘下载自由的专业级解决方案

LinkSwift:解锁九大网盘下载自由的专业级解决方案

LinkSwift:解锁九大网盘下载自由的专业级解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…

2026/7/29 16:50:07 阅读更多 →
消息队列选型:Kafka、Pulsar 和 NATS 在 AI 场景下的差异

消息队列选型:Kafka、Pulsar 和 NATS 在 AI 场景下的差异

消息队列选型:Kafka、Pulsar 和 NATS 在 AI 场景下的差异 一、AI 工作流对消息队列的特殊要求:不止"发出去就行" 传统业务系统的消息队列关注点是吞吐量和可靠性——订单消息不能丢、支付消息要精确一次。但 AI 场景有自己特殊的需求维度&…

2026/7/29 16:50:07 阅读更多 →
计算机毕业设计之基于springboot的二手图书交易系统设计与实现

计算机毕业设计之基于springboot的二手图书交易系统设计与实现

信息技术是当今社会发展的重要方向之一,它已经深入到各个行业中。随着计算机技术的发展,信息技术已经从传统的数据处理转变为网络信息的处理和交互。在管理方面,通过信息管理技术,系统可以快速的处理大量的数据,并且能…

2026/7/29 16:50:07 阅读更多 →
084、LVGL日历日期选择与事件

084、LVGL日历日期选择与事件

LVGL日历日期选择与事件 一段让人抓狂的调试经历 上个月做智能家居中控屏,客户要求日历控件能高亮显示有预约的日期,点击日期弹出对应日程。我心想LVGL的日历控件(lv_calendar)不是现成的吗?结果一跑起来,点击日期没反应,高亮日期全乱套,回调函数里拿到的日期永远是1…

2026/7/29 16:49:07 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻