HarmonyOS鸿蒙Next开发,在开发推送时候遇到问题

HarmonyOS鸿蒙Next开发,在开发推送时候遇到问题 我们的APP是类似微信的即时通讯的软件,在用户互发消息的时候需要有推送通知,下面是我的步骤:

在这里已经获取到pushToken,然后把这个token上传到服务器,在发送消息的时候,服务器用这个token通过http请求调用鸿蒙的https://push-api.cloud.huawei.com/v3/%s/messages:send地址发送推送,但是我客户端这边接收不到推送,麻烦大佬看下应该在哪里接收推送

2 回复

在HarmonyOS Next开发推送功能时,常见问题包括推送服务未正确配置、权限声明缺失、设备Token获取失败或推送通道连接异常。请检查是否已集成最新版Push Kit SDK,并在配置文件中声明必要权限(如ohos.permission.NOTIFICATION_CONTROLLER)。确保在真机或已签名环境的模拟器上调试,因为推送服务依赖有效的设备凭证。

更多关于HarmonyOS鸿蒙Next开发,在开发推送时候遇到问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的描述和代码截图,问题核心在于缺少接收推送消息的事件监听。你正确获取了pushToken并上传到服务器,服务器也调用了推送接口,但客户端没有设置接收推送的监听器。

在HarmonyOS Next中,接收推送消息的核心步骤如下:

  1. 在应用启动时(例如在EntryAbilityonCreate中)订阅推送消息事件。 这是你代码中缺失的关键部分。你需要使用pushManager.on方法来监听消息到达事件。

  2. 处理接收到的消息。 在事件回调中,你可以获取到推送的消息内容,并执行显示通知、更新应用数据等操作。

修改建议:

在你的EntryAbility中,添加以下关键代码:

import { pushManager } from '@kit.PushKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ... 其他初始化代码 ...

    // 订阅推送消息事件
    try {
      pushManager.on('messageArrived', (data: { message: string }) => {
        // 当推送消息到达时,会触发此回调
        console.info('Push message arrived: ' + JSON.stringify(data));
        // 在此处处理消息:
        // 1. 解析data.message(通常是JSON字符串),获取消息内容。
        // 2. 创建本地通知,提醒用户。
        // 例如:
        // this.showNotification(data.message);
      });

      pushManager.on('pushTokenResult', (data: { token: string }) => {
        // 可以在这里处理token获取结果(虽然你已经在其他地方获取了)
        console.info('Push token: ' + data.token);
      });
    } catch (error) {
      const err: BusinessError = error as BusinessError;
      console.error('Failed to subscribe to push events. Code: ' + err.code + ', message: ' + err.message);
    }
  }

  // 示例:创建通知的方法
  private showNotification(messageContent: string) {
    // 使用@kit.NotificationManagerKit创建并发布通知
    // ... 具体通知创建代码 ...
  }

  onDestroy(): void {
    // 取消事件订阅
    pushManager.off('messageArrived');
    pushManager.off('pushTokenResult');
  }
}

关键点说明:

  • 事件名: 监听的消息事件名称为 'messageArrived'
  • 数据处理: data.message 字段包含了服务器下发的消息体。你需要根据和服务器约定的格式(通常是JSON)进行解析,提取标题、内容、跳转参数等。
  • 前台与后台: 无论应用处于前台还是后台,只要进程未被销毁,messageArrived事件都会被触发。如果应用进程已退出,系统会直接根据推送消息生成通知栏消息。
  • 通知展示: 为了确保用户能在通知栏看到消息,你需要在messageArrived回调中或使用服务器推送时预置的通知参数,调用HarmonyOS的NotificationManager来发布一个本地通知。
  • Token获取: 你代码中pushManager.getPushToken()的方式是正确的,获取到的Token需要上传到你的应用服务器。

检查清单:

  1. 权限: 确保在module.json5文件中已声明ohos.permission.NOTIFICATION权限。
  2. 配置文件: 确认应用配置文件正确,特别是app.json5中的bundleName与在AGC(AppGallery Connect)上申请推送服务时填写的包名完全一致。
  3. 服务器发送: 确认服务器调用华为推送API时,请求体格式正确,特别是token数组里填写的与你客户端上传的token一致,并且消息体(message字段)结构符合规范。
  4. 事件监听: 如上所述,在Ability中正确添加了pushManager.on('messageArrived', ...)事件订阅。

添加事件监听代码后,你的应用就能接收到服务器下发的推送消息了。请首先在onCreate中订阅事件,这是最关键的步骤。

回到顶部