สรุป
เราไม่สามารถเข้าถึงกล้องจากเว็บแอปบนหน้าจอหลักของ 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 beta ถัดไป
- ติดตั้งใหม่เป็นหน้าในเบราว์เซอร์ 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;