39 NFC 碰一碰绑定:TapSharePage 与牵手交互
39 NFC 碰一碰绑定TapSharePage 与牵手交互前言图39 NFC 碰一碰绑定TapSharePage 与牵手交互 运行效果截图HarmonyOS NEXTNFCNear Field Communication是鸿蒙生态中一种重要的短距通信方式。在鹿鹿·笔迹心理分析App 中NFC 碰一碰被设计为双人关系绑定和快速分享的核心交互方式——两台鸿蒙手机靠近即可完成配对。本文以项目中 [TapSharePage.ets](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/TapSharePage.ets) 和 [BindRelationPage.ets](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/BindRelationPage.ets) 为例深入解析 NFC 碰一碰绑定的 UI 设计和业务流程。鸿蒙官方·NFC 开发指南developer.huawei.com项目源码仓库harmony-app GitHub图NFC 碰一碰双人绑定流程——从双端靠近到关系建立的完整时序关系数据库用户B 手机NFC 通道用户A 手机关系数据库用户B 手机NFC 通道用户A 手机开启 NFC 监听靠近 4cmonTagDiscovered 触发发送 userId archiveId接收数据解析用户信息创建 relation 记录回传确认消息创建 relation 记录显示牵手成功动画显示牵手成功动画一、NFC 绑定场景1.1 两个碰一碰场景场景触发页面数据传递目标快速分享TapSharePage笔迹分析报告分享给附近的人关系绑定BindRelationPage关系邀请码建立双人合盘1.2 UI 交互设计TapSharePage 的 NFC 交互区采用环形波纹动画模拟 NFC 通信过程// 三层波纹环 中心脉冲圆Stack(){// 外层波纹环Column().width(240).height(240).borderRadius(120).border({width:1,color:rgba(168,144,122,${this.rippleOpacity})}).scale({x:this.rippleScale,y:this.rippleScale})// 中层波纹环Column().width(190).height(190).borderRadius(95).border({width:1,color:rgba(168,144,122,${this.rippleOpacity0.1})}).scale({x:this.rippleScale*0.9,y:this.rippleScale*0.9})// 中心脉冲圆渐变色Column(){Text(⊕).fontSize(42).fontColor(Color.White)}.width(140).height(140).borderRadius(70).linearGradient({angle:0,colors:[[AppColors.WARM,0],[AppColors.PRIMARY,1]]}).scale({x:this.rippleScale*0.7,y:this.rippleScale*0.7})}二、脉冲动画设计2.1 循环脉冲StaterippleScale:number1.0StaterippleOpacity:number0.3StatepulseActive:booleantrueaboutToAppear(){this.startPulseAnimation()}privatestartPulseAnimation():void{constanimate(){if(!this.pulseActive)return// 放大 淡化animateTo({duration:1500,curve:Curve.EaseInOut},(){this.rippleScale1.3this.rippleOpacity0})// 复位 循环setTimeout((){animateTo({duration:0},(){this.rippleScale1.0this.rippleOpacity0.3})setTimeout(()animate(),200)},1500)}setTimeout(()animate(),500)}动画时序T0 脉冲开始放大透明度 0.3→0 T1500 放大到最大scale1.3透明度 0 T1500 瞬间归位scale1.0, opacity0.3 T1700 下一轮脉冲开始 ... 持续循环三、关系绑定的三种方式3.1 BindRelationPage 中的三种邀请方式[BindRelationPage.ets](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/BindRelationPage.ets) 提供了三种绑定方式privatereadonlymethods:InviteMethod[][{key:tap,icon:⌘,title:碰一碰邀请,sub:两台鸿蒙手机背靠背 · 自动配对,color:#5B7FB6},{key:qrcode,icon:⊞,title:扫一扫二维码,sub:让 TA 扫描你的关系码,color:#A8907A},{key:id,icon:#,title:输入 TA 的鹿鹿 ID,sub:8 位字母数字 · 例 LU 8847,color:#9BAEA8}]方式适用场景传输方式安全级别碰一碰邀请面对面NFC近距离高扫二维码线上/线下均可摄像头扫描中输入鹿鹿 ID远程网络传输中3.2 绑定流程状态机select选择邀请方式 │ ├──→ tap 碰一碰 ──→ sent等待接受 ├──→ qrcode ─────→ sent等待接受 └──→ id 输入 ────→ sent等待接受 │ ├── incoming收到邀请→ accept → success └── cancel/revoke → 回到上一页四、邀请卡 UI4.1 发送邀请视图选择邀请方式后进入 SentView等待接受状态BuilderSentView(){Column(){// 对方头像Stack(){Text(茂).fontSize(30).fontColor(Color.White)}.width(90).height(90).borderRadius(45).linearGradient({angle:135,colors:[[#F4D5C5,0],[#D9A689,1]]})Text(邀请已发送给).fontSize(12).fontColor(AppColors.TEXT_2)Text(茂 茂).fontSize(16).fontFamily(AppFonts.SERIF).fontColor(AppColors.TEXT)// 邀请卡Stack(){Text(PENDING).fontSize(9).letterSpacing(2)// ...// 关系码L · 8 4 7 · MText(L · 8 4 7 · M).fontSize(28).letterSpacing(8)// 倒计时还剩 03:48:12Row(){Text(⏱).fontSize(11)Text(还剩 this.timerDisplay · )Text(邀请将自动失效)}}}}4.2 倒计时实现StatetimerDisplay:string03:48:12privatetimerInterval:number-1startInvite(methodKey:string):void{this.stepsent// 每秒更新倒计时this.timerIntervalsetInterval((){constpartsthis.timerDisplay.split(:)lettotalSecparseInt(parts[0])*3600parseInt(parts[1])*60parseInt(parts[2])if(totalSec0)totalSec--this.timerDisplaythis.formatTimer(totalSec)},1000)}4.3 接受邀请privateasyncacceptInvite():Promisevoid{this.clearTimers()this.stepsuccess// 写入 DBconstpartnerArchiveIdawaitArchiveDao.create({user_id:userId,name:partnerName,relation:伴侣,// ...})awaitRelationDao.create({user_id:userId,partner_archive_id:partnerArchiveId,bound_method:this.selectedMethod,// ...})}五、分享内容卡片5.1 TapSharePage 的分享展示NFC 分享时展示的内容卡片包括缩略图和信息Row(){// 缩略图手写风格Stack(){Text(字).fontSize(24).fontFamily(AppFonts.SERIF).fontColor(AppColors.PRIMARY_DEEP).rotate({z:-3})}.width(46).height(46).borderRadius(12).linearGradient({angle:135,colors:[[#F0E5D2,0],[#E5D5BC,1]]})// 信息Column(){Text(给${this.userName}·${this.personalityType})Text(雷达·情绪·解读·拍摄原图).fontSize(11)}}5.2 分享成功反馈if(this.shareSuccess){Column(){Text(✅).fontSize(32)Text(分享成功).fontSize(14).fontWeight(AppFonts.W_BOLD)Text(对方已收到你的笔迹分析).fontSize(11)}}六、碰一碰交互总结6.1 完整的用户体验流程① 用户到达 TapSharePage ↓ ② 页面显示脉冲波纹动画等待 NFC 碰一碰 ↓ ③ UI 提示靠近对方鸿蒙手机背面 ↓ ④ 可选操作生成二维码 / 超级终端推送 ↓ ⑤ 分享成功 → 显示成功提示 ✅6.2 UI 与真实 NFC 的衔接项目目前使用模拟 UI 交互来演示 NFC 场景的流程。真实 NFC 开发中需要导入ohos.nfc.tag模块读取 Tag使用ohos.nfc.controller管理 NFC 开关使用kit.ConnectedTagKit实现设备间数据传输八、注意事项与常见问题8.1 开发注意事项在实际开发过程中需特别注意以下几点API 兼容性部分接口仅在特定 HarmonyOS NEXT 版本中可用需做版本条件判断权限模型采用静态声明module.json5 动态申请requestPermissionsFromUser的两阶段授权生命周期合理使用aboutToAppear()和aboutToDisappear()管理资源初始化与释放状态同步跨页面数据通过 AppStorage 共享组件内状态使用State/Prop/Link装饰器8.2 常见错误与解决方案常见问题快速排查表问题类型排查方向参考方法应用崩溃查看 hilog 错误日志hilog.error(TAG, ..., e.message)状态丢失检查 AppStorage 键名拼写统一使用常量管理键名动画不流畅避免在 animateTo 回调中执行 I/O动画与数据操作分离总结本文从 TapSharePage 和 BindRelationPage 出发解析了 NFC 碰一碰绑定的设计思路和 UI 实现碰一碰场景快速分享TapSharePage和关系绑定BindRelationPage波纹脉冲动画使用三层嵌套圆实现 NFC 通信等待效果三种绑定方式碰一碰 / 二维码 / ID 输入覆盖面对面和远程场景邀请状态机select → sent → incoming → success 四步流程倒计时管理setInterval 更新剩余时间数据持久化到 DB下一篇文章将介绍NFC Tag 读写与高级应用。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力参考资源NFC 开发概述[TapSharePage 项目源码](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/TapSharePage.ets)[BindRelationPage 项目源码](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/BindRelationPage.ets)ohos.nfc.controller APIohos.nfc.tag API鸿蒙短距通信HarmonyOS 开发文档七、NFC 碰一碰进阶数据格式设计7.1 NFC 数据包设计碰一碰传输的数据需要紧凑可靠项目中使用 JSON 格式// NFC 数据包格式interfaceNfcPayload{type:bind_relation|share_report// 操作类型userId:string// 发送方用户 IDarchiveId:string// 发送方档案 IDtimestamp:number// 时间戳防重放nickname:string// 显示名称}// 序列化为字节数组NFC 传输格式functionencodePayload(payload:NfcPayload):number[]{constjsonJSON.stringify(payload)constencodernewTextEncoder()returnArray.from(encoder.encode(json))}// 反序列化functiondecodePayload(bytes:number[]):NfcPayload{constdecodernewTextDecoder()constjsondecoder.decode(newUint8Array(bytes))returnJSON.parse(json)asNfcPayload}7.2 NFC vs 其他短距通信方式方式距离速度使用体验项目使用NFC 碰一碰 4cm慢极直觉靠近即触发✅ 绑定关系Bluetooth10m中需配对略繁琐❌Wi-Fi Direct100m快需搜索设备❌二维码扫描视线-需要截图分享✅ 分享报告7.3 NFC 权限与硬件要求在module.json5中声明 NFC 权限{ requestPermissions: [ { name: ohos.permission.NFC_TAG, reason: $string:nfc_permission_reason } ], deviceTypes: [phone], // 仅手机支持 NFC abilities: [ { skills: [ { actions: [ohos.nfc.tag.action.TAG_FOUND], uris: [{ type: tag-tech/NfcA }] } ] } ] }如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力

相关新闻

前端工程师的AI Agent转型之路:30篇调研精华+收藏必备学习指南

前端工程师的AI Agent转型之路:30篇调研精华+收藏必备学习指南

本文详细介绍了前端工程师如何转型AI Agent开发,包括前端与AI Agent的核心区别、前端工程师转型的独特优势、AI Agent开发工程师的前景、完整的4阶段转型学习路线以及丰富的学习资源推荐。文章强调前端技能在AI Agent开发中的重要性,并提供了实用的学习建…

2026/7/11 23:37:06阅读更多 →
装修、教育行业可以代理GEO优化吗

装修、教育行业可以代理GEO优化吗

装修行业和教育行业,是两个看似迥异但做GEO代理都极其适配的垂直赛道。它们有一个共同特征:客户在做决策之前,会在AI中反复搜索、对比、询问口碑。装修行业代理GEO的优势装修是典型的高客单价、低频消费、强本地化属性的行业。一个正在考虑装…

2026/7/11 23:37:06阅读更多 →
R语言 ggtern 3.5.0 三元相图实战:5步实现化学组分数据可视化与核密度叠加

R语言 ggtern 3.5.0 三元相图实战:5步实现化学组分数据可视化与核密度叠加

R语言 ggtern 3.5.0 三元相图实战:5步实现化学组分数据可视化与核密度叠加在材料科学和化学工程领域,三元相图是分析三种组分比例关系的核心工具。传统方法依赖商业软件,而R语言的ggtern包为科研人员提供了开源、可编程的解决方案。本文将带您…

2026/7/11 23:32:06阅读更多 →
C++异步编程四剑客:future、async、promise与packaged_task实战解析

C++异步编程四剑客:future、async、promise与packaged_task实战解析

1. 项目概述:为什么我们需要异步编程四剑客?如果你写过C的多线程程序,大概率经历过这样的场景:主线程启动一个后台任务去计算某个复杂结果,然后继续处理其他事情,等需要那个结果时,再回头去“取…

2026/7/12 4:22:40阅读更多 →
IEEE754 浮点数标准:从 32 位单精度到 64 位双精度的 3 种特殊值解析

IEEE754 浮点数标准:从 32 位单精度到 64 位双精度的 3 种特殊值解析

IEEE754浮点数特殊值深度解析:从二进制表示到实战避坑指南1. 浮点数标准中的三类特殊值在计算机科学的世界里,浮点数就像是一把双刃剑——它既能优雅地处理实数运算,又可能因为特殊值的出现让程序陷入难以察觉的bug。IEEE754标准中定义了三种…

2026/7/12 4:22:40阅读更多 →
昇腾CANN动态量化实战:破解AIGC模型在UGC场景的落地瓶颈

昇腾CANN动态量化实战:破解AIGC模型在UGC场景的落地瓶颈

1. 项目概述:当AIGC遇见UGC,最后一公里的算力博弈 最近在跟一个做UGC(用户生成内容)平台的朋友聊天,他提了一个很实际的问题:他们想上线一个AI头像生成功能,用户上传自拍,AI生成多种…

2026/7/12 4:22:40阅读更多 →
UniAD:端到端自动驾驶的统一认知架构解析

UniAD:端到端自动驾驶的统一认知架构解析

1. 项目概述:为什么UniAD不是又一个“堆参数”的自动驾驶模型?UniAD这个词最近在自动驾驶技术圈里出现的频率,已经快赶上“Transformer”本身了。但和很多被热炒的概念不同,UniAD不是实验室里跑个SOTA指标就收工的论文玩具——它是…

2026/7/12 4:22:40阅读更多 →
MapReduce WordCount 与 HDFS 文件读写:3个核心API实战解析

MapReduce WordCount 与 HDFS 文件读写:3个核心API实战解析

MapReduce WordCount 与 HDFS 文件读写:3个核心API实战解析1. 从WordCount看MapReduce设计哲学WordCount作为MapReduce的"Hello World",其简洁性背后隐藏着分布式计算的精妙设计。让我们解剖这段经典代码,理解Hadoop如何将复杂问题…

2026/7/12 4:22:40阅读更多 →
C/C++动态内存管理,智能指针及RAlI思想。

C/C++动态内存管理,智能指针及RAlI思想。

一、C 语言动态内存管理&#xff08;malloc/calloc/realloc/free&#xff09;四个核心函数都在 <cstdlib>&#xff0c;操作原始堆内存&#xff0c;只分配 / 释放内存&#xff0c;不会调用构造、析构函数。1、void* malloc(size_t size)分配 size 字节未初始化堆内存&…

2026/7/12 4:17:39阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比&#xff1a;全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时&#xff0c;第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件&#xff1a;5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL&#xff1a;跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比&#xff1a;全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时&#xff0c;第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件&#xff1a;5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL&#xff1a;跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/11 23:15:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/11 18:12:23阅读更多 →