iBeacon在iPhone锁屏下有几率扫描不到蓝牙设备以及折中解决方案
前言:
这个问题的确困扰了很久,查了国内外各种论坛、社区,都没找到一个有效的解决办法。
所幸后来用一种折中的办法解决了,但也不是从技术根本上解决的,所以有解决的兄弟还望指导下。
正文如下:
一、需求描述:
1、扫描设备签到,只扫描,不连接
2、签到后,对设备进行区域监听
3、监听过程中,收到离开回调后,立即扫描设备进行确认。
二、问题描述:
当对iBeacon进行Monitor监听后:
- 退到后台模式,收到离开回调,能扫描到。
- 后台锁屏状态,收到离开回调,有几率扫描不到(但实际上,手机离设备距离没变,一进入前台,能立即扫描到)。
所以问题点就在于:iPhone锁屏下,为什么有时明明距离足够,但却有几率扫描不到,而同等距离,在前台能扫描到。
三、资料查询
3、iBeacon events while screen is off
4、智石开发者论坛
6、iBeacon enter and exit region constantly every 1 minute
......
这里列举了几个网站,相关网站大家可以根据关键字搜索,总结下来,有这样几个结论:
1、didEnter 和 didExit 方法并不是完全准确的,很多时候有误报发生,原因就是设备发射会有间隔,如果间隙时候正好导致手机端扫描不到,会产生回调事件(这就是不准确的回调提醒)。
2、后台事件下,只会保证进出回调事件的发送及生命周期,而didRange并不会保证完整的生命周期。就是说,后台模式下甚至杀掉应用进程后,进出回调是不会终止的,每次都能保证发出来,但扫描设备的方法,不一定会是存在的,系统可能会因为内存问题,禁止这部分的功能。(这可能也正是我所遇到的问题)
3、我本来的应用,是没有勾选后台模式蓝牙选项的,因为关于这点,我已经测试过,勾选后,我的问题还是存在的,所以这个方法也是不行的。
4、关于勾选后台定位,这一点这里我详细说一下:
勾选了Location updates之后,你在代码里开启了 start updateLocation 之后,手机的确是可以一直保持后台的,但Apple对这点特别严格,你的应用必须有相关的功能体现,比如地图轨迹等,并且最好有开关的提示,供用户开启关闭,而且开启这个,手机的耗电量会急剧上升,考虑到我们产品的需求和用户体验,这种方案被排除了。
四、折中解决办法
既然这种问题,可能是系统的一种内存机制导致的,所以每次离开,立即扫描设备的方案有这种缺陷,我们想了一种折中办法来处理这种情况。
经过我们的数据测试,以500人为例,发生这种情况的比例,大概为30人左右,也就是靠近10%的比例。由于我们做的学生签到方案,这种不稳定比例是万万超过预期值的。
所以我们的折中方案就是:
定位测距,原理如下:
1、学生教室签到时,记录下本节课签到的初始位置。
2、当系统锁屏下遇到离开回调,首先记录此时位置,再去立即扫描设备,如果扫描不到,根据两次经纬度算出距离,跟我们的后台定义临界距离比较,超过则认为是真的离开教室。
- 这里有点细节,第一个,每次离开事件后,立即定位,会触发多次,我们要找的一个最小值,并且比较出每次小于临界值的次数(这些是为了提升定位准确率,毕竟定位还是有误差的)
3、第三点比较重要,就是利用到极光的自定义推送(每小节课之前,后台会推出一条消息过来),经过多次测试,发现后台模式下,自定义推送都是能够收到的,此时,如果2中的处理,依然有学生状态的误判(毕竟我们的临界值不能太大,不然会过滤掉真正的逃课),这里会再此校验一次,而且这次的临界值距离可以适当放大,重新定位,测距将2中遗漏的错误弥补掉。
当然这里也会有一些细节,比如每小节课签到后,需要重新定位记录初始位置(可能会有换教室情形发生)等等。
这种方案算是一种折中解决学生状态不准确的处理,不过对于最本质的问题:锁屏扫描有几率失败,如果有更好的解决办法,还望有解决的兄弟能够留言下~~
iBeacon在iPhone锁屏下有几率扫描不到蓝牙设备以及折中解决方案的更多相关文章
- iOS微信自动抢红包插件(支持后台和锁屏下抢红包)
前言:本文主要讲述使用hook方式实现红包插件,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法) 转眼间2017即将过去,又到了 ...
- android开发技巧——仿新版QQ锁屏下弹窗
新版的qq,可以在锁屏下弹窗显示qq消息,正好目前在做的项目也需要这一功能.经过各种试验和资料查找,终于实现,过程不难,但是却有一些地方需要注意. 下面是实现过程. 1.使用Activity,而不是V ...
- Android-服务中监听电源键和Home键的广播、在锁屏下仍然工作的方法
Android-服务中监听电源键和Home键的广播 http://blog.csdn.net/u014657752/article/details/49512485 Android开发之如何监听让服 ...
- android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动
android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动 1.先简单设置一个闹钟提醒事件: //设置闹钟 mSetting.setOnClickListener ...
- 移动端 iphone锁屏文字效果
简易的仿照iphone 效果 笔记备份 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Conten ...
- OC-音乐播放器-锁屏处理
QQ音乐播放的过程中,锁屏状态下的效果如下: 也就是说,QQ音乐播放过程中,添加锁屏远程事件的监听. 本文只记录本人知道的小知识点,不提供完整的代码. 实现的原理: (1)获取锁屏歌曲信息中心:MPN ...
- swift锁屏播放,音乐进度更新,专辑,歌手名显示
我自己用的音乐播放器是自带的AVPlayer 导入头文件#import <MediaPlayer/MediaPlayer.h> 远程控制事件接收与处理- (void)viewWillApp ...
- 360wifi: 手机锁屏360wifi掉线的解决方法
如遇到iphone锁屏断网的情况,按照以下操作步骤可以解决一部分用户的问题 (该问题并不是360WifFi问题,与苹果机制有关)如有安卓手机掉线,请确保手机连接其他Wifi并不会掉线,然后尝试粉色字体 ...
- Android LockScreen (锁屏弹窗)
在要弹窗的Activity需要进行以下设置,才可以在锁屏状态下弹窗 @Override protected void onCreate(Bundle savedInstanceState) { fin ...
随机推荐
- jquery 分页控件2
jquery 分页控件(二) 上一章主要是关于分页控件的原理,代码也没有重构.在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释.为了测试这个插件是能用的 ...
- [转]How WebKit Loads a Web Page
ref:https://www.webkit.org/blog/1188/how-webkit-loads-a-web-page/ Before WebKit can render a web pag ...
- ecexl操作
/// <summary> /// 写入ecexl /// </summary> /// <param name="dt"></param ...
- jquery设置元素的readonly和disabled【转】
Jquery的api中提供了对元素应用disabled和readonly属性的方法,在这里记录下.如下: 1.readonly $('input').attr("readonly&qu ...
- Mongodb 集群搭建以及常见错误(不分块,分片,以及加验证)
1 关于Replica Sets +Sharding(主从复制加分片)搭建,不这详细去说,网上有很多,大部分的例子就三台服务器之间做主从复制,分2个shard,架构图如下 mongodb节点 分别为 ...
- Archives for the category: Fisheye/Crucible
Archives for the category: Fisheye/Crucible Introducing FishEye and Crucible 3.0 – Search, visualize ...
- ON COMMIT PRESERVE ROWS
定义声明式全局临时表的每个会话拥有自己的独特的临时表描述.当会话终止时,表行和临时表描述均会被删除. 有如下选项,可控制commit后临时表的状态: ON COMMIT DELETE ROWS:在执行 ...
- Js 获取当前月的天数
function getDays() { //构造当前日期对象 var date = new Date(); //获取年份 var year = date.getFullYear(); //获取当前月 ...
- EL表达式学习
EL表达式取值 1.EL表达式的语法格式很简单: 以前编写jsp代码时,如果要获取表单中的用户名,一般使用 <%=request.getParameter("name")%& ...
- easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大 >>>>>>>>>>> ...