有些代碼跑着跑着就報錯了,有些陀螺儀用着用着就不能用了。ios
目前時間是2020.4.4,發現 ios 13系統調用陀螺儀 須要申請用戶權限(這應該是個趨勢,後面安卓應該陸續跟進)。具體實現來看下:promise
1.申請權限的方法是:window.DeviceOrientationEvent.requestPermission,返回值是個promise,promise中會返回 用戶的 容許(「granted」)/拒絕(」denied「) 狀態;可能還有第三個值」prompt「,目前不知道怎麼會返回這第三個值;app
2.requestPermission方法的」首次「調用 須要 由用戶交互觸發(目前發現 click,touchend事件能夠)。dom
2.1 先說下 」首次「的含義。指的是用戶 徹底退出app(而不是 app切換到後臺運行) 後再次打開爲首次。用戶在首次進入後 若是頁面須要陀螺儀權限,須要用戶交互才能觸發requestPermission方法。以後系統會記錄 用戶對本網址的受權信息,不退出app的狀況下就不須要重複申請本權限了,本記錄信息會一直保留 直到徹底退出app。3d
2.2 非首次調用的話 則不須要用戶交互 觸發,咱們在頁面初始化時調用來拿到 用戶的 受權狀態 進而作一些處理。blog
2.3 若是首次調用 不是由 用戶觸發,好比 頁面初始化時 調用,則此方法的promis會返回reject狀態。事件
3.如今能夠寫一下 大概邏輯流程。文檔
4.須要注意,使用陀螺儀 須要https協議,且一經用戶受權/禁止,系統會保留用戶受權狀態,再也不重複系統彈框,直到徹底退出app。get
5.上一個官方文檔,點這.io
6.貼個代碼
window.DeviceOrientationEvent.requestPermission()
.then(state => {
if(state === "granted"){//容許
console.error("用戶容許",state)
}else if(state === "denied"){//拒絕
console.error("用戶拒絕",state)
}else if(state === "prompt"){
console.error("用戶幹了啥",state)
}