Подключение к NFC-смарт-карте

Для работы с NFC-адаптером используется класс JCSNFCSession.

Проверка состояния NFC-адаптера мобильного устройства

Для проверки поддержки на смартфоне NFC-адаптера используется метод JCSNFCSession.state.

Swift

let state = JCSNFCSession.state()

if state == JCSNFCSessionState.incorrectOSVersion
{
// версия операционной системы не поддерживает API для NFC смарт-карт
}
if state == JCSNFCSessionState.unsupported
{
// отсутствует поддержка NFC
}
if state == JCSNFCSessionState.available
{
// NFC поддерживается
}

Objective-C

if (nfcState == JCSNFCSessionStateIncorrectOSVersion)
{
// версия операционной системы не поддерживает API для NFC смарт-карт
}

if (nfcState == JCSNFCSessionStateUnsupported)
{
// отсутствует поддержка NFC
}

if (nfcState == JCSNFCSessionStateAvailable)
{
// NFC поддерживается
}

Подключение к NFC-смарт-карте

Для подключения к NFC-смарт-карте необходимо создать экземпляр класса JCSNFCSession, в конструктор которого надо передать очередь для выполнения потока, коллбэк для вызова функции при возникновении события подключения карты, коллбэк для вызова функции при закрытии сессии работы со смарткартой. Для открытия сессии и ожидания подключения карты нужно вызвать метод JCSNFCSession.open. После завершения работы со смарткартой нужно вызвать метод JCSNFCSession.close.

Swift

@IBAction func onStartNFCSession(_ sender: Any) {

// создать экземпляр класса JCSNFCSession
self.nfcSession = JCSNFCSession(
     queue: DispatchQueue(label: "ru.aladdin.jcsignsample.bgQueue"),
     deviceDetectedHandler: { [weak self] (device) in

         guard let strongSelf = self else { return }

         print("deviceDetectedHandler: \(device)")
         AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
         // Выполнить какие-то действия со смарткартой, например прочитать сертификаты или вполнить подпись


         // Закрытие NFC сессии
         strongSelf.nfcSession?.close()

         },
         closeSessionHandler: { (error) in
         print("closeSessionHandler: \(String(describing: error))")
     })

     // Открытие NFC сессии
     self.nfcSession!.open(alertMessage: "Поднесите смарт-карту к верхней части экрана и дождитесь завершения операции")
     }
}

Objective-C

- (IBAction)onStoreCerts:(id)sender {
__block JCSNFCSession* nfcSession = [[JCSNFCSession alloc] initWithQueue:dispatch_queue_create("ru.aladdin.jcsignsample.bgQueue", DISPATCH_QUEUE_SERIAL)
    deviceDetectedHandler:^(id<JCSDevice> _Nonnull device)
    {
        NSLog(@"deviceDetectedHandler: %@", device);
        AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);


        // Закрытие NFC сессии
        [nfcSession close];
        }
        closeSessionHandler:^(NSError * _Nullable error) {
        NSLog(@"closeSessionHandler: %@", error);
    }];

    // Открытие NFC сессии
    [nfcSession openWithAlertMessage:@"Поднесите смарт-карту к верхней части экрана и дождитесь завершения операции"];
}