调用API接口返回成功,但设备却没有收到消息怎么办?
最新资讯 • U-Push运营助手
9579
2018-5-9
摘要:
调用API接口返回成功,但设备却没有收到消息怎么办?

API接口是异步的,返回结果是成功的,只是表明友盟服务器端接受了当次推送指令,不一定表示成功下发到设备。 API接口只会做一些基本的校验,比如接口鉴权判断、检查是否漏掉了必填的参数等,API请求接受成功之后,会把要发送的任务投递到发送队列,由后续的处理程序从队列中拉取出来后,进行发送。

一般来说,如果设备的长连接在线的话,因为我们服务器的并发处理能力非常强大,基本上可以做到设备能第一时间收到消息,即发即到。

设备没有收到消息,可能存在多种原因:

·对于Android来说,最常见的原因就是设备长连接不在线了(长连接在线的含义是: 设备联网&后台的PushService存在&PushService与服务器端建立了长连接),这种情况可以按照常见的步骤来排查

·对于iOS来说,一般的原因都是APNs的两套开发环境搞错了,苹果严格区分开发环境(sandbox)和生产环境(prod),在开发测试阶段,只能用开发环境测试, 只有App Store上线后,才可以用生产模式发消息,对应的API后台参数是: prod_mode.

当然还有一种可能性,就是API发送的参数是有问题的,导致消息不能在客户端被正确的解析处理,这个也就是经常有开发者反馈,在友盟网站后台发消息是成功的,但是自己用API发送就收不到消息(其实不一定是收不到,很可能消息已经成功送达了App,但是没有被正确的展示出来),这种情况下,我们网站上提供了两个非常有用的查询工具帮助开发者定位问题:

·工具" --> "Device查询" --> "设备消息查询",可以看消息的状态是否是“已送达”,“已送达”的含义是消息已经成功下发到设备,且已经路由到App了。出现这种情况的原因很可能就是因为API发送的时候,参数不正确或者有遗漏,导致消息不能正确展示出来:

·“新建消息” --> "预览" --> "发送内容", 可以查看网站发送消息的post body内容体,对照你自己的API发送内容看一下,参数是否正确。