在 iPhone 上使用 expo 时无法从 React Native 应用程序连接到 socket.io 服务器

Posted

技术标签:

【中文标题】在 iPhone 上使用 expo 时无法从 React Native 应用程序连接到 socket.io 服务器【英文标题】:cannot connect to socket.io server from React Native app when using expo on iPhone 【发布时间】:2022-01-16 02:49:00 【问题描述】:

由于某种原因,我可以从浏览器连接到服务器,但不能从 iPhone 连接。有谁知道为什么?我感觉这与 SSL 证书有关,但我在网上找不到可行的解决方案。

服务器:

from flask import Flask
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on('connect')
def handle_json(json):
    print('CONNECTED')

if __name__ == '__main__':
    socketio.run(app)

客户:

import  StatusBar  from 'expo-status-bar';
import React from 'react';
import  Text, View  from 'react-native';
import  io  from "socket.io-client";

var socket = io("http://127.0.0.1:5000/")

class App extends React.Component 
  render() 
    return (
      <View>
        <Text> test </Text>
        <StatusBar style="auto" />
      </View>
    );
  
  


export default App

【问题讨论】:

尝试连接时出现的错误或警告是什么? 当我添加时,socket.on("connect_error", (err) =&gt; console.log("connect_error due to " + err.message);); 我不断得到connect_error due to xhr poll error 这是一个使用 Node js 的例子。您可以尝试从服务器端socketIo(server, rejectUnauthorized: false, ... 进行配置,但如果这样做,您将容易受到 MITM 攻击 【参考方案1】:

服务器和 iPhone 在同一个网络中吗?如果不是,您的服务器的防火墙规则可能不允许请求。默认情况下,ios 不允许 http(不安全)请求。您必须更改您的 info.plist 文件,您必须添加 NSAppTransportSecurity 密钥。

【讨论】:

以上是关于在 iPhone 上使用 expo 时无法从 React Native 应用程序连接到 socket.io 服务器的主要内容,如果未能解决你的问题,请参考以下文章

expo项目,无法通过扫描二维码将项目加载到iPhone,如何解决?

无法在 Expo CLI 模拟器上运行 React Native App

无法将 babel-plugin-module-resolver 与 expo 和 react-native 一起使用

开玩笑在 Expo 上运行时无法识别 .jsx 文件

如何在发布到应用商店之前在设备上测试 ipa 应用(来自 expo)

无法使用本地网络上的 expo 客户端连接到 expo xde