关于ios最新系统[我是ios13.3]开发摇一摇的时候无法触发devicemotion的原因

关于ios最新系统[我是ios13.3]开发摇一摇的时候无法触发devicemotion的原因

    • 允许摇一摇代码
    • 具体原因

如果你只是想实现摇一摇,可以直接点击目录到你对应想找的地方~

最近公司年会需要摇一摇做个页面小游戏,结果发现我在网上搜的所有办法都不能行,全部都是没什么乱用的让我去设置https协议,我哭辽好嘛
所以我就不那么多废话了,看下面代码

允许摇一摇代码

function permissionForShake() {
    if (typeof DeviceMotionEvent.requestPermission === 'function') {
        DeviceMotionEvent.requestPermission()
            .then(permissionState => {
                if (permissionState === 'granted') {
                    window.addEventListener('devicemotion', () => {})
                }
            })
            .catch(console.error);
    } else {
        // ios其他系统可以不通过请求直接摇一摇
        
    }
}

可能很多人会奇怪这是干嘛的,首先我们需要说明这几个问题:

  1. 首先,在较低ios系统时,出现了必须设置https协议才能使用devicemotion这个事件,这个大致是ios12.2版本之前系统
  2. 在ios12.2新出了一个安全性设置,在 设置>safari>安全性 里面,有一个叫做移动与方向访问的设置,这个需要手动开启,如果不开启,你会什么都得不到
  3. 在具体不知道哪个版本,大概是ios13开始(真的是大概),可能是库克他们的研发良心发现,发现手动开启对研发人员太不友善了,于是就出现了上面这段代码

好了我废话讲完了,我们正经点看这段代码是干嘛的

具体原因

首先我们知道,DeviceMotionEvent这个是挂载在window底下的一个一个构造函数,具体干啥的,你在ondevicemotionondeviceorientation这两个事件的事件对象,就跟这玩意有关系。
这个不重要,主要是可以用来判断浏览器是否支持摇一摇,我们继续说重点

在ios最新系统里面,新增了一个DeviceMotionEvent.requestPermission方法(低版本ios没有,我还有一个华为mate30,测试也没有这个方法),这个方法就是专门用来请求用户允许访问设备的移动与方向权限的。

如果还需要更具体的信息,可以看下这个链接: https://dev.to/li/how-to-requestpermission-for-devicemotion-and-deviceorientation-events-in-ios-13-46g2,这个就是我获取到真正有用的信息(友情提示,无需科学上网,可以直接观看)。

你可能感兴趣的:(关于ios最新系统[我是ios13.3]开发摇一摇的时候无法触发devicemotion的原因)