Отсоединенное приложение React Native Expo, проблема с подключением к самоподписанному сертификату SSL с помощью Feathers.js SocketIO - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение 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 при попытке использовать мое приложение (ведение журналанапример).

Есть идеи?

...