Могу ли я использовать Apple и Contact Tracing Spe c от Google? - PullRequest
1 голос
/ 11 апреля 2020

Я хочу использовать Apple и новые API Google для поддержки отслеживания контактов Covid, как описано в этом документе API . Но когда я пытаюсь использовать эти API в XCode, классы не обнаруживаются:

let request = CTSelfTracingInfoRequest()

Как включить эти API?

1 Ответ

5 голосов
/ 11 апреля 2020

API для iOS доступны только в бета-версии. Вам нужна бета-версия XCode 11.5, и она может работать только на iOS 13,5 бета.

Ниже приведена дополнительная информация о что вы можете делать с не бета-версиями программного обеспечения.

В последней версии iOS, 13.4.1 запрещена передача формата рекламы Bluetooth-маяка Exposure Notification Service в спецификации.

В результате Apple должна будет выпустить iOS 13,5 для публикации c, чтобы сделать это возможным. Начиная с iOS 13.5 beta 2, Apple также блокирует прямое обнаружение этого формата маяка сторонними приложениями, заставляя их использовать API более высокого уровня.

Android, однако, это другая история. Хотя Google не выпустил никаких новых SDK, поддерживающих предложенные API-интерфейсы (хотя для этого ожидается обновление сервисов Google Play), Android уже поддерживает отправку и обнаружение рекламы маяка службы уведомлений об экспозиции , которая спецификация bluetooth предусматривает:

Используя бесплатный и открытый источник 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 Android. Вы можете использовать это как инструмент, чтобы помочь протестировать любые приложения, которые вы создаете.

Вы можете прочитать больше в моем блоге , который показывает вам, как создать собственное приложение для этого.

Что касается 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 бета-версии 2. Описанный выше метод didDiscover никогда не вызывается для рекламы с UUID службы уведомлений об экспозиции.

Полное раскрытие: я ведущий разработчик в Android проект Beacon Library с открытым исходным кодом и автор приложения BeaconScope, созданного на основе этой библиотеки.

РЕДАКТИРОВАТЬ 26 апреля 2020 г. : обновленный ответ выше со ссылкой на пересмотренную версию 1.1 Служба уведомления об экспозиции Bluetooth Spe c, чтобы обновить соглашения об именах из этого изменения и пересмотреть образцы кода для отображения метаданных.

РЕДАКТИРОВАТЬ 30 апреля 2020 : Обновленный ответ основан на выпуске Apple iOS 13.5 beta 2 и XCode 11.5 beta, а также на том факте, что Apple теперь блокирует сторонние приложения от обнаружения маяка службы уведомлений об экспозиции.

...