Как получить доступ к камере на домашнем экране iOS11?

Резюме

Мы не можем получить доступ к камере из веб-приложения домашнего экрана iOS11 (общедоступный выпуск), используя либо WebRTC, либо ввод файла, подробности приведены ниже. Как наши пользователи могут продолжать получать доступ к камере, пожалуйста?

Мы обслуживаем страницу веб-приложения через https.

Обновление, апрель

Публичная версия iOS 11.3, похоже, исправила проблему, и доступ к камере ввода файлов снова работает!

Обновление, март

Как сказали здесь люди из Apple, советуйте, чтобы функция веб-приложения вернулась в 11.3 вместе с работниками сферы обслуживания. Это хорошо, но мы еще не уверены, хотим ли мы, чтобы все переустанавливали снова, пока мы не сможем тщательно протестировать 11.3GM.

Решение, ноябрь

Мы потеряли надежду, что Apple захочет это исправить, и двинулись вперед. Мы изменили наше веб-приложение, чтобы удалить функцию iOS "Добавить на главный экран", и попросили затронутых пользователей удалить любой предыдущий значок главного экрана.

Обновление, 6 декабря

iOS 11.2 и iOS 11.1.2 не исправляются.

Обходные пути, 21 сентября

Кажется, мы могли бы спросить существующих клиентов веб-приложения

  • не обновлять до iOS11 - удачи с этим :)
  • сделайте снимки на камеру iOS и затем выберите их в веб-приложении
  • ждать следующей бета-версии ios
  • переустановить как страницу браузера Safari (после удаления логики ATHS)
  • переключиться на Android

Ввод файла

Наш текущий производственный код использует файл ввода, который работал хорошо в течение многих лет с iOS 10 и старше. На iOS11 он работает как вкладка Safari, но не из приложения на домашнем экране. В последнем случае камера открыта, и отображается только черный экран, что делает его непригодным для использования.

   <meta name="apple-mobile-web-app-capable" content="yes">
   ...
   <input type="file" accept="image/*">

WebRTC

Safari 11 на iOS11 предлагает захват медиафайлов WebRTC, и это здорово.

Мы можем записать изображение с камеры на холст на обычной веб-странице на рабочем столе и на мобильном устройстве, используя navigator.mediaDevices.getUserMedia, в соответствии с примером кода, который приведен здесь.

Когда мы добавляем страницу на домашний экран iPad или iPhone, navigator.mediaDevices становится undefined и непригодным для использования.

    <meta name="apple-mobile-web-app-capable" content="yes">
    ...
    // for some reason safari on mac can debug ios safari page but not ios home screen web apps 
    var d = 'typeof navigator : ' + typeof navigator; //object
    d += 'typeof navigator.mediaDevices : ' + typeof navigator.mediaDevices; // undefined
    // try alternates
    d += 'typeof navigator.getUserMedia  : ' + typeof navigator.getUserMedia; // undefined
    d += 'typeof navigator.webkitGetUserMedia  : ' + typeof navigator.webkitGetUserMedia; // undefined
    status1.innerHTML = d;

Ответ 1

У нас есть аналогичная проблема. До сих пор единственным обходным решением, которое мы смогли сделать, является удаление метатега для его использования "apple-mobile-web-app-able" и возможность пользователям открывать его в Safari, где все работает нормально.

Ответ 2

Обновление: хотя некоторые ранее опубликованные журналы изменений и публикации заставили меня поверить, что веб-приложения, использующие manifest.json вместо apple-mobile-web-app-capable, наконец-то получат доступ к надлежащей реализации WebRTC, к сожалению, это не так, как другие здесь указали и испытания подтвердили. Грустное лицо. Приносим извинения за неудобства, вызванные этим, и давайте надеяться, что в один удачный день в далекой галактике Apple наконец-то предоставит нам доступ к камерам в представлениях, использующих (не Safari) WebKit...

Да, как уже упоминали другие, getUserMedia доступен только непосредственно в Safari, но не в UIWebView и не в WKWebView, поэтому, к сожалению, ваш единственный выбор

  • удаление <meta name="apple-mobile-web-app-capable" content="yes"> чтобы ваше приложение работало на обычной вкладке Safari, где доступен getuserMedia
  • используя такую среду, как Apache Cordova, которая предоставляет вам доступ к камере устройства другими способами.

Надеемся, что Apple снимает это ограничение WebRTC скорее раньше, чем позже...

Источник:
Для разработчиков, которые используют WebKit в своих приложениях, RTCPeerConnection и RTCDataChannel доступны в любом веб-представлении, но в настоящее время доступ к камере и микрофону ограничен Safari.

Ответ 3

Хорошие новости! Камера, кажется, стала доступной из веб-приложения домашнего экрана в первой бета-версии iOS 11.3.

Я сделал репо с несколькими файлами, которые демонстрируют, что это работает:

https://github.com/joachimboggild/uploadtest

Шаги для тестирования:

  1. Служите этим файлам с веб-сайта, доступного с вашего телефона.
  2. Откройте index.html в iOS Safari
  3. Добавить на домашний экран
  4. Откройте приложение с домашнего экрана. Теперь веб-страница открыта в полноэкранном режиме без пользовательского интерфейса навигации.
  5. Нажмите кнопку файла, чтобы выбрать изображение с камеры.

Теперь камера должна работать нормально и не быть черным экраном. Это демонстрирует, что функциональность работает снова.

Я должен добавить, что я использую простое поле, а не getUserMedia или что-то подобное. Я не знаю, работает ли это.

Ответ 4

Кажется, это работает снова в iOS 11.4, если вы используете поле ввода файла.