Jak uzyskać dostęp do kamery w aplikacji internetowej iOS11 na ekranie głównym?

Podsumowanie

Nie możemy uzyskać dostępu do kamery z aplikacji internetowej iOS11 (public release) przy użyciu WebRTC lub pliku wejściowego, szczegóły poniżej. Jak nasi użytkownicy mogą nadal uzyskać dostęp do kamery?

Obsługujemy stronę aplikacji internetowej przez https.

Aktualizacja, Kwiecień

Wydaje się, że publiczne wydanie iOS 11.3 naprawiło problem i dostęp do kamery wejściowej plików działa ponownie!

Aktualizacja, Marzec

Jako ludzie tutaj powiedział, że Apple docs doradzają funkcja kamery aplikacji internetowej powraca w 11.3 wraz z pracownikami serwisu. Jest to dobre, ale nie jesteśmy jeszcze pewni, czy chcemy, aby wszyscy ponownie zainstalowali, dopóki nie będziemy mogli dokładnie przetestować na 11.3 GM.

Rozwiązanie, Listopad

Straciliśmy nadzieję, że Apple chce to naprawić i ruszyliśmy do przodu. Zmodyfikowano naszą aplikację internetową, aby usunąć funkcję iOS "Dodaj do ekranu głównego" i poproszono dotkniętych użytkowników o usunięcie poprzedniego ekranu głównego icon.

Aktualizacja, 6 Grudnia

IOS 11.2 i iOS 11.1.2 nie naprawiają.

Obejścia, 21 Września

Wydaje się, że możemy zapytać obecnych klientów aplikacji internetowej

  • Nie upgrade do iOS11-powodzenia:)
  • [47]} Rób zdjęcia w aparacie iOS, a następnie wybierz je z powrotem w aplikacji internetowej
  • poczekaj na następną wersję ios beta
  • zainstaluj ponownie jako stronę w przeglądarce Safari (po usunięciu logiki ATHS)
  • Przełącz na Androida

Wejście Pliku

Nasz obecny kod produkcyjny wykorzystuje wejście Pliku, które działa dobrze przez lata z systemem iOS 10 i starszymi. Na iOS11 działa jako karta Safari, ale nie z aplikacji ekran główny. W tym drugim przypadku kamera jest otwarta i wyświetlany jest tylko czarny ekran, dlatego jest bezużyteczny.

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

WebRTC

[[6]}Safari 11 na iOS11 oferuje WebRTC Media capture co jest świetne.

Możemy uchwycić obraz z kamery do canvas na normalnej stronie internetowej na komputerze i urządzeniu mobilnym za pomocą nawigatora.mediaDevices.getUserMedia per przykładowy kod tutaj .

Kiedy dodamy stronę do ekranu głównego iPada lub iPhone ' a, navigator.mediaDevices staje się undefined i nie nadaje się do użytku.

    <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;
Author: ajayel, 2017-09-15

4 answers

Mamy dość podobny problem. Jak dotąd jedynym obejściem, które udało nam się obejść, jest usunięcie meta tagu, aby był "Apple-mobile-web-app-capable" i umożliwienie użytkownikom otwarcia go w Safari, gdzie wszystko wydaje się działać normalnie.

 19
Author: Tomas Vitasek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 17:42:52

Update: podczas gdy niektóre wcześniej opublikowane changelogi i posty doprowadziły mnie do przekonania, że aplikacje internetowe używające manifest.json zamiast apple-mobile-web-app-capable w końcu będą miały dostęp do właściwej implementacji WebRTC, niestety nie jest to prawdą, jak inni tutaj zwrócili uwagę i testy potwierdziły. Smutna twarz. Przepraszamy za niedogodności spowodowane tym i miejmy nadzieję, że pewnego Szczęśliwego dnia w odległej galaktyce Apple w końcu da nam dostęp do kamery w widokach powered by (non-Safari) WebKit...

Tak, jak inni wspominali, getUserMedia jest dostępna tylko bezpośrednio w Safari, ale ani w UIWebView, ani WKWebView, więc niestety jedynym wyborem są

    Dzięki temu Twoja "aplikacja" działa w normalnej zakładce Safari, gdzie dostępna jest getuserMedia
  • za pomocą framework jak Apache Cordova, który zapewnia dostęp do aparatu urządzenia w inny sposób.

Za nadzieję, że Apple usunie to ograniczenie WebRTC raczej wcześniej niż później...

Źródło:
dla programistów, którzy używają WebKit w swoich aplikacjach, RTCPeerConnection i RTCDataChannel są dostępne w dowolnym widoku sieci web, ale dostęp do kamery i mikrofonu jest obecnie ograniczony do Safari.

 20
Author: StateOfTheArtJonas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-07 19:51:49

Dobre wieści! Kamera w końcu wydaje się być dostępna z aplikacji internetowej na ekranie głównym w pierwszej wersji beta iOS 11.3.

Zrobiłem repo z kilkoma plikami, które pokazują, że działa:

Https://github.com/joachimboggild/uploadtest

Kroki do testu:

  1. serwuj te pliki ze strony internetowej dostępnej z telefonu
  2. Otwórz indeks.html w iOS Safari
  3. Dodaj do ekranu głównego
  4. Otwórz aplikację z ekranu głównego. Teraz w sieci strona jest otwarta w trybie pełnoekranowym, bez interfejsu nawigacyjnego.
  5. naciśnij przycisk Plik, aby wybrać obraz z aparatu.

Teraz kamera powinna działać normalnie, a nie być czarnym ekranem. To pokazuje, że funkcjonalność działa ponownie.

Muszę dodać, że używam zwykłego pola, a nie getUserMedia lub somesuch. Nie wiem, czy to działa.

 15
Author: Joachim Bøggild,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 22:12:26

Wydaje się, że działa ponownie w iOS 11.4, jeśli używasz pola wprowadzania pliku.

 1
Author: aalcutt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 17:43:34