- 开发准备,包括配置应用签名、开通推送服务。
- 获取Push Token。
相关概念
- Push Kit(推送服务)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。所有HarmonyOS应用可通过集成Push Kit,实现向应用实时推送消息,使消息易见,构筑良好的用户关系,提升用户的感知度和活跃度。
- Push Token标识了每台设备上每个应用,开发者可以调用场景化消息接口,根据Token来推送消息。
- 组件:Demo中主要使用了Text、Button、Image等组件。
- pushService:本模块提供Push Kit的基础能力,包括获取和删除Push Token、绑定和解绑账号和接收场景化消息的功能。
源码下载
PushKit_CodeLab_Clientdemo_ArkTs.zip
环境搭建
我们首先需要完成HarmonyOS开发环境搭建,可参照如下步骤进行。
软件要求
-
DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。
-
HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。
硬件要求
-
设备类型:华为手机、平板和2in1设备。
-
HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。
环境搭建
-
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,详情请参考配置代理。
-
开发者可以参考以下链接,完成设备调试的相关配置:
开发准备
使用本demo前,您需首先完成以下操作:
- 配置签名证书。
- 开通推送服务。
配置应用签名
需要首先在AppGallery Connect上注册成为开发者,并创建HarmonyOS应用。详情可参见指导。
创建应用后,请您将应用的包名替换到AppScope/app.json5文件中。
替换包名后,您还需配置应用签名,具体操作可参见指导。
// app.json5
{
"app": {
"bundleName": "xxx.xxxx.xxxxx", // 替换为您的包名
"vendor": "demo",
"versionCode": 1000000,
"versionName": "1.0.0",
"icon": "$media:app_icon",
"label": "$string:app_name"
}
}
开通推送服务
完成应用签名后,您需要继续在AppGallery Connect上操作,开通推送服务。详情可参见指导。
选择“我的项目”,在项目应用列表中选择需要开通推送服务的应用。
在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,在弹出的提示框中点击“确定”。
代码结构解读
本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在源码下载或gitee中提供。
├─entry/src/main/ets // 代码区
│ ├─abilities
│ │ ├─MainAbility.ets // 主程序入口类
│ │ └─TestClickActionAbility.ets // 通知栏点击事件能力类
│ ├─pages // 存放页面文件目录
│ │ ├─ClickActionInnerPage.ets // 点击跳转落地页面
│ │ ├─GetTokenPage.ets // 申请Token页面
│ │ └─MainPage.ets // 应用主页面
│ ├─utils // 存放工具类文件目录
│ │ └─Logger.ets // 日志类,管理系统日志
└─entry/src/main/resources // 资源文件目录
应用主页面
主页面展示申请Push Token功能,点击按钮即可跳转到Token申请页面。
页面框架
页面框架包含标题和按钮两个部分,分别对应代码中的Text组件和Button组件。
// MainPage.ets
build() {
Flex({ direction: FlexDirection.Column }) {
Text($r('app.string.MainAbility_desc'))
.fontSize(36)
.fontWeight(FontWeight.Bold)
.fontColor('#000000')
.height(48)
.width('80%')
.margin({top: '7.2%', left: '5%'})
Button({type: ButtonType.Normal}){...}
.width('90%')
.height(140)
.margin({ top: '21%', left: '5%' })
.backgroundColor('#fff8f1e3')
.borderRadius(24)
.onClick(this.getToken)
}
.linearGradient({
direction: GradientDirection.Top,
repeating: true,
colors: [['#FFFFFF', 0], ['#FFFFFF', 1]]
})
.height('100%')
.width('100%')
}
按钮组件
按钮组件包含标题、下划线、图片三个部分,分别对应代码中的Text,Rect和Image组件。
// MainPage.ets
Button({type: ButtonType.Normal}){
Row() {
Column() {
Text($r('app.string.apply_token_title'))
.fontSize(24)
.fontWeight(FontWeight.Bold)
.fontColor('#000000')
Rect()
.radius(1)
.fill('#0A59F7')
.height(2)
.width(50)
}
.width(190)
.height('100%')
.alignItems(HorizontalAlign.Start)
.padding({ left: 20, top: 50 })
Column() {
Image($r("app.media.push"))
.width(100)
.height(100)
}
.padding({ left: 30, top: 5 })
}
.width('100%')
.height(140)
}
.width('90%')
.height(140)
.margin({ top: '21%', left: '5%' })
.backgroundColor('#fff8f1e3')
.borderRadius(24)
.onClick(this.getToken)
跳转申请Token页面
点击Button按钮会调用getToken方法,路由到申请Token页面。
// MainPage.ets
private getToken = () => {
router.pushUrl({ url: 'pages/GetTokenPage' });
}
获取Push Token能力
Push Token标识了每台设备上每个应用,开发者调用getToken()方法向Push服务端请求Token,获取到Token后可以将Token上报到您自己的应用服务器。后续您可以调用场景化消息接口,根据Token来推送消息。
页面框架
申请Token页面包含标题、分割线、Token展示、按钮四个部分,分别对应代码中的Text、Divider、Text、Button组件。
// GetTokenPage.ets
build() {
Flex({ direction: FlexDirection.Column }) {
Row() {
Text($r('app.string.apply_token_title'))
.fontSize(24)
.fontWeight(FontWeight.Bold)
.fontColor('#ff100f0f')
.height(30)
.width(220)
.margin({ left: 4 })
}
.height(32)
.width(124)
.margin({ top: 32, left: 12 })
Divider().color('gray').strokeWidth(1)
Text(this.showFlag)
.fontColor(Color.Blue)
.width('80%')
.height('20%')
.margin({ left: '10%'})
Flex({ direction: FlexDirection.Column,
justifyContent: FlexAlign.SpaceBetween }) {
Button($r('app.string.apply_token_button'))
.width('80%')
.height(40)
.margin({ left: '10%' })
.backgroundColor('#fff38a07')
.fontColor('#ffffffff')
.fontSize(24)
.fontWeight(FontWeight.Bold)
.borderRadius(20)
.onClick(this.getTokenSyn)
}
.height(144)
.margin({ top: 36 })
}
.linearGradient({
direction: GradientDirection.Top,
repeating: true,
colors: [['#FFFFFF', 0], ['#FFFFFF', 1]]
})
.height('100%')
.width('100%')
}
申请Token
点击申请Token按钮,调用push组件的getToken方法获取Token。
// GetTokenPage.ets
private getTokenSyn = async () => {
try {
const pushToken = await pushService.getToken();
hilog.info(0x0000, 'testTag', 'Get push token successfully.');
this.showFlag = 'Successfully got push token, please save it.';
} catch (err) {
this.showFlag = 'Failed to get push token, please check the error log!';
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, 'testTag', 'Get push token catch error: %{public}d %{public}s', e.code, e.message);
}
}
总结:
-
ArkUI基础组件、容器组件的使用。
-
使用页面路由跳转到指定页面并传递所需参数。
-
申请Push Token。
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击)希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取~限时开源!!
鸿蒙(HarmonyOS NEXT)最新学习路线
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
HarmonyOS Next 最新全套视频教程
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
- ArkTS语言
- 安装DevEco Studio
- 运用你的第一个ArkTS应用
- ArkUI声明式UI开发
- .……
《鸿蒙开发进阶》
- Stage模型入门
- 网络管理
- 数据管理
- 电话服务
- 分布式应用开发
- 通知与窗口管理
- 多媒体技术
- 安全技能
- 任务管理
- WebGL
- 国际化开发
- 应用测试
- DFX面向未来设计
- 鸿蒙系统移植和裁剪定制
- ……
《鸿蒙进阶实战》
- ArkTS实践
- UIAbility应用
- 网络案例
- ……
大厂面试必问面试题
鸿蒙南向开发技术
鸿蒙APP开发必备
请点击→纯血版全套鸿蒙HarmonyOS学习资料
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。