gpt4 book ai didi

bluetooth-lowenergy - 我可以使用 Apple 和 Google 的接触者追踪规范吗?

转载 作者:行者123 更新时间:2023-12-05 08:50:50 25 4
gpt4 key购买 nike

我想使用 Apple 和 Google 的新 API 来支持 Covid 接触者追踪,如本 API document 中所述.但是当我尝试在 XCode 中使用这些 API 时,找不到这些类:

let request = CTSelfTracingInfoRequest()

如何启用这些 API?

最佳答案

适用于 iOS 的 API 受到限制。虽然您可以使用 XCode 11.5 和 iOS 13.5 针对 ExposureNotifcation 框架编写代码,但如果没有 Apple 授予您配置,您甚至无法在模拟器中运行代码配置文件与 com.apple.developer.exposure-notification权利。 Apple 仅在手动批准流程后将此权利授予与政府卫生机构相关的开发者。

以下是有关无需 Apple 特别许可即可执行的操作的更多信息。

iOS 13.5 之前的版本不允许在规范中传输暴露通知服务信标蓝牙广告格式。从 13.5 开始,广告只能由操作系统提供——如果不使用更高级别的 API,第 3 方应用程序无法发出该广告。

从 iOS 13.5 开始,Apple 还阻止第三方应用程序直接检测这种信标格式,迫使它们使用更高级别的 API。早期版本的 iOS 允许检测这种信标格式。

然而,Android 是另一回事。

虽然谷歌在 Google Play 服务中类似地限制了这些 API 的使用,只有具有谷歌授予的特殊权限的 API key ,Android 5.0+ 版本允许第 3 方应用发送和检测曝光通知服务信标广告 那个the bluetooth specification设想:

使用免费和开源 Android Beacon Library 2.17+,你可以像这样发送这个信标:

String uuidString = "01020304-0506-0708-090a-0b0c0d0e0f10";
Beacon beacon = new Beacon.Builder()
.setId1(uuidString)
.build();
// This beacon layout is for the Exposure Notification Service Bluetooth Spec
BeaconParser contactDetectionBeaconParser = new BeaconParser()
.setBeaconLayout("s:0-1=fd6f,p:-:-59,i:2-17");
BeaconTransmitter beaconTransmitter = new
BeaconTransmitter(getApplicationContext(), contactDetectionBeaconParser);
beaconTransmitter.startAdvertising(beacon

然后像这样扫描它:

BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=fd6f,p:-:-59,i:2-17"));
...

beaconManager.startRangingBeaconsInRegion(new Region("All Exposure Notification Service beacons", null));
...

@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon: beacons) {
Log.i(TAG, "I see an Exposure Notification Service beacon with rolling proximity identifier "+beacon.getId1());
}
}

在Android上,即使在后台也可以进行上述传输和检测。有关详细信息,请参阅库文档。

传输和接收暴露通知服务信标的能力内置于 BeaconScope 中安卓应用。您可以将其用作帮助测试您构建的任何应用的工具。

您可以在我的博文中阅读更多信息 which shows you how to build your own app to do this.

至于 iOS,虽然在撰写本文时无法传输,但您可以在 iOS 13.4.x 及更早版本上使用如下代码扫描这些信标:

let exposureNotificationServiceUuid = CBUUID(string: "FD6F")
centralManager?.scanForPeripherals(withServices: [exposureNotificationServiceUuid], options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])

...
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let advDatas = advertisementData[CBAdvertisementDataServiceDataKey] as? NSDictionary {
if let advData = advDatas.object(forKey: CBUUID(string: "FD6F")) as? Data {
let hexString = advData.map { String(format: "%02hhx", $0) }.joined()

let proximityId = String(hexString.prefix(32))
let metadata = hexString.suffix(8)
NSLog("Discovered Exposure Notification Service Beacon with Proximity ID\(proximityId), metadata \(metadata) and RSSI \(RSSI)")
}
}
}

但是请注意,Apple 阻止了它从 iOS 13.5 beta 2 开始运行。didDiscover上面的方法永远不会为带有曝光通知服务 UUID 的广告调用。

完全披露:我是 Android Beacon Library 开源项目的首席开发人员,也是基于该库构建的 BeaconScope 应用程序的作者。

编辑 2020 年 4 月 26 日:更新上面的答案以链接到暴露通知服务蓝牙规范的修订版 1.1 版本,根据该更改更新命名约定,并修改代码示例以显示元数据。

编辑,2020 年 4 月 30 日:更新的答案基于 Apple 发布的 iOS 13.5 beta 2 和 XCode 11.5 beta,以及 Apple 现在阻止第 3 方应用程序检测曝光通知服务信标这一事实。

2020 年 6 月 2 日编辑:根据 Apple 的 iOS 13.5 最终版本和 Google 的 Google Play 服务版本更新了答案。

关于bluetooth-lowenergy - 我可以使用 Apple 和 Google 的接触者追踪规范吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61161450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com