Ionic Native: ZeroConf не работает на IOS

Поэтому я сделал приложение с Android-устройством в процессе разработки, и все работало нормально, как и должно быть. Затем я попытался собрать его для IOS, и ничего не получилось, я просто получил белый экран. Поэтому я сделал тестовое приложение, в котором был только плагин ZeroConf, и получил что-то совершенно простое.

zeroconf.watch('_scanassist._tcp.', 'local.').subscribe(result => {
   console.log('SOMETHING WAS FOUND!')
   alert('SOMETHING WAS FOUND')
 });

Только что протестировал его на Android, и все работало, как обычно, но на IOS - нет. Я выполняю этот код в конструкторе на моей главной странице, может быть проблема в этом? После этого я поместил его в setTimeout, и сторона загрузилась, но Zeroconf не выдал мне предупреждение, даже если он должен был дать мне его.

Ссылка на нативную страницу Ionic: https://ionicframework.com/docs/native/zeroconf/


person Yonathan    schedule 22.11.2018    source источник


Ответы (1)


Я не использовал Ionic ZeroConf, но у меня было довольно много проблем с https://github.com/balthazar/react-native-zeroconf и ios.

Нам не удалось обнаружить службы MDNS на iOS с помощью react-native-zeroconf, однако после выполнения сканирования с помощью Fing (приложение для iOS) мы снова смогли обнаружить и успешно разрешить проблему с помощью react-native-zeroconf.

Я подозреваю, что это как-то связано с тем, как ios кэширует записи MDNS. Похоже, что ZeroConf не может сбросить устаревшие записи MDNS при сканировании.

В итоге мы отказались от ZeroConf на ios, потому что он был заведомо ненадежен, и вместо этого использовали настраиваемый адрес .local для ios.

Мы по-прежнему без проблем используем ZeroConf на Android.

person Laurie Williams    schedule 22.11.2018
comment
Спасибо за этот потрясающий ответ! Но что вы подразумеваете под пользовательскими платьями .local и как я могу реализовать это в своем приложении? - person Yonathan; 22.11.2018
comment
Пожалуйста. Что ж, у нас есть собственные IoT-устройства, которые транслируются в качестве специального сервиса, но вы можете использовать любой адрес .local в своей сети. Если вы можете найти имя службы, к которой пытаетесь подключиться, вы можете вернуть его как адрес .local. Например, My-MacBook-Pro.local должен преобразовать IP-адрес в что-то вроде 192.168.88.206 на ios. Поэтому вместо запуска сканирования с помощью ZeroConf вы просто возвращаете ( MYDEVICENAME.local:1884 ). Надеюсь, это поможет. - person Laurie Williams; 22.11.2018
comment
Еще раз спасибо за ответ. По какой-то странной причине библиотека на другом конце (npmjs.com/package/bonjour) не поддерживают mDns, которые будут использоваться на IOS, а не на Android, так что это было ключевой разницей между ними. Поэтому я переключился на mDns(npmjs.com/package/mdns) для IOS. - person Yonathan; 22.11.2018