React Native Android:Fetch Requests仅在React Native编译器连接时工作

bzzcjhmw  于 6个月前  发布在  React
关注(0)|答案(6)|浏览(68)

我在Android上(使用React Apollo)向我的API发出获取请求时遇到了一个奇怪的问题。在开发版本和发布版本中,获取都不起作用。只要我打开React Native编译器并启用 Enable Network Inspect,请求就可以工作。
我不知道如何调试的请求,因为他们没有显示在调试器没有网络检查启用。
有什么想法我怎么能找到错误,或者你们中的任何人遇到了同样的问题?

qgzx9mmu

qgzx9mmu1#

可能是API问题。我以前遇到过同样的问题。React-native-debugger处理URL重定向。当你使用react-native-debugger时,会在http请求中添加一些额外的逻辑。验证请求,http://https://,header,cookie等。
(Postman与react-native-debugger相同)

gdx19jrr

gdx19jrr2#

尝试将android:usesCleartextTraffic=“true”放入android清单文件中
https://stackoverflow.com/a/61280828/8613355

xzlaal3s

xzlaal3s3#

作为默认在 AndroidManifest.xml 在Android目标的Android文件夹的调试目录+28水平android:usesCleartextTraffic=“true”被放置,但应用程序的发布模式,如果你的Android目标版本>= 28和你的目标Web服务没有SSL你应该添加android:usesCleartextTraffic=“true”手动在 ./android/app/src/mainAndroidManifest.xml应用程序和问题将解决。

dxpyg8gm

dxpyg8gm4#

以下事情可以帮助:
1.来自服务器的CROS策略错误。请与您的后端团队联系。
1.如果您使用的是http url。您需要在manifest中的应用程序级别使用usesCleartextTraffic = true。但使用usesCleartextTraffic = true被视为漏洞之一。
1.如果你想调试axios请求,你需要使用axios拦截器https://axios-http.com/docs/interceptors

xfyts7mz

xfyts7mz5#

这大概是因为,当问到这个问题时,React Native不支持fetch,如果我没有弄错的话-并且在当时调试时,你必须注意一些奇怪的事情,例如调试器可以访问实际React Native运行时中不可用的对象/方法。
当调试器被连接时,代码在调试器中而不是在实际设备上执行,从而产生这种效果。
您可以在这里看到,fetch在2018年的版本中需要polyfill。
我们不得不处理这种情况下的其他挫折,比如在第一次连接调试器时,我们的应用程序的身份验证需要重新验证。

w8f9ii69

w8f9ii696#

同样的问题我也只在android平台上运行,在iOS上运行良好**。所以,对我来说,下面的方法运行良好**(React native版本0.71)**,
我需要创建证书为我的API域使用openssl命令如下,

openssl s_client -servername your_api_domain -connect your_api_domain:443 </dev/null | sed -n -e '/-.BEGIN/,/-.END/ p' > mycert.pem

openssl x509 -in mycert.pem -outform der -out mycert.cer

字符串

注意:您需要将your_API_domain替换为您在应用中实际使用的API域

然后使用上面的命令创建证书,你需要像下面的图片所示的地方通过创建原始目录下res目录


的数据

相关问题