Q1、产品开通推送服务后,是需要上架才能使用吗?
A:只开通推送服务不需要上架的。
Q2、遇到503,消息流控限制是多少?每秒、每天限制多少?限制调用次数还是推送给用户的个数?
A:不同应用是不一样的,一般的应用默认消息流控是针对单个应用3000QPS(每秒不能超过3000个token数)
另外,流控的标准是满足30分钟能推完全网用户,推荐大家精准选择人群推送,减少量,提升体验。如果超过这个值,推送将被系统流控返回503错误。如果觉得当前流控限制太小,可以进行申请,申请条件是:华为用户月活跃量需要达到500W(小于500W的不予申请)。可以从开发者联盟后台Push报表中查看,选择相对应应用,和上月量既可以看到30日活跃用户数。再联系客服申请。
另外,针对单个设备每天不能推送超过10万条/天,否则将进行推送权益限制,需要整改并申报整改方案重新申请push权益。
Q3、接入sdk成功后,能收到推送消息,把我的app关闭进程后收不到推送消息?
A:从通知栏消息和透传消息的方案对比可以发现通知栏消息是可以在应用杀死的时候进行消息推送的。此外支持NC(Notification Center)功能的手机:部分EMUI4.0和4.1的手机,以及EMUI5.0及之后的华为手机。
Q4、推送成功收不到消息,推送返回:{“message”:”success”,”requestID”:”1523868*****28427182”,”resultcode”:0}
A:排查步骤:
1、网络不稳定,切换稳定网络进行测试。
2、检查手机是否为EMUI8.0.0系统,如果是早期的EMUI8.0,则要升级尝试(在手机会员服务——服务——升级尝鲜),或者用用targetversion用26以下的进行编译来规避这个问题。排查EMUI版本太低、小于4.1也是不支持的。
3、检查终端token是否正确,在联盟后台进行推送,如果联盟后台也推送失败则是token已失效、或者手机配置有问题,进行token检查和手机权限设置。如果能推送成功则,调用接口时参数配置错误导致。建议参考示例代码:http://developer.huawei.com/cons … sample_code_agent_s
4、如果是通知消息检查通知的playload中的msg、appPkgName等配置是否正确。
5、华为移动服务的缓存问题,一般清理数据及缓存,并停止华为移动服务。
6、检查CP是否使用的是老版本的的push,老版本sdk会出现消息延时很明显的情况,以及收不到推送,需要尽快切换到新版本。
7、搜集日志(详情见日志抓取办法),搜索pushlog,里面有 。。。msg。。。A1,无法进行进一步判断的还是请我们专业人来判断吧!
rspPushMessage the response msg is :A1,msgId:C6311444207B6DC6,flag:00(android/null:78)
这个代表消息已经到达了手机端
I/PushLogAC3009(14197): [Thread-29-1060]enter bdReport, cmd =cosa, msgid = 671088641, eventId = 4,notifyId= -1(pushagent/CommFun.java:587)
此处的eventId标记了为什么通知栏消息没有弹出的原因
eventId = 1 :点击打开
eventId = 2 :用户清除
eventId = 3 :命令字不支持
eventId = 4 :应用不存在
eventId = 17 :Activity 没有配置exported: true
Q5、调用推送消息的接口能直接返回推送的结果吗?返回结果中应用级错误码中包含“终端不在线”,“应用已卸载”等状态
A:调用推送接口不能直接放回推送状态,他可以返回本次推送的结果,换句话就是说本次推送成功与否,失败的话,则提供返回码。另一个角度,消息发送是有延迟和有效时间的,这时候返回显然不合理,推送状态可以从回执中进行获取。
Q6、指纹证书填错了,请问如何能修改。
A:现在指纹可以在联盟后台进行修改,最多支持配置5个指纹。
Q7、消息回执时,若群发中有一些是不能回执的,是否影响群发中另一部分的回执?
A:不会影响其他的
Q8、如何判断是否是华为手机
A:
可以判断是否安装华为移动服务
PackageInfo pi = null;
PackageManager pm = this.getPackageManager();
int hwid = 0;
try {
pi = pm.getPackageInfo(“com.huawei.hwid”, 0);
if (pi != null) {
int result = pi.versionCode;
Log.i(“hwid”,”“+result);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
result 有数据的话就是了
Q9、判断是否为EMUI系统
A:可以判断是不是EMUI系统:
int emuiApiLevel = 0;
try {
Class cls = Class.forName(“android.os.SystemProperties”);
Method method = cls.getDeclaredMethod(“get”, new Class[]{String.class});
emuiApiLevel = Integer.parseInt((String) method.invoke(cls, new Object[]{“ro.build.hw_emui_api_level”}));
} catch (Exception e) {
e.printStackTrace();
}
emuiApiLevel 大于0就是了
更多问题见
https://club.huawei.com/thread-16930815-1-1.html
有疑问可在此提问
https://club.huawei.com/forum.php?mod=viewthread&tid=16931014&page=1&extra=#pid368649444