常见问题

来自ixintui推送文档
跳转至: 导航搜索

服务端常见问题

1、消息推送的原理是什么?
Android推送原理: 我们的SDK会和我们的服务器建立长连接,并定时发送心跳,以维持长连接,当用户有消息发送的时候,消息会首先到达我们的服务器,然后我们根据用户的AppKey和token来发送消息。如果用户不在线,我们会把消息缓存,当用户在线的时候,如果消息还在有效期,把消息发送给用户。
IOS推送原理: 用户通过Api把消息发送给我们的服务器,之后我们的服务器根据用户提供的证书和Apple服务器建立连接,把消息和对应的设备token发送给Apple服务器,Apple通过Apns把消息发送给用户。

2、广播、点博、组播的区别?
广播是把消息发送给所有的用户, 点播是发送给特定的一个用户, 组播是把消息发送给特定的一群用户。

3、提示发送的数据不是json
检查是否设置了HTTP的Header,头部需要设置Content-type: application/json

4、签名错误
请检查签名的计算方式,我们提供了几种常见语言的签名计算方式的示例。如果有问题,请联系我们的客服。

5、推送点播消息,返回的result为0,但收不到消息?
result为0代表消息已经到达ixintui的服务器, 但如果设备不在线,不会收到消息。

6、发消息的时候,设备离线,之后在线后能否收到消息?
对于android设备:如果消息还在有效期内, 当设备再次在线的时候,用户将收到该消息。
对于IOS设备: APNS对离线消息只缓存一条,故如果用户离线,再次在线时只能收到最后一条离线消息

7、发送消息后,应用没有立刻收到消息,有延时?
这种情况是因为客户端不在线,等客户端在线的时候,会立刻收到推送消息。可能的原因是,客户端的网络不好,客户端的服务被杀死。

8、对离线用户的消息缓存有上限吗?
Android:广播消息没有上限,只要消息在有效期内,消息就会被缓存。 点播消息每个设备的每个应用缓存16条。
IOS: APNS对离线用户的消息只缓存最后一条,所以IOS的离线消息只有一条。

9、有大量的设备要发送消息,如果加快发送速度?
如果是给所有的用户发送消息,可以使用广播接口。
如果这群用户具有共同的特征,可以对这些用户打tag,之后使用组播接口按tag发送消息。
如果必须通过token来发送大量的设备,可以通过批量token的接口来送,一次可以发送1000条消息。

10、发消息,提示result为700
这种情况为token不存在,或者是token错误,或者该token连续6个月没有连接我们的服务器,我们认定为非法token,不再支持给该用户发送消息。

11、 别名是什么?具体怎么使用
别名是指对手机设备起另外一个名字,这样发送点播的时候可以使用token, 也可以给这个token起一个别名, 以后发送消息,可以直接使用这个别名来发送。
如果应用有自己的账号体系,可以在用户登录后把这个设备绑定一个别名, 这样, 发送消息可以直接用应用那边的账号来发送就可以了。
一个别名可以对应多个设备, 但最多不能超过10个。超过10个后,最不活跃的设备的别名将会解除。
按别名发送可以分为两个接口, 一个接口是对该别名的所有用户发送消息,另一个接口是对该别名最后活跃的用户发送消息。
V2版本中,userScope等于3,是给只给别名对应的最后活跃的1个设备发送;userScope等于4,给别名对应的所有设备发送。
V1版本中, 通过alias_send_all来控制, alias_send_all等于0, 是给只给别名对应的最后活跃的1个设备发送;alias_send_all等于1,给别名对应的所有设备发送。


收不到消息的检查流程
1.设备是否联网,网络是否通畅稳定
2.发送消息的AppKey是否和设备上安装的AppKey一致
3.应用在设备安装后是否在联网状态下至少打开过一次
4.是否推送消息被禁止
5.是否发送的透传消息,没法直观的看到消息
6.设备上ixintui的后台服务是否被杀死

服务端返回码

错误码 原因
401 参数错误、格式错误、签名错误等
400 格式错误
403 非白名单ip,不能发送消息
405 不支持GET方法,请使用POST,并检查接口名字
500 内部错误,请联系客服
700 token不存在、非法token或token已经6个月未联网
1001 输入的数据不是json,检查是否设置头部
1002 非法操作,socket-mis接口暂不支持广播
1003 非法操作socket-mis接口暂不支持批量点播

Android SDK常见问题

1. 为什么debug版本推送正常,release版本启动抛异常?
请检查代码混淆配置,确保添加keep代码,以避免SDK被二次混淆编译,同时避免使用-allowaccessmodification选项

2. 如何判断集成是否正确?
请调用PushSdkApi.getSdkIntegrationInfo方法,这个方法会检查manifest以及文件是否包含在工程中,还会检查必需的receiver是否存在,此方法会返回文本信息说明错误或是集成正确。

3. 以前集成过旧版本sdk,集成新版本sdk时需要有何修改?
请检查sdk压缩包中的相关集成文档说明,一般情况没有改动,如有改动会在文档有说明。另外请参考问题2

4. 为什么集成时出现provider相关错误或异常?
请检查manifest中的provider相关配置,特别注意authorities是否设置正确,正确的authorities应该是您的包名加“请检查manifest中的provider相关配置,特别注意authorities是否设置正确,正确的authorities应该是您的包名加“.ixintui.push.provider”

5. 为什么推送没收到?
请检查您手机网络状况,推送服务是否正常启动(通过系统->应用管理->正在运行),如果服务在运行,请把您的token获取一下发给我们,让我们工作人员检查消息发送的日志

6. 服务被杀死了,为什么没有重启?
在android5.0及以上版本,还有MIUI等系统,系统清理行为会把应用所有进程杀死,对此,我们的服务使用了多种保活方式,在5.0、6.0版本上服务存活表现非常优秀。

IOS SDK常见问题

1. content-available参数的含义
content-available是用来实现静默推送功能的,ios7以上携带content-available: 1 参数,应用受到通知后可以在后台运行运行一段代码,实现后台更新等操作。

2. category参数的含义
category参数是iOS8以上系统新增的,可以使用户不进入程序在通知栏上进行一些快捷操作。