iOS7—Day by day—Day17:iBeacons
来源:互联网 发布:机械公差等级软件 编辑:程序博客网 时间:2024/05/22 03:18
这篇文章是天天品尝iOS7甜点系列的一部分,你可以查看完整的系列目录:天天品尝iOS7甜点
Introduction – 介绍
在iOS7发布主题中并没有很详细的提及到iBeacons
概念。在Bluetooth LE中有些新的特性可以允许近距离的通知和测距。简单的使用通知的是当你接近一个商店的时候然后收到一组特价商品的列表,或者接近你付款账单的时候可以收到发票信息。另外还有很多其他的地方可以使用,我相信在未来的时间里面将会出现一些更加深入创造性的功能。
今天,我们将会查看如何让一个iOS设备扮演成一个iBeacon,并且怎样使用一个不同的设备来估算出到iBeacon设备的距离。我们将会创建一个基于”Hot/Cold”捉迷藏的游戏,iBeacon设备可以隐藏,然后寻找器显示更新估算它们之间的距离。
本章的实例程序能够在github上面进行访问,访问地址:github.com/ShinobiControls/iOS7-day-by-day
Create a beacon
为了能够创建一个应用程序扮演成iBeacon设备,我们需要使用CoreLocation
来创建beacon属性,然后需要使用CoreBluetooth
在适当的时候来广播。
iBeacons具有一些属性,他们都是唯一的标识。
- proximityUUID.有一个
NSUUID
对象它可以标识你的电脑的beacons.你可以拥有相同uuid的beacons.并且设置CoreLocation
来通知你是否当前有设备进入到监测范围内。- major.是一个
NSNumber
代表这个beacon物理设备的主要ID,它可以唯一标识一个特性的设备。这个数字代表了一个16位的无符号整数。- minor.另外一个
NSNumber
,它可以代表私人的beacon。
可以通过设置CoreLocation
来通知iBeacon中3个可能的ID。也就是说不管什么时候任何在检测范围内的iBeacon具有相同的UUID或者相同的UUID和marjor ID,或者需要一个指定的beacon(UUID、marjor和minor的ID全部匹配)。
我们需要包含CoreLocation
和CoreBluetooth
:
为了能够让应用程序作为beacon出现,我们需要创建一个CLBeaconRegion
对象,指定我们需要的ID。在我们的情况下面,我们之需要设置UUID:
上述提到的UUID我们是这样创建的:
我们可以通过使用使用OS X的uuidgen
工具生成一个UUIDString
:
我们还需要创建一个CoreBluetooth
的外部管理者:
一个CBPeripheralManager
需要设置一个代理,然后这个代理需要使用一个方法:
现在我们作为一个iBeacon开始发送通知,然后我们从CLBeaconRegion
得到一个字典的设置,然后把他们专递到CBPeripheralManager
中开始发送通知:
首先,在构造通知设置之前,我们需要检查peripheral manager是不是已经启动了,然后开始做广告的细节。measuredPower
属性指定了位置为1m内观察监测距离。
我们可以在CBPeripheralManger
对象中调用stopAdvertising
方法来停止iBeacon。
Beacon Ranging – Beancon测距
使用CoreLocation
,当一个具有详细ID的iBeacon出现在我们的监测范围内的时候,我们就可以收到通知。在我们的”Hot/Cold”游戏中,我们将在请求范围内更新我们上面创建的beacon。
我们需要创建一个CoreLocation CLLocationManager
:
我们已经设置好了代理,接下来就是实现代理中的方法:
这个代理方法响应设备与beacons的距离更新。这个代理方法被调用的频率是1Hz,并且给方法提供了一个装有beacons的数组,一个CLBeacon
有属性确定它的唯一标识。我们将会通过这个来设置视图的背景色,更新标签的状态可以通过下面的工具方法进行设置:
为了是代理的方法能够被调用,我们需要让location manager开启寻找beacon:
还有一个方法可以用来停止对beacons的监测:
如果你在两个设置上面运行这个应用程序(其中一个设置具有Bluetooth LE),设置一个隐藏和一个进行查找:
Conclusion – 总结
iBeacons提供出色的潜力——他们甚至可以iOS7的最具破坏性的新特性之一。我认为他们都是苹果的答案,最后一击,NFC的移动设备。希望手机不仅会很快我们得到正确的信息当我们到达一个服务台,但我们也开始看到室内导航。我鼓励你去看看iBeacon API——它不是很复杂,我期待您的创新使用!
本文翻译自:iOS7 Day-by-Day :: Day 17 :: iBeacons
- iOS7—Day by day—Day17:iBeacons
- iOS7—Day by day
- iOS7—Day by day—Day0:UIKit Dynamics
- iOS7—Day by day—Day1:NSURLSession
- iOS7—Day by day—Day2:Asset Catalog
- iOS7—Day by day—Day3:Background Fetch
- iOS7—Day by day—Day4:AVSpeechSynthesizer
- iOS7—Day by day—Day6:Tint Color
- iOS7—Day by day—Day9:Device Identification
- iOS7—Day by day—Day10:Custom UIViewController Transitions
- iOS7—Day by day—Day15:CoreImage Filters
- iOS7—Day by day—Day23:Multipeer Connectivity
- iOS7—Day by day—Day22:Downloadable Fonts
- iOS7—Day by day—Day5:UIDynamics With Collection Views
- iOS7—Day by day—Day7:Taking Snapshots of UIViews
- iOS7—Day by day—Day8:Reading List With SafariServices
- iOS7—Day by day—Day11:UIView Key-frame Animations
- iOS7—Day by day—Day12:Dynamic Type and Font Descriptors
- android 实现多线程下载
- string替换所有指定字符串(C++)
- redis入门指南 学习笔记(二) Redis的多数据库
- linux中命令别名的设定指令alias和unalias
- MyISAM InnoDB 区别
- iOS7—Day by day—Day17:iBeacons
- leetcode之Unique Binary Search Trees && Unique Binary Search Trees II
- 2014年4月操作系统份额:Windows XP仍然在26%以上,Linux微涨
- 电脑硬盘的数据丢失了怎么修复
- VC++工程文件说明
- 使用纯代码贴
- android自定义控件并添加属性的方法以及示例
- xml.Save("configure.xml")与xml.Save(Filename)的区别
- unity3d引用android第三方sdk