iBeacon 初探

iBeacon 是苹果公司在 iOS 7 中新推出的一种近场定位技术,可以感知一个附近的 iBeacon 信标的存在。

当一个 iBeacon 兼容设备进入/退出一个 iBeacon 信标标识的区域时,iOS 和支持 iBeacon 的 app 就能得知这一信息,从而对用户发出相应的通知。

典型的应用场景例如博物馆实时推送附近展品的相关信息,商场内即时通知客户折扣信息等。苹果在 Apple Store 中也部署了 iBeacon 来推送优惠、活动信息。

特点

iBeacon 基于低功耗蓝牙技术(Bluetooth Low Energy, BLE)这一开放标准,因此也继承了 BLE 的一些特点。

  • 范围广

    相比于 NFC 的数厘米的识别范围,iBeacon 的识别范围可以达到数十米,并且能够估计距离的远近。

  • 兼容性

    iBeacon 是基于 BLE 做的一个简单封装,因此大部分支持 BLE 的设备都可以兼容。 例如可以使用一个普通的蓝牙芯片作为信标,使用 Android 设备检测信标的存在。

  • 低能耗

    不少 beacon 实现宣称可以不依赖外部能源独立运行两年。

使用场景

我们以一个连锁商场的例子来讲解 iBeacon 的一个流程。在一个连锁商场中,店家需要在商场中的不同地方推送不同的优惠信息,比如服装和家居柜台推送的消息就很有可能不同。

当消费者走进某个商场时,会扫描到一个 beacon。这个 beacon 有三个标志符,proximityUUID 是一个整个公司(所有连锁商场)统一的值,可以用来标识这个公司,major 值用来标识特定的连锁商场,比如消费者正在走进的商场,minor 值标识了特定的一个位置的 beacon,例如定位到消费者正在门口。

这时商场的 app 会被系统唤醒,app 可以运行一个比较短的时间。在这段时间内,app 可以根据 beacon 的属性查询到用户的地理位置(通过查询服务器或者本地数据),例如在化妆品专柜,之后就可以通过一个 local notification 推送化妆品的促销信息。用户可以点击这次 local notification 来查看更详细的信息,这样一次促销行为就完成了。

API

闲话少说,我们来看下 iBeacon 具体怎么使用:

Beacon 的表示

iBeacon 本质上来说是一个位置(区域)信息,所以 Apple 把 iBeacon 功能集成在了 Core Location 里面。

iBeacon 信标在 Core Location 中表现为一个 CLBeacon,它圈定的范围则表现为 CLBeaconRegion,这是一个 CLRegion 的子类。

CLBeaconRegion 主要用三个属性来标识一个 iBeacon,proximityUUIDmajorminor

proximityUUID 是一个 NSUUID,用来标识公司,每个公司、组织使用的 iBeacon 应该拥有同样的 proximityUUID

major 用来识别一组相关联的 beacon,例如在连锁超市的场景中,每个分店的 beacon 应该拥有同样的 major

minor 则用来区分某个特定的 beacon。

这些属性如果不指定(即 nil),匹配的时候就会忽略这个属性。例如只指定 proximityUUIDCLBeaconRegion 可以匹配某公司的所有 beacons。

Monitoring

Apple 在 iOS 4 中增加了地理围栏 API,可以用来在设备进入/退出某个地理区域时获得通知,这些 API 包括 -startMonitoringForRegion:-locationManager:didEnterRegion:-locationManager:didExitRegion: 等。 CLBeaconRegion 作为 CLRegion 的子类也可以复用这些 API,这种检测 iBeacon 的方式叫做 monitoring。

使用这种方法可以在程序在后台运行时检测 iBeacon,但是只能同时检测 20 个 region,也不能推测设备与 beacon 的距离。

Ranging

除了使用地理围栏 API 的方式,Apple 还在 iOS 7 中新增加了 iBeacon 专用的检测方式,也就是 ranging。

通过 CLLocationManager-startRangingBeaconsInRegion: 方法可以开始检测特定的 iBeacon。

当检测到 beacon 的时候,CLLocationManager 的 delegate 方法 -locationManager:didRangeBeacons:inRegion: 会被调用,通知调用者现在被检测到的 beacons。 这个方法会返回一个 CLBeacon 的数组,根据 CLBeaconproximity 属性就可以判断设备和 beacon 之间的距离。

proximity 属性有四个可能的值,unknown、immediate、near 和 far。 另外 CLBeacon 还有 accuracyrssi 两个属性能提供更详细的距离数据。

使用 iOS 设备作为 iBeacon

我们可以使用 Core Bluetooth 框架来广播特定的 payload 来让 iOS 设备成为一个 iBeacon。 这个 payload 可以由 CLBeaconRegion-peripheralDataWithMeasuredPower: 方法来获取。

之后交给 CBPeripheralManager 广播出去就可以了。

需要注意的是,广播 iBeacon 信息的时候 app 必须在前台运行。

行为

iBeacon 的 API 并不十分复杂,但他的行为比较难弄清楚,特别是当应用运行在后台时,检测到 beacon 的时间延迟会让开发者难以推测。在做了一些实验和合理的推测后,我们得出了一些结论:

  • 检测到 beacon 的时间跟设备进行蓝牙扫描的时间间隔有关,每当设备进行扫描的时候,就能发现 iBeacon region 的变化。
  • 在 ranging 打开的情况下,设备会每秒钟做一次扫描,也就是说状态更新最多延迟一秒。
  • 程序在后台运行,并且 monitoring 打开的时候,设备可能每隔数分钟做一次扫描。iOS 7 的响应速度较慢,iOS 7.1 有比较大的改善。
  • 如果存在设置 notifyEntryStateOnDisplay=YES 的 beacon,iOS 会在屏幕点亮的时候(锁屏状态下按下 home 键,或者因为收到推送点亮等)进行一次扫描。
  • 设备重启并不影响 iBeacon 后台检测的执行。
  • iOS 7 中,在多任务界面中杀掉程序会终止 iBeacon 检测的执行,iOS 7.1 上改变了这一行为,被杀掉的 app 还可以继续进行 iBeacon 检测。

参考

  • AirLocate,苹果官方的 sample code,包含了 iBeacon 的大部分用法。
  • HiBeacons,另一个 demo。
  • iBeacon Monitoring in the Background and Foreground,实验证实了 iBeacon 的一些行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1253. 重构 2 行二进制矩阵(贪心)

1. 题目 给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为 colsum[i],…

论文浅尝 | ExCAR: 一个事件图知识增强的可解释因果推理框架

笔记整理:朱珈徵,天津大学硕士链接:https://aclanthology.org/2021.acl-long.183.pdf动机因果推理旨在理解因果之间的一般因果相关性,对于各种人工智能应用都有很大的价值。先前的研究主要是基于从手工注释的因果事件对中归纳出的…

从ACL2021看对比学习在NLP中的应用

本文首发于微信公众号”夕小瑶的卖萌屋“文 | 花小花Posy源 | 夕小瑶的卖萌屋最近关注对比学习,所以ACL21的论文列表出来后,小花就搜罗了一波,好奇NLPers们都用对比学习干了什么?都是怎么用的呀?效果怎样呀&#xff1f…

美团性能优化之路——性能指标体系

前言 在互联网网站百花齐放的今天,网站响应速度是用户体验的第一要素,其重要性不言而喻,这里有几个关于响应时间的重要条件: 用户在浏览网页时,不会注意到少于0.1秒的延迟;少于1秒的延迟不会中断用户的正常…

图谱实战 | 面向C端场景的概念图谱构成、建设与应用索引

转载公众号 | 老刘说NLPC端是知识图谱应用的一个重要领域,这个领域有大量的用户行为数据,存在着包括搜索、推荐、广告投放等业务。当前,主流的互联网公司,如美团、阿里、腾讯都在尝试相关落地,在此当中,概念…

11 个好用的科研工具推荐!工作效率提升 max!

文 | 炼丹学徒编 | 小轶前阵子,卖萌屋团队群里大家互相分享了一波自己收藏已久的 好用科研工具 。小伙伴们纷纷都有一种相见恨晚的感觉!这么多好东西,当然也要分享与各位读者小伙伴啦~也希望大家能把自己用过好用的工具留言在评论区&#xff…

搜索引擎关键字智能提示的一种实现

背景 搜索关键字智能提示是一个搜索应用的标配,主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,以提升用户搜索体验。 美团CRM系统中存在数以百万计的商家,为了让用户快速查找到目标商家,我们基于s…

会议交流 | DataFunSummit 知识图谱在线峰会——链接知识图谱最前沿技术和最落地产业化应用的桥梁!...

随着人工智能技术的发展与应用,知识图谱作为AI进步的阶梯越来越受到学术界和产业界的重视,并且已经在很多领域、场景中体现出自身的价值。从最初的互联网搜索、推荐、问答等ToC场景,逐渐进入到垂直行业ToB的应用当中。然而,场景的…

LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)

1. 题目 给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完所有删除…

YUI经验谈 - 自定义事件默认行为

纵观主流JS库和框架,YUI在自定义事件方面做的尤为出色。如果需要挑出一个代表性的feature,那么非事件默认行为莫属。 是什么 YUI自定义事件在总体上模仿了DOM事件的设计思想。DOM中的一些事件是有默认行为的,详细见DOM3 Event - Default acti…

美团NLP中心算法实习生招聘

致力于连接最靠谱的算法岗与最强的求职者招聘贴投放请联系微信xixiaoyao-1岗位职责:NLP算法研发,例如文本挖掘、知识预训练、知识&多模态预训练等知识图谱构建核心技术相关论文撰写岗位要求:北京高校在校大学生。(2023年毕业优…

论文浅尝 | 改善多语言KGQA的 Zero-shot 跨语言转换

笔记整理:谭亦鸣, 东南大学博士生来源:NAACL21链接:https://aclanthology.org/2021.naacl-main.465/概述为了扩展多语言知识图谱问答的应用,Zero-shot方法成为一个研究趋势。在Zero-shot的设定下,通过高资源语言的训练…

LeetCode 1172. 餐盘栈(栈 + set)

1. 题目 我们把无限数量 ∞ 的栈排成一行,按从左到右的次序从 0 开始编号。每个栈的的最大容量 capacity 都相同。 实现一个叫「餐盘」的类 DinnerPlates: DinnerPlates(int capacity) - 给出栈的最大容量 capacity。void push(int val) - 将给出的正…

Hive SQL的编译过程

Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析。Hive的稳定性和性能对我们的数据分析非常关键。 在几次升级Hive的过程中&…

Prompt tuning新工作,五个参数解决下游任务 fine-tuning

文 | 小伟编 | 小轶前言自从Google石破天惊地发布Bert以来,NLP就进入了预训练语言模型的时代。众所周知,我们可以用预训练语言模型来学习各种各样的任务,即使它们的特征空间有比较大的差异。那么预训练语言模型为什么会有这种泛化能力呢&…

会议交流 | 如何将图谱实体与关系更好的向量化,并基于推理扩充知识边界?——DataFun Summit2022知识图谱在线峰会...

背景介绍知识图谱是对人类先验知识的概括,具有重要的学术价值和广泛的应用前景。在深度学习广泛应用环境下,知识图谱的表示学习通过将图谱实体和关系向量化,便于利用深度学习技术实现异质信息融合;同时,基于这种图谱表…

【思考】PHP——成也Web,败也Web

背景 早年我并不知道Python写的Web应用是怎么部署的,总觉得像PHP、ASP一样,仅仅提供一个语言级别的执行模块,直接嵌入Web服务器运行,甚至于直接对外提供带扩展名的URL都是自然而然的事情。 前一阵学习了Python,总是如别…

真正的高阶特征交叉:xDeepFM与DCN-V2

文 | 水哥源 | 知乎Saying1. xDeepFM和DCN-V2是真正的高阶交叉,和前面讲的High Order Factorization Machine(HOFM)又有着千丝万缕的联系。某种简化下,都能退化为HOFM的形式2. 如图3. 推荐模型迭代的时候要平衡涨点和复杂度的关系…

学术会议 | 中国杭州举办——第21届国际语义网大会​ISWC2022 Call for Papers

中国杭州举办!ISWC2022 Call for Papers.ISWC(International Semantic Web Conference)是语义网和知识图谱领域的国际顶级学术会议,2022年10月23-27日,ISWC将在中国杭州举行,通过线上线下结合的方式,汇聚全世界相关的科…

LeetCode 82. 删除排序链表中的重复元素 II(链表)

1. 题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5示例 2: 输入: 1->1->1->2->3 输出: 2->3来源:力…