У меня есть приложение React Native, созданное с помощью Expo, которое я отключил от Expo для написания некоторого кода Android Native - он использует Feathers.js SocketIO для создания подключений, это прекрасно работает с HTTP, однако при использовании HTTPS Self Signed CertificateЯ получаю сообщение об ошибке тайм-аута сокет-соединения.
Тайм-аут соединения сокета
Трассировка стека:
node_modules/@feathersjs/authentication-client/lib/passport.js: 120: 25 в
node_modules / Reaction-native / Библиотеки / Core / Timers / JSTimers.js: 152: 14 в _callTimer node_modules / реагировать-native / Библиотеки / Core / Timers / JSTimers.js: 405: 17 в callTimers
node_modules / реагировать-нативный / Библиотеки / BatchedBridge / MessageQueue.js: 349: 47 в __callFunction
node_modules / реагировать-нативный / Библиотеки / BatchedBridge / MessageQueue.js: 106: 26 в
node_modules / реагировать-нативный /Библиотеки / BatchedBridge / MessageQueue.js: 297: 10 в __guard
node_modules / Reaction-native / Библиотеки / BatchedBridge / MessageQueue.js: 105: 17 в callFunctionReturnFlushedQueue
В своем коде React Native я устанавливаю соединение следующим образом:
const options = {
transports: ['websocket'],
forceNew: true,
rejectUnauthorized: false,
verify: false,
secure: true
};
const MOBILE_SERVER_IP = 'https://mypublicIP:3030';
const socket = io(MOBILE_SERVER_IP, options);
// Initilize the feathersClient object
const feathersClient = feathers()
.configure(socketio(socket))
.configure(
auth({
storage: AsyncStorage,
timeout: 60000
})
);
При создании приложения для тестирования на моем устройстве Android из Android Studio вместе с Expo, запущенной на стороне React NativeРанее я получал ошибки доверия цепочки сертификатов, пока не добавил следующий код в свой файл AndroidManifest.xml:
<application
android:networkSecurityConfig="@xml/network_security_config"
и создал новый файл в /res/xml/network_security_config.xml, в котором он находится внутри:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/cert"/>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
Я использую самоподписанный сертификат для разработки, и это, кажется, решило ошибки сертификата, которые я получал, однако я все еще получаю ошибки тайм-аута Socket Connection при попытке использовать мое приложение (ведение журналанапример).
Есть идеи?