HMS Core 推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。开发者通过集成推送服务,可以向客户端应用实时推送消息,构筑良好的用户关系,提升用户的感知度和活跃度。

推送服务由两个部分构成:

  • 从云端到终端的消息推送通道:开发者可以通过推送服务,向客户端应用实时推送数据和消息。

  • 终端消息展示:位于通知中心、终端桌面横幅、终端锁屏等多种类型和样式的消息展示。

具体可以参考以下官方文档:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/service-introduction-0000001050040060?ha_source=hms1

在应用接入推送服务的过程中,开发者还向我们反映了一些隐私安全、报错、消息延迟等问题。这里小编进行了汇总分析,希望为开发者们提供参考、进一步提升服务质量。

1. 隐私安全问题

应用使用华为推送服务,库为“ com.huawei.hms:push:3.0.3.301 ”,上架华为应用市场后提示 :尊敬的开发者,您好!审核过程系统检测得出您的应用存在获取用户的软件安装列表敏感信息,因此需要在隐私政策内说明,如应用通过xx方式获取xx范围的软件安装列表信息,覆盖xx范围的用户并通过xx方式服务于xx功能。

具体可参考链接:

https://developer.huawei.com/consumer/cn/doc/distribution/app/FAQ-faq 第1.2的相关内容,最终以审核结果为准。

"stackTrace":["android.app.ApplicationPackageManager.getInstalledPackages(ApplicationPackageManager.java:886)","com.huawei.hms.aaid.c.a.a(AaidUtils.java:91)","com.huawei.hms.aaid.c.a.b(AaidUtils.java:141)","com.huawei.hms.aaid.HmsInstanceId.getId(HmsInstanceId.java:97)","com.huawei.hms.aaid.HmsInstanceId.getToken(HmsInstanceId.java:179)"," 

解决方式 : SDK 5.1.1.301 之前版本会通过getInstalledPackages方法读取应用列表,解决方式升级版本。

2. 桌面角标注意事项

1) add_num字段

支持:EMUI版本8.0.0(及以上)推送服务应用版本8.0.0(及以上)

set_num字段

支持:EMUI版本9.1.0(及以上)推送服务应用版本10.1.0(及以上)

2) 华为桌面角标开发

支持平台、系统版本:EMUI 4.1 及以上

桌面版本:6.3.29

支持设备:华为设备

3) 下发消息参数、add_num参数、integer类型

描述:应用角标累加数字非应用角标实际显示数字,为大于0小于100的整数。例如,某应用当前有N条未读消息,若add_num设置为3,则每发一次消息,应用角标显示的数字累加3,为N+3。

4) class参数、String参数、必选参数

描述:应用入口Activity类全路径。样例:com.example.hmstest.MainActivity

5) set_num参数、integer类型

描述:角标设置数字,大于等于0小于100的整数。例如,set_num设置为10,则不论发了多少次消息,应用角标显示的数字都是10。如果set_num与add_num同时存在时,以set_num为准。
(说明:发送消息同时设置应用角标数字,“class“必填,“add_num”和”set_num”参数选填。若“add_num”和“set_num”都设置为空,则应用角标数字默认加1。)

3. 消息延迟问题

有的开发者反应,用户延迟几分钟才能接收到应用的推送消息。针对该问题,由于华为推送消息量每日达百亿级,因此无法保证单条消息到达的实时性。官网有相关描述:充分保障通知栏消息的送达,十分钟在线到达率高达99%。感谢开发者们的理解与支持!

4. 收不到推送消息

消息可分为两种:通知栏消息收到后由通知栏展示;透传消息不在通知栏展示由onMessageReceived回调方法返回数据。开发者需要注意,首先确认发消息的类型,不要误把透传消息当成通知栏消息发送造成通知栏没有收到消息的假象。其次,是否使用了foreground_show 字段参数为 false,由onMessageReceived回调方法返回数据不会在通知栏展示。问题定位后,解决方法如下:

  1. 通知栏消息收不到
  • 查看是否关闭了应用允许通知、渠道通知开关等拦截消息开关。

  • 排查发消息与端侧token是否一致,尝试使用重新获取push token后下发消息。

  • 可在AGC平台选中推送服务、自助分析查询消息下发状态,也可以查询token是否可用。

  1. 透传消息收不到:确认应用是否存活。当应用是存活状态时,不管是前台或后台,下发后使用onMessageReceived回调方法返回数据,应用被杀都是收不到的。

5. 设置自定义铃声

1) 自定义渠道方式下,channel_id字段在应用的数据处理位置为中国区时无效。也就是说自定义渠道方式设置铃声不可行,直接使用sound字段进行设置即可。

2) 铃声资源必须放在应用的/res/raw路径下,支持的铃声格式包括MP3、WAV、MPEG等。

3) sound字段参数格式为:/raw/shake。

4) 使用sound字段需要在创建渠道前,渠道创建后使用无效,可以将应用卸载重装、清除请用数据后重新测试。

6. 通知亮屏

1) 确保亮屏打开开关,设置->通知中心->更多通知设置->通知亮屏提示。

2) 确保通知中心锁屏通知总开关是开启的,设置->通知中心->锁屏通知。

3) 确保应用通知渠道开关是开启的,设置->通知中心->您的应用->选择渠道->锁屏通知。

7. 检测出隐式PendingIntent的问题

目前此问题在6.3.0.302版本已全部处理,请开发者参考更新文档:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-app-version-0000001074227861?ha_source=hms1

8. 推送接口返回503

错误代码503是指流控限制。目前默认6000qps,建议每次发送的token数量不超过100,可以每次调用60,每秒调用100次。具体参照以下链接:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/faq-0000001050042183#section196822541234?ha_source=hms1

9. 获取token时OnNewToke不回调

1) 排查是否有多个“service”继承HmsMessageService类,只能有一个类继承HmsMessageService。

2) 检查测试设备是否为EMUI10及以上版本,如果是,则不回调,直接在getToken方法中返回token。

3) 是否覆写onNewToken(String token, Bundle bundle)方法,Push SDK版本低于5.0.4.302,请覆写onNewToken(String token)方法。可以复写onTokenError方法查看是否有返回错误信息。

4) 若为EMUI10及以上版本,且配置了自动获取token,则需要检查配置是否正确,参考文档(自动初始化):https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-client-dev-0000001050042041#section13546121751811?ha_source=hms1

5) 检查manifest文件,是否注册您自己的“service”,该服务继承HmsMessageService类,用于接收Token。 参考文档(配置manifest.xml文件):https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-cfg-manifest-0000001050042037

6) 检查push开关是否打开:登录AppGallery Connect网站,

  • a. 开发-概览-右侧的齿轮小图标-API管理-打开Push服务。

  • b. 开发-增长服务-推送服务-点击开通,修改服务状态为已开通。

以上两种情况,如果是刚刚修改完,需要等待15分钟时间才能生效。

10. 错误码:907135000

在Service调用推送初始化:
public static void startPushService(Context c) {
    context = c;
    hwApi = new HuaweiApiClient.Builder(context)
            .addApi(HuaweiPush.PUSH_API)
            .addConnectionCallbacks(pushHw)
            .addOnConnectionFailedListener(pushHw).build();
    hwApi.connect();
}
连接有错误:@Override
public void onConnectionFailed(ConnectionResult result) {
    PluginLog.i(TAG, "onConnectionFailed, ErrorCode: " + result.getErrorCode() );
}
输出:PushHw: onConnectionFailed, ErrorCode: 907135000

错误码907135000的排查步骤:

1) 请检查“agconnect-services.json”文件中的app_id、package_name参数是否与端侧一致。

2) 请检查“build.gradle”文件中证书签名是否配置。

3) 有可能是HMS Core(APK)缓存导致的,请卸载并重新更新HMS Core(APK),然后断开网络再连接,再打开应用。

4) 建议用华为终端先测试,华为推送会依赖HMS Core(APK),在华为手机上都会预装这个应用,非华为手机上没有预装。

5) 关于签名证书:你应用的签名文件和用你签名文件生成的SHA256指纹证书要匹配,而且项目中配置签名文件的地方也得和以上两个用的签名文件一致。

6) 检查接送文件位置,要在项目级的app目录下。

7) 在文件头apply plugin: 'com.android.application’下一行添加如下配置。

apply plugin: ‘com.huawei.agconnect’ (app模块build文件有没有加apply plugin。)

8) 手动在manifest加一下appid的值验证下是不是配置的问题。比如:

<meta-data
android:name=“com.huawei.hms.client.appid”
android:value=“102729671” />

9) 可能是配置混淆问题,可以参看:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-obfuscation-scripts-0000001050176973

欲了解更多HMS Core推送服务详情,请参阅:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/service-introduction-0000001050040060?ha_source=hms1

华为开发者联盟官网
获取开发指导文档
参与开发者讨论请到Reddit社区
下载demo和示例代码请到Github
解决集成问题请到Stack Overflow

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐