You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HMS Push Kit Rest API 技术咨询:如何获取推送Token(Push Id)

获取HMS Push Token的完整指南

嘿,别着急!我来帮你理清HMS Push Token的获取逻辑——其实你可能混淆了客户端和服务器端的操作,Token不是直接通过Rest API获取的,而是由你的安卓客户端生成后上传到自己的服务器,之后推送时就用存在服务器里的这个Token。下面一步步给你讲:

一、客户端安卓应用获取Token(核心步骤)

这是最关键的一步,因为Push Token是绑定到用户设备和你的应用的,由HMS SDK在客户端生成:

  • 首先确保你的安卓应用已经完成HMS Push SDK的基础集成:比如添加agconnect-services.json配置、在build.gradle里引入依赖这些基础操作(如果还没做,先搞定这个)。
  • 在客户端代码中调用HMS的API获取Token,建议放在Application的onCreate或者首页Activity的onCreate中,用异步线程执行避免阻塞主线程:
import com.huawei.agconnect.config.AGConnectServicesConfig;
import com.huawei.hms.aaid.HmsInstanceId;
import com.huawei.hms.common.ApiException;

// 异步线程中执行Token请求
new Thread(() -> {
    try {
        // 从配置文件中读取App ID(也可以直接复制agconnect-services.json里的app_id值)
        String appId = AGConnectServicesConfig.fromContext(getApplicationContext())
                .getString("client/app_id");
        // 请求Token,第二个参数固定传"HCM"
        String pushToken = HmsInstanceId.getInstance(getApplicationContext())
                .getToken(appId, "HCM");
        
        // 拿到Token后,一定要上传到你自己的服务器存储起来!
        // 比如通过你自己的后端接口把pushToken和用户ID关联保存
        Log.i("HMS_PUSH", "成功获取Token: " + pushToken);
    } catch (ApiException e) {
        // 获取失败时根据错误码排查,比如1000表示配置错误,2000表示网络问题等
        Log.e("HMS_PUSH", "获取Token失败,错误码: " + e.getStatusCode());
    }
}).start();
  • 配置必要权限和Token更新监听:
    1. 在AndroidManifest.xml中添加基础权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
    1. 监听Token变化:Token可能会因卸载重装、系统更新等情况失效或变更,所以要实现回调及时更新服务器的Token:
      创建一个继承自HmsMessageService的服务类:
    public class PushTokenUpdateService extends HmsMessageService {
        @Override
        public void onNewToken(String newToken) {
            super.onNewToken(newToken);
            // 收到新Token,立即上传到服务器更新存储
            Log.i("HMS_PUSH", "收到新Token,更新服务器: " + newToken);
        }
    }
    
    然后在AndroidManifest中注册这个服务:
    <service
        android:name=".PushTokenUpdateService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

二、服务器端的Token使用与管理

你之前的推送Rest API请求里的token字段,就是客户端上传到你服务器的那个字符串。HMS并没有提供直接查询Token的Rest API,因为Token属于用户设备的敏感信息,需要由你自己的服务器存储和管理。

如果是涉及主题订阅相关的操作(比如用户订阅某个主题后,你要推送主题消息),可以使用HMS的主题订阅API,但这和获取Token是两回事。

最后小提醒

  • 测试时可以先在客户端Log中打印Token,手动复制到你的推送请求里测试,确认能收到通知后,再完善服务器存储Token的逻辑。
  • 正式环境下要注意Token的安全性,不要在日志中明文打印,传输时用HTTPS。

内容的提问来源于stack exchange,提问作者Luca Parlapiano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:14:08