在 Android <= 9 上,gRPC 的 SSL 加密算法默认使用了 TLSv1.3,这可能会导致一些旧设备的请求失败。可以通过强制使用 TLSv1.2 或更早的版本来解决该问题。
在 gRPC 客户端中添加以下代码,指定要使用的 SSL 协议版本:
import io.grpc.okhttp.OkHttpChannelBuilder;
import okhttp3.TlsVersion;
import java.util.Arrays;
import java.util.List;
...
OkHttpChannelBuilder channelBuilder = OkHttpChannelBuilder.forAddress(HOST, PORT);
// 指定要使用的 SSL 协议版本
List tlsVersions = Arrays.asList(TlsVersion.TLS_1_2, TlsVersion.TLS_1_1, TlsVersion.TLS_1_0);
channelBuilder.connectionSpec(new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(tlsVersions)
.build());
ManagedChannel channel = channelBuilder.build();
另外,也可以通过在服务端禁用 TLSv1.3 的方式来解决该问题,但这可能会影响到其他客户端的连接。具体实现可根据自己的业务需求进行调整。