博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iBeacon在iPhone锁屏下有几率扫描不到蓝牙设备以及折中解决方案
阅读量:5810 次
发布时间:2019-06-18

本文共 1558 字,大约阅读时间需要 5 分钟。

前言:

这个问题的确困扰了很久,查了国内外各种论坛、社区,都没找到一个有效的解决办法。

所幸后来用一种折中的办法解决了,但也不是从技术根本上解决的,所以有解决的兄弟还望指导下。

正文如下:

 

一、需求描述:

1、扫描设备签到,只扫描,不连接

2、签到后,对设备进行区域监听

3、监听过程中,收到离开回调后,立即扫描设备进行确认。

 

二、问题描述:

当对iBeacon进行Monitor监听后:

- 退到后台模式,收到离开回调,能扫描到。

- 后台锁屏状态,收到离开回调,有几率扫描不到(但实际上,手机离设备距离没变,一进入前台,能立即扫描到)。

 

所以问题点就在于:iPhone锁屏下,为什么有时明明距离足够,但却有几率扫描不到,而同等距离,在前台能扫描到。

 

三、资料查询

1、

2、

3、

4、 

5、

6、

7、

......

这里列举了几个网站,相关网站大家可以根据关键字搜索,总结下来,有这样几个结论:

1、didEnter  和  didExit 方法并不是完全准确的,很多时候有误报发生,原因就是设备发射会有间隔,如果间隙时候正好导致手机端扫描不到,会产生回调事件(这就是不准确的回调提醒)。

2、后台事件下,只会保证进出回调事件的发送及生命周期,而didRange并不会保证完整的生命周期。就是说,后台模式下甚至杀掉应用进程后,进出回调是不会终止的,每次都能保证发出来,但扫描设备的方法,不一定会是存在的,系统可能会因为内存问题,禁止这部分的功能。(这可能也正是我所遇到的问题)

3、我本来的应用,是没有勾选后台模式蓝牙选项的,因为关于这点,我已经测试过,勾选后,我的问题还是存在的,所以这个方法也是不行的。

4、关于勾选后台定位,这一点这里我详细说一下:

    勾选了Location updates之后,你在代码里开启了  start updateLocation 之后,手机的确是可以一直保持后台的,但Apple对这点特别严格,你的应用必须有相关的功能体现,比如地图轨迹等,并且最好有开关的提示,供用户开启关闭,而且开启这个,手机的耗电量会急剧上升,考虑到我们产品的需求和用户体验,这种方案被排除了。

 

四、折中解决办法

既然这种问题,可能是系统的一种内存机制导致的,所以每次离开,立即扫描设备的方案有这种缺陷,我们想了一种折中办法来处理这种情况。

经过我们的数据测试,以500人为例,发生这种情况的比例,大概为30人左右,也就是靠近10%的比例。由于我们做的学生签到方案,这种不稳定比例是万万超过预期值的。

所以我们的折中方案就是:

定位测距,原理如下:

1、学生教室签到时,记录下本节课签到的初始位置。

2、当系统锁屏下遇到离开回调,首先记录此时位置,再去立即扫描设备,如果扫描不到,根据两次经纬度算出距离,跟我们的后台定义临界距离比较,超过则认为是真的离开教室。

  -  这里有点细节,第一个,每次离开事件后,立即定位,会触发多次,我们要找的一个最小值,并且比较出每次小于临界值的次数(这些是为了提升定位准确率,毕竟定位还是有误差的)

3、第三点比较重要,就是利用到极光的自定义推送(每小节课之前,后台会推出一条消息过来),经过多次测试,发现后台模式下,自定义推送都是能够收到的,此时,如果2中的处理,依然有学生状态的误判(毕竟我们的临界值不能太大,不然会过滤掉真正的逃课),这里会再此校验一次,而且这次的临界值距离可以适当放大,重新定位,测距将2中遗漏的错误弥补掉。

 

当然这里也会有一些细节,比如每小节课签到后,需要重新定位记录初始位置(可能会有换教室情形发生)等等。

 

这种方案算是一种折中解决学生状态不准确的处理,不过对于最本质的问题:锁屏扫描有几率失败,如果有更好的解决办法,还望有解决的兄弟能够留言下~~

 

转载地址:http://xhcbx.baihongyu.com/

你可能感兴趣的文章
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
CMake 手册详解(二十)
查看>>
嵌入式 busybox自带的tftp、telnet、ftp服务器
查看>>
USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
查看>>
struts1——静态ActionForm与动态ActionForm
查看>>
七大关键数据 移动安全迎来历史转折点
查看>>
在AngularJS中学习javascript的new function意义及this作用域的生成过程
查看>>
盘点物联网网关现有联网技术及应用场景
查看>>
网络钓鱼大讲堂 Part3 | 网络钓鱼攻击向量介绍
查看>>
阿里云与Intel联合发布加密计算,亚洲首个云上“芯片级”数据保护
查看>>
1、下载安装scala编译器(可以理解为scala的jdk),地址:http://www.scala
查看>>
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
实战Django:小型CMS Part2
查看>>