Xamarin Forms Android项目Firestore报Bad gRPC response错误怎么解决?
解决方案
针对Xamarin Forms Android项目中Firestore抛出的Grpc.Core.RpcException(协议降级到HTTP/1.1)问题,以下是几个可行的修复方案:
强制gRPC使用HTTP/1.1
异常提示协议降级,说明Android环境下HTTP/2可能存在兼容性问题。初始化FirestoreDb时指定通道选项强制使用HTTP/1.1:var channelOptions = new Grpc.Core.ChannelOption[] { new Grpc.Core.ChannelOption(Grpc.Core.ChannelOptions.HttpProtocolVersion, Grpc.Core.HttpProtocolVersion.Http11) }; var firestoreSettings = new FirestoreSettings { ChannelOptions = channelOptions }; // 替换为你的项目ID和凭证 FirestoreDb db = FirestoreDb.Create("your-project-id", GoogleCredential.FromFile("service-account.json"), firestoreSettings);确认网络权限配置
检查AndroidManifest.xml中是否添加了必要的网络权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />更新Firebase相关NuGet包
将Google.Cloud.Firestore、Xamarin.Firebase系列NuGet包更新到最新稳定版,旧版本可能存在Android平台的gRPC兼容性Bug。配置网络安全策略
若测试环境中存在明文HTTP拦截问题,添加网络安全配置允许明文流量:- 在
Resources/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>标签中引用该配置:<application android:networkSecurityConfig="@xml/network_security_config"> <!-- 其他配置 --> </application>
- 在
验证模拟器网络连接
确保Android模拟器能正常访问外网,可尝试在模拟器浏览器中打开Firebase官网,或切换模拟器的网络模式(如从WiFi切换到蜂窝网络)测试。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

