文章详情
关于ios13.3后调用陀螺仪无效的解决办法
标签:
  • ios
  • safari
日期:2020-4-27 18:12
摘要:ios版本13.3后的用户,在以前有调用陀螺仪的h5页面里会发现陀螺仪失效,需要更新调用方法

查阅了相关资料后发现,在ios13.3后,如果需要在safari里调用陀螺仪是需要先获取用户授权的,但是安卓和ios13.3之前的用户不需要授权,所以需要更新一下写法,如下:

function iosCheck() {
return new Promise((resolve, reject) => {
if (typeof DeviceMotionEvent !== 'undefined' && typeof DeviceMotionEvent.requestPermission === 'function') {
getPermission()
.then(() => {
resolve()
})
.catch((e) => {
// 用户拒绝
if (e.type === 1) {
// 用户上次状态为拒绝,提示弹窗
myAlert('由于您上次拒绝了授权,可至手机“设置”中进行“陀螺仪授权”操作')
} else if (e.type === 2) {
// 用户首次进入,获取权限失败,需手动开启,弹窗引导
myAlert('为使您获得最佳的“摇一摇”体验,“摇一摇”需要获取您的“陀螺仪授权”', '我知道了', '提示', () => {
getPermission()
.then(() => {
resolve()
})
.catch(() => {
// 用户拒绝授权,提示
myAlert('您拒绝了授权,可至手机“设置”中进行“陀螺仪授权”操作')
})
})
}
})
} else {
resolve()
}
})
}
function getPermission() {
return new Promise((resolve, reject) => {
DeviceMotionEvent.requestPermission()
.then((response) => {
if (response == 'granted') {
resolve()
} else {
reject({ type: 1 })
}
})
.catch(() => {
reject({ type: 2 })
})
})
}
iosCheck().then(() => {
window.addEventListener('devicemotion', deviceMotionHandler, false)
})

myAlert()是自己的弹窗组件...

发送
评论(0)