Получение списка токенов с NFC

Пример получения списка токенов с NFC смарт-карты (getTokensWithAlertMessage).

В данном случае:

  • системный контроллер NFC откроется с сообщением “You can scan NFC-tags by holding them behind the top of your device” (аргумент AlertMessage);
  • поиск остановится как только будет обнаружен токен Криптотокен 2 ЭП (аргумент predicate).
// 1. Проверка наличия nfcWatcher.
// Объект существует, если инициализация менеджера прошла успешно
// и был передан флаг JCReadersNFC
id<JCNFCWatcher> nfcWatcher = JCManager.defaultManager.nfcWatcher;
if (!nfcWatcher) {
    // 2. Обработка отсутствия объекта nfcWatcher
    return;
}

[nfcWatcher
 getTokensWithAlertMessage:@"You can scan NFC-tags by holding them behind the top of your device"
 predicate:^BOOL(id<JCToken> _Nonnull token, BOOL * _Nonnull stop) {
    // 3. При появлении нового токена проверяем его тип
    if(token.type == JCTokenTypeCT2) {
        // Если это токен Криптотокен 2 ЭП, то пропускаем его и останавливаем процесс поиска
        *stop = YES;
        return YES;
    }
    // Если токен не подходит, то игнорируем его и продолжаем поиск
    return NO;
}
 handler:^(NSArray<id<JCToken>> * _Nullable tokens, NSError * _Nullable error) {
    if(error) {
        // 4. Обработка ошибки поиска токенов
        // NFC сессия будет закрыта.
        return;
    }

    // 5. Обработка списка токенов (tokens)

    // 5.1. Если необходимо сразу произвести какие-то действия над токеном,
    // то необходимо тут же выполнять синхронные методы БЕЗ вызова execBlock или execBlockWithParameters,
    // т.к. в этот момент NFC сессия все еще открыта.

    // 5.2. Если никаких действий над токеном не планируется проводиться,
    // то можно выйти из обработчика и NFC сессия закроется. И в дальнейшем все
    // операции над токеном выполнять внутри execBlockWithParameters.
}];