WdBly Blog

懂事、有趣、保持理智

WdBly Blog

懂事、有趣、保持理智

周维 | Jim

603927378@qq.com

Code Push Android报错:[CodePush] Network request failed

自搭建的本地微软Code Push服务,在release包上,部分Android设备上无法检测更新,在模拟器上能检测更新。 在控制台中输出了Network request failed错误

前台检测更新的状态也切换到了 An unknown error occurred状态

场景

自搭建的code push服务, 在项目MainAppliction.java中配置了服务器地址为电脑的IP地址

protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new CodePush( "My Production Key", getApplicationContext(), BuildConfig.DEBUG, "http://192.168.199.199:3000/" ) ); }

测试

在项目中, 我使用codePush.sync检测更新。

CodePush.sync( { updateDialog: true, installMode: CodePush.InstallMode.IMMEDIATE }, this.codePushStatusDidChange, this.codePushDownloadDidProgress );

打包Ios -> 在真机中安装 -> 发布更新

code-push release-react CodePushIos ios -d Production

打开安装好的App, 会弹出提示更新。

测试Android时出现了问题, 在安装好App且发布新版本后:在安卓机中没有任何更新提示。

检查控制台发现输出了错误**[CodePush] Network request failed**

经过测试发现, 这种错误只会出现在Android 9+的机器上。

最终确定了是Android 9+不支持直接访问http协议的接口。

解决: 因为是测试环境所以使用的是本机的code-push服务,没有上Https, 但是在线上使用带Https的域名即可。

备选方案:

1、在app/src/main/res/xml文件夹下新建 network_config.xml文件

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>

2、在app/src/main/AndroidManifest.xml使用配置文件

<application android:networkSecurityConfig="@xml/network_config" ... >

更多其他关于code-push的问题请参考React-Native 搭建本地Code-Push服务