GMS 23.34.14环境下原生App无法调用Nearby.CONNECTIONS_API问题求助
问题概述
我们正在开发一款集成GMS Nearby CONNECTIONS_API的安卓应用,用于实现设备间近场互联。在GMS 23.34.14环境下,多款设备出现API无法获取的问题:
- 应用内提示:
17:API is not available on this device - 近场连接功能完全失效
涉事设备
- Jetfon S20i(Android 9)
- Lenovo M10 HD 2nd Gen(Android 10)
- Lenovo Yoga11(Android 12)
- Lenovo B10 HD 2nd Gen(Android 11)
设备日志
Failed to start discovery. com.google.android.gms.common.api.ApiException: 17: API: Nearby.CONNECTIONS_API is not available on this device. Connection failed with: ConnectionResult{statusCode=INTERNAL_ERROR, resolution=null, message=null} at com.google.android.gms.common.api.internal.zad.zad(com.google.android.gms:play-services-base@@18.0.1:1) at com.google.android.gms.common.api.internal.zabq.zaE(com.google.android.gms:play-services-base@@18.0.1:7) at com.google.android.gms.common.api.internal.zabq.zaD(com.google.android.gms:play-services-base@@18.0.1:2) at com.google.android.gms.common.api.internal.zabq.zar(com.google.android.gms:play-services-base@@18.0.1:24) at com.google.android.gms.common.api.internal.zabq.onConnectionFailed(com.google.android.gms:play-services-base@@18.0.1:1) at com.google.android.gms.common.internal.zai.onConnectionFailed(com.google.android.gms:play-services-base@@18.0.1:1) at com.google.android.gms.common.internal.zzf.zzb(com.google.android.gms:play-services-basement@@18.0.0:2) at com.google.android.gms.common.internal.zza.zza(com.google.android.gms:play-services-basement@@18.0.0:3) at com.google.android.gms.common.internal.zzc.zze(com.google.android.gms:play-services-basement@@18.0.0:3) at com.google.android.gms.common.internal.zzb.handleMessage(com.google.android.gms:play-services-basement@@18.0.0:31) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:241) at android.os.HandlerThread.run(HandlerThread.java:67)
问题原因分析
- GMS版本兼容性断层:GMS 23.34.14版本对Nearby CONNECTIONS_API的访问规则做了调整,部分非Google认证的第三方设备的系统GMS配置未适配该版本的校验逻辑,导致API被拒绝提供服务。
- 依赖库版本不匹配:应用依赖的
play-services-base(18.0.1)、play-services-basement(18.0.0)属于较旧版本,无法兼容GMS 23.34.14的API调用协议,触发内部错误导致连接失败。 - 设备GMS认证缺失:涉事设备可能未通过Google Play官方认证,高版本GMS会限制未认证设备访问部分敏感API(如Nearby连接)。
解决方案
- 回退GMS版本验证:将设备的GMS核心服务降级到23.34.14之前的稳定版本(例如23.28.15),测试API是否恢复可用,确认问题是否由新版本GMS引入。
- 更新依赖库版本:升级应用中GMS相关依赖库到与23.34.14兼容的版本,修改
build.gradle配置:dependencies { implementation 'com.google.android.gms:play-services-base:20.1.0' implementation 'com.google.android.gms:play-services-nearby:18.3.0' } - 检查设备认证状态:进入设备
设置>Google>服务>设备认证,确认设备已通过Play认证;未认证设备需联系厂商获取认证,或更换Google官方认证设备进行开发测试。 - 添加API可用性前置校验:在调用Nearby API前增加校验逻辑,提前处理不可用场景:
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); int resultCode = apiAvailability.isGooglePlayServicesAvailable(context); if (resultCode != ConnectionResult.SUCCESS) { // 提示用户修复GMS服务 return; } // 校验Nearby API是否可用 if (!Nearby.getConnectionsClient(context).apiAvailability().isAvailable()) { // 提示用户设备不支持该API return; } - 确认权限配置:确保应用已申请并获取必要权限:
- Android 9及以下:
BLUETOOTH、BLUETOOTH_ADMIN、ACCESS_FINE_LOCATION - Android 10-11:额外添加
ACCESS_BACKGROUND_LOCATION - Android 12+:
BLUETOOTH_SCAN、BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT
- Android 9及以下:
内容的提问来源于stack exchange,提问作者大谷礼司
相关产品推荐
相关产品推荐

