Для работы с NFC-адаптером используется класс JCSNFCSession.
Для проверки поддержки на смартфоне 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-смарт-карте необходимо создать экземпляр класса 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:@"Поднесите смарт-карту к верхней части экрана и дождитесь завершения операции"];
}