iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >如何在IOS中使用IBeacon
  • 500
分享到

如何在IOS中使用IBeacon

IOSIBeacon 2022-05-25 05:05:46 500人浏览 安东尼
摘要

什么是iBeacon? iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工作方式是,配备有低功耗蓝牙(BLE)通信功能的设备使用BLE技术向

什么是iBeacon?

iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工作方式是,配备有低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的 ID,接收到该 ID 的应用软件会根据该 ID 采取一些行动。

从个人的角度看: iBeacon向四面八方不停地广播信号,就像是往平静的水面上扔了一块石子,泛起层层涟漪(俗称水波),波峰相当于 iBeacon 的RSSI(接受信号强度指示),越靠近中心点的地方波峰越高(RSSI 越大),这个波峰的大小(RSSI 的值)受到扔石子时用力大小(发射功率)和水质(周围环境因子)的影响,离中心点越远水波越趋向于平静,超过了一定值,水波会消失于无形,也就是说 iBeacon 向外广播的距离是有范围的,超过了这个范围,将接受不到 iBeacon 的信号。

从iOS开发者的角度看: iBeacon 在 CoreLocation 框架中抽象为CLBeacon类, 该类有6个属性,分别是:

  • proximityUUID,是一个 NSUUID,用来标识公司。每个公司、组织使用的 iBeacon 应该拥有同样的 proximityUUID
  • major,主要值,用来识别一组相关联的 beacon,例如在连超市的场景中,每个分店的 beacon 应该拥有同样的 major
  • minor,次要值,则用来区分某个特定的 beacon。
  • proximity,远近范围的,一个枚举值。
  • 
    typedef NS_ENUM(NSInteger, CLProximity) {
    	CLProximityUnknown,// 无效
    	CLProximityImmediate,//在几厘米内
    	CLProximityNear,//在几米内
    	CLProximityFar//超过 10 米以外,不过在测试中超不过10米就是far
    }
    
  • accuracy,与iBeacon的距离。
  • rssi,信号轻度为负值,越接近0信号越强,等于0时无法获取信号强度。

Tip:proximityUUIDmajorminor 这三个属性组成 iBeacon 的唯一标识符。

只要进入iBeacon的范围,就能唤醒 App(大约10秒钟),即使在程序被杀掉的情况下。必要时,可以使用UIApplication类的- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler;方法,请求更多的后台执行时间。

iBeacon的用途:我们可以用iBeacon可以进行室内定位(车库,商场),智能打卡,提醒(离开某物体的时候,比如离开家)。

iBeacon 与 BLE 的区别

iOS 中 iBeacon 是基于地理位置的微定位技术,虽然借助手机蓝牙进行接收MajroMinor,但是他们在开发工程中没有任何关系。

iBeacon使用苹果提供CoreLocation库,然而在 BLE 在开发过程中使用CoreBluetooth库。从上面提供的库来看就很清楚了,特别是在 iOS8.0 之后的时候如果想使用iBeacon,必须让用户点击是否允许XXapp使用地理位置。如果在第一次使用 iOS App 扫描iBeacon的时候没有提示这句话,是不可能接收到iBeacon的信号(除非iOS 8.0之下)。如果是 BLE 则的开发过程中之需要提示用户打开蓝牙,并不要求其他的地理位置任何信息。

iBeacon 在 iOS 中的运用

权限请求

info.plist中添加NSLocationAlwaysAndWhenInUseUsageDescription,NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription,请求地理位置权限。

开启Background Modes

相关代码

import <CoreLocation/CoreLocation.h>

初始化locationManagerbeaconRegion


- (CLLocationManager *)locationManager {
    if (!_locationManager) {
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.delegate = self;
    }
    return _locationManager;
}

- (CLBeaconRegion *)beaconRegion {
    if (!_beaconRegion) {
        _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:Beacon_Device_UUID] identifier:@"test"];
        _beaconRegion.notifyEntryStateOnDisplay = YES;
    }
    return _beaconRegion;
}

CLBeaconRegion类,提供了3个初始化方法:


//监听该UUID下的所有Beacon设备
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier;

//监听该UUID,major下的所有Beacon设备
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major identifier:(NSString *)identifier;

//监听唯一的Beacon设备
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major minor:(CLBeaconMinorValue)minor identifier:(NSString *)identifier;

在开始监控之前,我们需要使用isMonitoringAvailableForClass判断设备是否支持,是否允许访问地理位置。


BOOL availableMonitor = [CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]];

if (availableMonitor) {
    CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];
    switch (authorizationStatus) {
        case kCLAuthorizationStatusNotDetermined:
            [self.locationManager requestAlwaysAuthorization];
        break;
        case kCLAuthorizationStatusRestricted:
        case kCLAuthorizationStatusDenied:
            NSLog(@"受限制或者拒绝");
        break;
        case kCLAuthorizationStatusAuthorizedAlways:
        case kCLAuthorizationStatusAuthorizedWhenInUse:{
            [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
            [self.locationManager startMonitoringForRegion:self.beaconRegion];
        }
        break;
    }
} else {
    NSLog(@"该设备不支持 CLBeaconRegion 区域检测");
}

监听方式

可用两种方式检测区域MonitoringRanging方式

Monitoring:可以用来在设备进入/退出某个地理区域时获得通知, 使用这种方法可以在应用程序的后台运行时检测 iBeacon,但是只能同时检测 20 个 region 区域,并且不能够推测设备与 iBeacon 的距离。


// 开始检测区域
[self.locationManager startMonitoringForRegion:beaconRegion]; 

// 停止检测区域
[self.locationManager stopMonitoringForRegion:beaconRegion]; 

// Monitoring成功对应回调函数
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region;

// 设备进入该区域时的回调
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;

// 设备退出该区域时的回调
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;

// Monitoring有错误产生时的回调
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(nullable CLRegion *)region withError:(NSError *)error;

Ranging:可以用来检测某区域内的所有 iBeacons。


// 开始检测区域
[self.locationManager startRangingBeaconsInRegion:beaconRegion];

// 停止检测区域
[self.locationManager stopRangingBeaconsInRegion:beaconRegion];

// Ranging成功对应回调函数
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region 

// Ranging有错误产生时的回调
- (void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error

进程 kill 之后,进入 iBeacon 区域的回调


// 当程序被杀掉之后,进入ibeacon区域,或者在程序运行时锁屏/解锁 会回调此函数
- (void)locationManager:(CLLocationManager *)manager
      didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

争取更多的后台时间

必要时,可以使用UIApplication类的- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler;方法,请求更多的后台执行时间。

[用 iPhone 手机模拟 iBeacon]

任何支持使用蓝牙低功耗共享数据的 iOS 设备都可以用作 iBeacon

import <CoreBluetooth/CoreBluetooth.h><CoreLocation/CoreLocation.h>

terminal中使用uuidgen命令,生成一个 UUID 063FA845-F091-4129-937D-2A189A86D844

其实利用BLE来模拟 beacon 设备发送信号,很简单。

相关代码

初始化peripheralManager


self.peripheralManager= [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];

发送信号


NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:self.UUIDTextField.text];
//创建beacon区域
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID major:self.majorTextField.text.integerValue minor:self.minorTextField.text.integerValue identifier:@"test"];
NSDictionary *beaconPeripheraData = [beaconRegion peripheralDataWithMeasuredPower:nil];

if(beaconPeripheraData) {
    [self.peripheralManager startAdvertising:beaconPeripheraData];;//开始广播
}

停止广播


[self.peripheralManager stopAdvertising];

注意点

  • 需要访问地理位置权限。
  • 设备需要开启蓝牙。
  • 利用 iOS 设备模拟 beacon信号,Home 出去之后是不能发送信号的。

以上就是如何在IOS中使用IBeacon的详细内容,更多关于IOS中IBeacon的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何在IOS中使用IBeacon

本文链接: https://www.lsjlt.com/news/30479.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • IBeacon怎么在IOS中使用
    这期内容当中小编将会给大家带来有关IBeacon怎么在IOS中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是iBeacon?iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7...
    99+
    2023-06-14
  • 如何在 iOS 17 上使用待机模式
    您是否已准备好 unleashing the potential of iPhone through iOS 17 With its included features, your life will be made easier.。其中一...
    99+
    2023-08-02
  • 如何在iOS 17上使用个人语音
    iOS 17:如何使用个人语音苹果iPhone的辅助功能使有特殊需求的人更容易使用该设备。为了与这一策略保持一致,Apple正在iOS 17中引入另一项称为“个人语音”的功能,这对于有可能失去声音或说话能力的人来说非常有益。您可以使用此工具...
    99+
    2023-07-16
  • 如何在iOS中集成weex-amap
    这篇文章给大家分享的是有关如何在iOS中集成weex-amap的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在移动应用开发中,地图是一个很重要的工具,基于地图的定位、导航等特点衍...
    99+
    2024-04-02
  • 怎么在IOS中使用Cordova插件
    这篇文章给大家分享的是有关怎么在IOS中使用Cordova插件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、准备插件功能:打开IOS相机1:创建插件plugman create --name [插件名称] -...
    99+
    2023-06-14
  • 如何在 iPhone iPad 和 iOS 上使用 Apple Messages 应用程序
    iPhone 和 iPad 消息应用程序为用户提供了一个全面的数字通信工具,提供了一系列功能来增强您的消息传递体验。从管理已发送的消息到个性化您的个人资料,该应用程序为您的所有消息传递需求提供了一个用户友好的界面。无论您是偶尔发送短信的临时...
    99+
    2023-07-16
  • ios切换控制如何使用
    在iOS中,可以使用以下方法来实现控制的切换:1. 使用UITabBarController:UITabBarController可...
    99+
    2023-10-08
    ios
  • mac如何使用safari调试ios
    这篇文章主要介绍mac如何使用safari调试ios,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!手机操作:【设置】->【Safari】->【高级】->开启【Web...
    99+
    2024-04-02
  • 怎么在IOS中使用ADisplayLink刷新屏幕
    怎么在IOS中使用ADisplayLink刷新屏幕?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是CADisplayLink我们在应用中创建一个新的CADisplayL...
    99+
    2023-06-15
  • IOS开发Objective-C Runtime如何使用
    这篇文章主要介绍“IOS开发Objective-C Runtime如何使用”,在日常操作中,相信很多人在IOS开发Objective-C Runtime如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-07-05
  • iOS testFlight测试工具如何使用
    使用iOS TestFlight测试工具的步骤如下:1. 开发者在App Store Connect中创建App的测试版本。在App...
    99+
    2023-09-29
    iOS
  • 如何在UniApp中禁止iOS页面弹动
    UniApp是一种跨平台开发框架,它可以让开发者使用一种语言(Vue.js)在多个平台上开发应用程序。其中包括iOS平台,但是在开发过程中,有一个常见的问题是iOS页面弹动。Page Bounce是指页面上下弹动的现象。当页面长度超出视图窗...
    99+
    2023-05-14
  • Xamamin iOS中如何使用OxyPlotiO框架绘制线图
    小编给大家分享一下Xamamin iOS中如何使用OxyPlotiO框架绘制线图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Xamamin iOS中绘制线图Ox...
    99+
    2023-06-04
  • 如何进行iOS界面中框架QMUIKit的使用
    这篇文章给大家介绍如何进行iOS界面中框架QMUIKit的使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对于移动APP来说,客户端(iOS或android)的界面开发是必不可少的工作。为了减轻界面开发的工作量,也为...
    99+
    2023-06-19
  • iOS中NavigationController怎么使用
    在iOS中,可以通过以下步骤来使用NavigationController:1. 创建一个NavigationController对...
    99+
    2023-09-26
    iOS
  • iOS中CocoaPods怎么使用
    要在iOS中使用CocoaPods,您需要按照以下步骤进行操作:1. 首先,您需要在您的mac上安装CocoaPods。打开终端并输...
    99+
    2023-09-29
    iOS
  • iOS中AFNetworking怎么使用
    在iOS中使用AFNetworking可以按照以下步骤进行:1. 导入AFNetworking库:将AFNetworking库添加到...
    99+
    2023-09-21
    iOS
  • IOS中如何使用optgroup解决select太长问题
    这篇文章主要介绍了IOS中如何使用optgroup解决select太长问题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇IOS中如何使用optgroup解决select太长问题...
    99+
    2024-04-02
  • iOS中PerformSelector怎么使用
    在iOS中,`performSelector`方法用于调用对象的指定方法。使用方法如下:1. 调用无参数方法:```swiftlet...
    99+
    2023-09-06
    iOS
  • iOS中CAKeyframeAnimation怎么使用
    在iOS中,可以使用CAKeyframeAnimation实现关键帧动画。下面是使用CAKeyframeAnimation的步骤:1...
    99+
    2023-09-29
    iOS
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作