【问题标题】:fetch is redirected to custom url scheme and failsfetch 被重定向到自定义 url 方案并失败
【发布时间】:2017-09-21 14:24:12
【问题描述】:

我有一个 react native 项目,我通过 fetch() 向一个页面发送一个 http 请求,该页面将我重定向到一个 url 方案,如 appname://data=123456。

我需要从位置 url 中提取这些数据,然后继续向 api 发出其他请求。问题是ios有这个问题。 Android 很好地解决了它,它可以正常工作,但在 ios 上我得到“网络请求失败”的结果。

经过较长时间的调试,我发现 react native 背后的实现捕获了一个错误,指出“不支持的 URL”。

有什么办法可以做到这一点吗?我正在尝试使用自定义 URL 方案启动应用程序,现在写入 safari 的 appname:// 启动了我的应用程序,但它对请求没有影响。

我用于请求的代码:OAUTH2_IS_URL 是 https://login.server.com 和操作 /api/login

 const postData = {username, password};
    return fetch(BuildConfig.OAUTH2_IS_URL + action, {
        method: 'POST',
        credentials: 'same-origin',
        mode: 'same-origin',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: Object.keys(postData).map(key => key + "=" + 
     encodeURIComponent(postData[key])).join('&')
    });

【问题讨论】:

    标签: ios http react-native


    【解决方案1】:

    我从您的问题中了解到,您正在尝试使用来自 fetch 请求的 URL 打开一个应用程序。

    如果是这种情况,您应该使用 react-native 的 Linking API。您可以使用canOpenURL() 测试该URL 是否支持,然后使用openURL() 启动应用程序

    Linking.canOpenURL(url).then(supported => {
      if (!supported) {
        console.log('Can\'t handle url: ' + url);
      } else {
        return Linking.openURL(url);
      }
    }).catch(err => console.error('An error occurred', err));
    

    【讨论】:

    • 问题是url永远不会从请求中到达,我调试了android上的url。在 ios 上我从来没有收到它,而是收到一个错误。
    猜你喜欢
    • 2013-12-23
    • 2013-11-19
    • 1970-01-01
    • 2021-07-25
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多