Android端Pusher设置Authorizer时报FileNotFoundException,鉴权请求无法到达服务器
问题描述
我正在使用Pusher Channels实现实时功能,尝试订阅私有频道时,鉴权API请求无法到达我方服务器。该鉴权接口在前端侧可正常调用,仅Android端存在异常。我使用的是最新版本的Pusher SDK,且已反复核对App Key和Cluster配置无误。


以下是性能分析器的截图:

编辑补充:已新增错误日志
相关代码如下:
fun getMapAuthorizationHeaders(token: String): HashMap<String, String> { val authHeader = HashMap<String, String>() authHeader["Accept"] = "application/json" authHeader["Authorization"] = "Bearer $token" //authHeader["Content-Type"] = "application/x-www-form-urlencoded"; return authHeader }
问题排查方案
- 先恢复Content-Type请求头配置:Pusher Android SDK默认的私有频道鉴权请求采用
application/x-www-form-urlencoded格式提交参数,你注释了该请求头配置,如果服务端对请求Content-Type有强制校验,会直接拒绝该请求,先取消该行注释验证是否解决问题。 - 检查Android网络权限与明文请求限制:确认AndroidManifest.xml已经添加
INTERNET权限,若你的鉴权接口为HTTP协议,Android 9及以上系统默认禁止明文请求,需要在application节点添加android:usesCleartextTraffic="true"配置,或直接将鉴权接口升级为HTTPS协议。 - 校验鉴权端点配置:检查Pusher初始化时传入的
authEndpoint路径是否完全匹配服务端接口,注意路径大小写、末尾斜杠、参数后缀是否和前端调用的接口完全一致,Android端不会自动补全路径规则。 - 开启Pusher debug日志定位问题:初始化Pusher时开启debug日志,可直接查看鉴权请求的完整地址、请求头、参数、响应状态,快速判断是请求未发出还是服务端拦截:
val options = PusherOptions() .setCluster("你的集群ID") .setAuthorizer(HttpAuthorizer("你的鉴权接口地址") { override fun getHeaders(): MutableMap<String, String> { return getMapAuthorizationHeaders("你的token") } }) val pusher = Pusher("你的App Key", options) pusher.connect() // 打印debug日志查看请求详情 Log.d("Pusher调试", pusher.debugLog)
内容的提问来源于stack exchange,提问作者Nickola Jarjous
相关产品推荐
相关产品推荐

