首页 > 解决方案 > React Native Expo IOS 限制接收 HTTP 请求

问题描述

我已经构建了一个 Express 服务器,但在使用 IOS 路由时遇到问题,我正在我的 IOS 手机上运行该应用程序。

我有一个 Expo 应用程序,我在 app.json 的 IOS 下添加了下面的 infoPlist

"infoPlist": {
        "supportsTablet": false,
        "infoPlist": {
          "NSAllowsArbitraryLoads": {
            "NSAllowsArbitraryLoads": true
          }
        }
      },

我只是想运行下面的提取,但我得到“网络请求失败”

  useEffect(() => {
  fetch("http://localhost:3000/api/listing")
    .then((response) => setData(response))
    .catch((error) => console.error(error))
    .finally(() => setLoading(false));
  }, []);

是否有当前的解决方法?

标签: iosreact-nativehttpexpo

解决方案


默认情况下,iOS 将阻止任何未使用 SSL 加密的请求。如果您需要从明文 URL(以 http 开头的 URL)获取,您首先需要添加应用程序传输安全异常。如果您提前知道需要访问哪些域,则只为这些域添加例外会更安全;如果直到运行时域才知道,您可以完全禁用 ATS。但请注意,从 2017 年 1 月起,Apple 的 App Store 审核将需要合理的理由来禁用 ATS。有关详细信息,请参阅 Apple 的文档。

在反应本机站点链接上

在我看来,最好使用 https url 来获取


推荐阅读