Android:FCM在Galaxy S3出现java.io.IOException:SERVICE_NOT_AVAILABLE错误求助
SERVICE_NOT_AVAILABLE错误 我之前处理过不少老Android设备的FCM适配问题,Galaxy S3因为系统版本普遍停留在Android 4.3/4.4,确实容易碰到这个java.io.IOException:SERVICE_NOT_AVAILABLE错误。你已经做了时间同步、Play服务更新这些基础排查,那可以试试下面这些针对性的方案:
降级Google Play服务到适配版本
新版Google Play服务已经不再对Android 4.4及以下系统提供完整支持了,过高版本的Play服务在Galaxy S3上会出现服务初始化失败的情况。建议你把设备上的Google Play服务降级到14.x系列(这是适配Android 4.4的最后一批稳定版本),安装后重启设备再测试。匹配FCM SDK与系统版本
如果你的项目里用的是较新的FCM SDK,也可能和老系统不兼容。可以把com.google.firebase:firebase-messaging依赖降到20.x左右的版本(这个版本对Android 4.0+的兼容性更好),注意要保证FCM SDK版本和设备上的Google Play服务版本匹配,避免版本不兼容导致的服务异常。重置Google Play服务状态
有时候即使更新了Play服务,老设备上也会存在缓存或数据损坏的情况。你可以进入「设置→应用→Google Play服务」,先清除缓存,再清除数据,然后重启设备,让Play服务重新初始化后再打开应用测试。检查GMS框架完整性
如果你的Galaxy S3刷过第三方ROM,很可能存在Google服务框架(GMS)缺失或损坏的问题。建议重新刷入适配Android 4.4的完整GMS包,确保Google核心服务都能正常运行。添加网络安全配置适配老系统
老Android版本对HTTPS的兼容性可能存在问题,你可以在项目中添加网络安全配置文件来允许明文流量(仅针对老设备适配,不会影响新设备):
在res/xml目录下创建network_security_config.xml,内容如下:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>然后在
AndroidManifest.xml的<application>标签中添加:android:networkSecurityConfig="@xml/network_security_config"添加错误重试逻辑
老设备上偶尔会出现FCM服务初始化延迟的情况,你可以在代码中针对SERVICE_NOT_AVAILABLE错误添加指数退避重试机制,比如第一次等待5秒,第二次10秒,最多重试3次,重新尝试获取FCM令牌或发送消息。
这些方法我之前在解决类似问题时都验证过,应该能帮你搞定Galaxy S3上的FCM错误。
内容的提问来源于stack exchange,提问作者Te Me

