Что вызывает уведомление о разрешении доступа к устройствам в вашей локальной сети и подключению к ним на iOS 14?

Какие фактические вызовы методов, за исключением Bonjour, вызывают уведомление о разрешении на поиск и подключение к устройствам в вашей локальной сети на iOS 14?

Это снимок экрана из сеанса WWDC по этому новому разрешению. Это полезно лишь в некоторой степени в качестве обзора. Мне больше интересно выяснить, какие вызовы методов вызывают это.

введите описание изображения здесь


person William GP    schedule 21.08.2020    source источник


Ответы (5)


Вкратце, Bonjour. Его использование больше не прозрачно. См. https://developer.apple.com/videos/play/wwdc2020/10110/ для получения дополнительной информации:

Если ваше приложение взаимодействует с устройствами, использующими Bonjour или другие локальные сетевые протоколы, вы должны добавить поддержку разрешений конфиденциальности локальной сети в iOS 14.

Это правило распространяется даже на существующее приложение; первая попытка использования Bonjour вызывает предупреждение авторизации.

person matt    schedule 21.08.2020
comment
Очень жаль, потому что это пугает пользователя. В первый раз, когда я увидел это, я отказал в авторизации, тем самым полностью испортив приложение, которое я использовал. Через некоторое время я понял, что случилось ...! - person matt; 21.08.2020
comment
Хотя это вызывает не только Bonjour - person William GP; 21.08.2020
comment
Ага, вот почему я сказал в двух словах. Подробности смотрите в видео. - person matt; 21.08.2020
comment
Я посмотрел видео, но все, что он сказал мне, это то, что пример приложения не сразу запустил его. Он не сказал мне, какая конкретная функция мешает уведомлению при запуске. - person PhoenixB; 04.09.2020
comment
@matt У нас есть право на многоадресную рассылку. С тех пор прием пакетов UDP начал ложно работать. У нас никогда не было диалогового окна авторизации, и наше приложение не авторизовано в конфиденциальности / локальной сети. Мы попытались вызвать диалог отправки данных с помощью: a) класса TcpSocket b) GCDAsyncSocket, отправляющего TCP-пакет c) GCDAsyncUdpSocket, отправляющего UDP-пакет в joinMulticastGroup d) GCDAsyncUdpSocket, транслирующего UDP-пакет e) повторного использования примера от Apple, отправляющего многоадресные пакеты с NWConnectionGroup выше действия вызывают диалог авторизации. Есть ли у вас какие-нибудь идеи? - person Daniel Mavrakis; 10.10.2020
comment
@DanielMavrakis Пожалуйста, не используйте чей-то вопрос / ответ, чтобы подчеркнуть какую-то другую мысль. Если у вас есть новый вопрос (а похоже, что вы его задаете), задайте его как актуальный вопрос. - person matt; 10.10.2020
comment
@matt Хорошо, подойдет - person Daniel Mavrakis; 11.10.2020
comment
@matt только что сделал это на ‹stackoverflow.com/questions/64308595/› спасибо за совет. - person Daniel Mavrakis; 11.10.2020

Если вы используете react native с конфигурацией отладки, вы включаете весь код, отвечающий за взаимодействие с вашей машиной разработчика, поэтому вы, вероятно, можете проигнорировать это сообщение.

Однако лучше убедиться, что у вас нет других библиотек, требующих доступа. Для этого просто создайте версию Release и посмотрите, сохраняется ли сообщение.

person James Trickey    schedule 14.01.2021

Одно из моих приложений неожиданно запускало это приглашение в нашем многопользовательском режиме в Интернете. Мы используем RakNet для нашей сети (это библиотека C ++, которая использует сокеты BSD для отправки / получения UDP), и я смог отследить проблему с помощью функции RNS2_Berkley::BindShared здесь.

После создания UDP-сокета RakNet проверяет работоспособность / валидность сокета, отправляя себе небольшой тестовый пакет. iOS 14 помечала эту отправку самому себе как связь в локальной сети. Я не уверен, является ли такое поведение отправки самому себе обычным паттерном в программировании сокетов или особой причудой RakNet. К сожалению, приглашение ОС на самом деле не появлялось до тех пор, пока сокет не использовался по-настоящему, что усложняло отслеживание проблемы.

Думаю, что это ложное срабатывание от ОС и поднял его с Apple (FB8802121). Я не буду задерживать дыхание, поэтому я просто отключил это поведение RakNet для iOS и надеюсь, что это не слишком важно.

Изменить: чтобы более прямо ответить на исходный вопрос: sendto - это вызов метода, который может вызвать это приглашение.

person Columbo    schedule 15.10.2020

Что касается iOS 14: запрос разрешения: хотел бы найти и подключиться к устройствам в вашей локальной сети, и после многочисленных развертываний на моем физическом устройстве я выяснил, что вызывает это в моем случае.

У меня есть приложение Xamarin.Forms, которое

  1. вызывает localhost: xxxx, чтобы вести локальный журнал, пока я разрабатываю
  2. Я использую продукт под названием LiveSharp, который выполняет локальную горячую перезагрузку для изменений кода XAML и C #.

Таким образом, Livesharp также взаимодействует с сервером на моем локальном хосте. После отключения обоих из них и новой чистой установки на моем физическом устройстве запрос разрешения УДАЛСЯ .. Ура

Примечание. Мне пришлось полностью удалить пакеты LiveSharp nuget из моего проекта. Также я попытался повторно включить ведение журнала локального хоста, и по какой-то причине запрос разрешения не появляется ..: headscratch

Итак: удалите любое соединение localhost, которое происходит в вашем приложении. Или, по крайней мере, поместите вокруг него оператор if, разрешающий его, если в настройках приложения установлено значение true

person Atif Rehman    schedule 05.10.2020
comment
Обратите внимание: если суффикс домена запрошенного URL-адреса local (например, http://foo.bar.local/something), это также запускает запрос разрешения локальной сети! - person DaveAlden; 24.05.2021

У меня также есть приложение Xamarin, и я использовал пакет LiveXaml. После его удаления сообщение пропало.

person sobo    schedule 29.12.2020