react-native-aliyun-push
react-native-aliyun-push copied to clipboard
targetSdkVersion 28 android 9真实环境下getDeviceId无效的解决办法
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。 也就是说targetSdkVersion 28 android 9默认需要使用https协议,而阿里云推送的SDK暂时并没有判断是否为android 9设备,默认采用http请求,以下为抓包记录:
06-14 06:46:13.562 I/beacon (11159): url=http://beacon-api.aliyuncs.com/beacon/fetch/config/byappkey
06-14 06:46:13.564 I/accs.Utils(11159): setMode mode:0
06-14 06:46:13.574 I/accs.AccsClientConfig_27545180(11159): build config:AccsClientConfig{mAppKey=27545180, mAppSecret=bf84dfe879693c7254a579bf4e1f3bc6, mInappHost=acs4public.m.taobao.com, mChannelHost=accscdn4public.m.taobao.com, mSecurity=2, mAuthCode=null, mInappPubKey=-1, mChannelPubKey=-1, mKeepalive=true, mAutoUnit=true, mConfigEnv=0, mTag=27545180, mDisableChannel=false
06-14 06:46:13.575 D/NetworkSecurityConfig(11159): No Network Security Config specified, using platform default
06-14 06:46:13.579 I/beacon (11159): Cleartext HTTP traffic to beacon-api.aliyuncs.com not permitted
06-14 06:46:13.579 I/beacon (11159): java.io.IOException: Cleartext HTTP traffic to beacon-api.aliyuncs.com not permitted
06-14 06:46:13.579 I/beacon (11159): at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
06-14 06:46:13.579 I/beacon (11159): at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
06-14 06:46:13.579 I/beacon (11159): at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
06-14 06:46:13.579 I/beacon (11159): at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
06-14 06:46:13.579 I/beacon (11159): at com.alibaba.sdk.android.beacon.b$a.a(Unknown Source:47)
06-14 06:46:13.579 I/beacon (11159): at com.alibaba.sdk.android.beacon.b.a(Unknown Source:60)
06-14 06:46:13.579 I/beacon (11159): at com.alibaba.sdk.android.beacon.Beacon.d(Unknown Source:8)
06-14 06:46:13.579 I/beacon (11159): at com.alibaba.sdk.android.beacon.Beacon.b(Unknown Source:0)
06-14 06:46:13.579 I/beacon (11159): at com.alibaba.sdk.android.beacon.Beacon$BeaconHandler.handleMessage(Unknown Source:71)
06-14 06:46:13.579 I/beacon (11159): at android.os.Handler.dispatchMessage(Handler.java:106)
06-14 06:46:13.579 I/beacon (11159): at android.os.Looper.loop(Looper.java:193)
06-14 06:46:13.579 I/beacon (11159): at android.os.HandlerThread.run(HandlerThread.java:65)
06-14 06:46:13.579 I/beacon (11159): [fetchByAppKey] result:
06-14 06:46:13.579 I/BeaconConfigManager(11159): beacon onUpdate
06-14 06:46:13.584 D/MPS:AppRegister(11159): Looping Prepared.
06-14 06:46:13.584 D/MPS:AppRegister(11159): Looping handleMessage: 1
06-14 06:46:13.585 D/MPS:AppRegister(11159): getLooper called.
06-14 06:46:13.585 E/MPS:AppRegister(11159): is debug:false
06-14 06:46:13.585 D/MPS:AppRegister(11159): vip init.
06-14 06:46:13.588 D/MPS:AppRegister(11159): Catch StopProcessException: 网络连接失败,请检查网络配罿errorCode:10109
解决办法:
第一种:将targetSdkVersion
降到27或27以下
第二种:在app/src/main/res/xml
目录下,新建文件network_security_config.xml
,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
修改AndroidManifest.xml
:
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
/>
此bug在调试环境下无法复现,只有在真实环境下才会出现。
之前解决http请求问题已经加了这些了,但是还是getDeviceId failed
添加了上面的,getDeviceID 可以了,但是app 会闪退
添加了上面的,getDeviceID 可以了,但是app 会闪退
添加上面的配置后,还需要修改AndroidManifest.xml 中 添加:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
There are still problems