iBeacon 用于自动外设配对 + 身份验证?

Posted

技术标签:

【中文标题】iBeacon 用于自动外设配对 + 身份验证?【英文标题】:iBeacon for auto peripheral pairing + authentication? 【发布时间】:2014-03-13 10:34:26 【问题描述】:

如果我想以 iBeacon 方式进行“基于 NFC 的交易”,当 2 台 ios 设备处于“即时”范围内时,如何在不配对/身份验证的情况下自动连接两台设备,以便进行交易沟通?

场景:

    用户的 iPhone 检测到 iBeacon 信号,提示用户打开应用 用户打开应用,想要购买实体商品 用户将他的设备拿到零售商基于 iOS 的 POS 设备 两台 iOS 设备检测到对方都在“立即”范围内,无需手动验证即可开始连接/配对 事务通信从这里开始

据我了解,scanForPeripheralsWithServices 无法返回足够的信息以使上述情况发生,有人知道实现此类服务的正确方法吗?

谢谢

【问题讨论】:

【参考方案1】:

您描述的场景可以按照您列出的方式通过非常基本的连接来执行,无需 BLE 级别配对,根本需要身份验证。更准确地说:

    iBeacon 的存在会触发应用通知用户有机会购买。 客户端的 iOS 设备扫描外围设备,零售商的 POS 为其做广告。两者之间的距离是使用广告包中的 RSSI 值估计的。如果此值足够高(实际上,高于给定阈值,例如 -30 左右。您可以选择适合您需要的任何值),则会激活下一步。 客户端使用connectPeripheral:连接到POS。仅此一项不会触发身份验证或配对。 您可以使用安全加密和身份验证以及任何需要的方式来实现交易。这完全是您的解决方案专有的,您需要创建它或让一些现有的工作。 (不过,我不知道现有的实现。)

看一个例子,基于 RSSI 的距离估计,BTLE example 是一个很好的起点。这是BTLECentralViewController.m的相应摘录

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

    // Reject any where the value is above reasonable range
    if (RSSI.integerValue > -15) 
        return;
    

要实现事务,你需要了解Core Bluetooth的基础知识:服务、特征、BLE事务(读、写、通知...)

【讨论】:

【参考方案2】:

在使用 iOS CoreLocation API 时,iBeacons 的检测和测距从不需要配对和身份验证。 iBeacons 是无连接的,仅用于传输。您可以通过将两台设备都作为 iBeacon 进行传输,然后使用CoreLocation 测距 API 来检测接近度来判断两台设备是否在彼此的直接范围内:

  - (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)iBeacons inRegion:(CLBeaconRegion *)region 

      for (CLBeacon *iBeacon in iBeacons) 
          if (iBeacon.proximity == CLProximityImmediate) 
               // Add code to process transaction here
          
      

如果您想在确认两台设备就在附近之后,在两台设备之间无线交换安全数据,您可以使用蓝牙,正如@allprog 在他的回答中所建议的那样。您也可以通过 Web 服务来做到这一点,它允许您拥有一个仅 iBeacon 的解决方案,而无需使用CoreBluetooth API。请参阅this answer 了解有关其工作原理的更多详细信息。

【讨论】:

以上是关于iBeacon 用于自动外设配对 + 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何第一次以编程方式将 ibeacon 与 iOS 配对

如何自动连接 CBPeripheral(带有 iBeacon + 蓝牙芯片的 BLE 设备)并且应用程序未运行

wifi peer-2-peer组中的自动身份验证(wifi直接)

Membership 介绍

如何使用 JWT for Google firebase 生成身份验证令牌?

无需配对即可获取设备位置的蓝牙库