当前位置: 首页 > news >正文

同一设备多账号登录,如何避免消息推送“串门”?

对各应用厂商而言,推送通知消息是App提高用户活跃度和转化率的高性价比营销工具。然而,当一个用户设备登录多个账号时,开发者可能会遇到同一条消息在同一设备的不同账号上重复展示的问题,这不仅降低了消息推送的精准度,还可能对用户造成困扰。

为解决这一问题,HarmonyOS SDK推送服务(Push Kit)推出了通知消息账号校验功能。该功能允许开发者根据终端设备上不同账号的属性来推送消息,确保通知精准地发送给对应设备上的对应账号。例如,在华为手机上,某个应用同时登录了账号A和账号B。当账号A切换至账号B后,原本发送给账号A的通知消息在到达设备后将不会展示,从而避免账号B看到账号A的消息。

错误示例:同一设备账号A切换至账号B后,接收并展示账号A的通知消息

若要实现账号校验功能,其关键便在于profileId。profileId是应用内账号id匿名标识,无论用户是选择华为账号作为应用登录账号,还是选择使用应用账号直接登录账号,该profileId都是应用通过账号映射的唯一匿名标识。所以我们需要为待绑定的账号生成一个非空唯一的profileId,这里不建议使用真实的账号id,推荐使用账号id自行生成对应的匿名标识,能与该账号id建立唯一映射关系即可,生成算法无限制。

那么,当用户选择华为账号作为应用登录账号并登录账号A成功后,开发者可调用Push Kit绑定接口bindAppProfileId()将已生成的账号A的profileId绑定到当前设备的应用token上。Push Token标识了每台设备上的每个应用,是Push Kit实现消息推送的前提条件,应用服务器在发送通知消息时token中若携带该账号A的profileId,则只有当前设备登录的华为账号为账号A时,才会展示通知消息;若不携带profileId,则无论当前设备登录的华为账号是否为账号A,都正常展示通知消息。

下面,我们来看一下实现推送服务账号校验功能的具体开发步骤。

开发步骤

    import { pushService } from '@kit.PushKit';import { hilog } from '@kit.PerformanceAnalysisKit';import { BusinessError } from '@kit.BasicServicesKit';import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';export default class EntryAbility extends UIAbility {// 入参 want 与 launchParam 并未使用,为初始化项目时自带参数async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {// 获取Push Tokentry {const pushToken: string = await pushService.getToken();hilog.info(0x0000, 'testTag', 'Succeeded in getting push token');} catch (err) {let e: BusinessError = err as BusinessError;hilog.error(0x0000, 'testTag', 'Failed to get push token: %{public}d %{public}s', e.code, e.message);}// 上报Push Token并上报到您的服务端}}
  1. 为确保应用可正常收到通知消息,建议应用发送通知前调用requestEnableNotification()方法弹出提醒,告知用户需要允许接收通知消息。
    import { notificationManager } from '@kit.NotificationKit';import { BusinessError } from '@kit.BasicServicesKit';import { hilog } from '@kit.PerformanceAnalysisKit';import { common } from '@kit.AbilityKit';const TAG: string = '[PublishOperation]';const DOMAIN_NUMBER: number = 0xFF00;let context = this.getUIContext().getHostContext() as common.UIAbilityContext;notificationManager.isNotificationEnabled().then((data: boolean) => {hilog.info(DOMAIN_NUMBER, TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));if(!data){notificationManager.requestEnableNotification(context).then(() => {hilog.info(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification success`);}).catch((err : BusinessError) => {if(1600004 == err.code){hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);} else {hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);}});}}).catch((err : BusinessError) => {hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);});
  1. 为待绑定的账号生成一个非空唯一的profileId,调用bindAppProfileId()方法,添加当前设备上该用户与应用的关系。
    import { hilog } from '@kit.PerformanceAnalysisKit';import { pushCommon, pushService } from '@kit.PushKit';import { BusinessError } from '@kit.BasicServicesKit';// 定义需要绑定的profileId,建议使用账号id对应的匿名标识const profileId = '1****9';// 绑定应用账号pushService.bindAppProfileId(pushCommon.AppProfileType.PROFILE_TYPE_APPLICATION_ACCOUNT, profileId).then(() => {hilog.info(0x0000, 'testTag', 'Succeeded in binding app profile id');}).catch((err: BusinessError) => {hilog.error(0x0000, 'testTag', 'Failed to bind app profile id: %{public}d %{public}s', err.code, err.message);});
  1. 建议您将Push Token和生成的profileId上报到应用服务端,便于应用服务端向终端推送消息。

  2. 应用服务端调用REST API推送通知消息,通知消息示例如下:

    // Request URLPOST https://push-api.cloud.huawei.com/v3/[projectId]/messages:send// Request HeaderContent-Type: application/jsonAuthorization: Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****push-type: 0// Request Body{"payload": {"notification": {"category": "MARKETING","title": "普通通知标题","body": "普通通知内容","profileId": "111***222","clickAction": {"actionType": 0}}},"target": {"token": ["IQAAAA**********4Tw"]}}

消息发送成功后,Push Kit会先校验绑定账号(华为账号或应用账号)时的AppProfileType。

若绑定华为账号,则先校验下发消息中携带的profileId和之前应用绑定的profileId是否一致,再校验当前登录的华为账号和绑定时登录的分布式账号是否一致,若全部满足则展示消息,否则不展示消息。

若绑定应用账号则校验下发消息中携带的profileId和之前应用绑定的profileId是否一致,若满足则展示消息,否则不展示消息。

了解更多详情>>

访问推送服务联盟官网

获取账号校验功能开发指导文档

http://www.zskr.cn/news/22743.html

相关文章:

  • Character Animator 2025下载安装教程:2D角色动画软件零基础入门,附最新下载安装教程及激活方法
  • 2025年彩钢瓦/镀锌板/折弯件/C型钢/Z型钢/压型瓦/楼承板/次檩条厂家推荐排行榜,专业钢结构安装与定制加工实力解析
  • 完整教程:display ospf peer 概念及题目
  • 开源数据采集工具 logstash(收集日志)/telegraf(收集指标)
  • 2025 年堆高车厂家最新推荐排行榜:聚焦专利技术、华为等大牌合作案例及国内优质品牌解析手动液压/手动液压/卷筒/油桶堆高车厂家推荐
  • Excelize 开源基础库发布 2.10.0 版本更新
  • 高效搞定outlook大附件怎么发送的方法与技巧
  • HAP 签名提取:从定位到解析的实操指南
  • 内外网文件传输工具有哪些?最强合集在这里
  • 用delegate 和event实现事件(有参和无参,有返回值和无返回值)
  • 跨网文件交换系统是什么?解锁企业高效数据传输新姿势
  • 详细介绍:5、软件工程
  • vscode 里面的python切环境
  • ChromeOS融合Android技术栈,打造更智能的Chromebook体验
  • 2025 年最新推荐国际物流服务公司权威排行榜:聚焦海运快递跨境专线,助力商家选优质物流伙伴
  • 2025年国内高温隧道炉知名品牌推荐,固化炉,回流焊炉,连续式烘干线厂家供货商!
  • 2025年10月17日信息公布:太阳能路灯厂家最新推荐榜~覆盖乡村户外、单臂双臂、农村及5-8米LED款,精选优质路灯企业
  • 基于ZigBee的无线传感器组网
  • 2025 年立体画厂家最新推荐榜单:涵盖 3D 光栅立体画、立体光栅卡、3D 装饰立体画、三维立体画,助企业与消费者精准挑选优质品牌
  • 完整教程:「2025秋招季」AI简历筛选如何破解海选难题?
  • F1分数(F1-score)
  • ComfyUI InstantID 文生图,图生图完整运行指南
  • Qt项目作品在苹果macos上编译运行效果/视频监控系统/物联网平台等
  • 2025年靠谱的风机/离心风机/轴流风机生产企业排行榜-江苏中南鼓风机有限公司
  • 2025年口碑好的挤浆机/单螺旋挤浆机TOP品牌推荐厂家-滕州市建兴机械有限公司
  • git 舍弃当前所有修改
  • 2025.10.17——1蓝
  • Lean语言如何连接数学与编程
  • (二)CUDA在Windows系统上的编译运行方法
  • 251017