Реализация NFC в Flutter: Полное руководство
FlutterPulseЭта статья переведена специально для канала FlutterPulse. В этом канале вы найдёте много интересных вещей, связанных с Flutter. Не забывайте подписываться! 🚀

Введение
Введение
Near Field Communication (NFC) — это технология беспроводной связи короткого радиуса действия, которая позволяет осуществлять беспрепятственный обмен данными между устройствами, находящимися в непосредственной близости. Она широко используется для различных приложений, таких как мобильные платежи, контроль доступа, передача данных и аутентификация. С увеличением интеграции NFC в смартфоны и другие умные устройства, её использование продолжает быстро расти.
В этой статье мы рассмотрим технологию NFC, её различные случаи использования и как интегрировать функциональность NFC в приложение на Flutter. Вы узнаете, как читать и записывать NFC-теги, обрабатывать NFC-сессии и реализовывать функции безопасности для повышения безопасности данных.
Понимание NFC
NFC работает на основе электромагнитной индукции и функционирует в пределах нескольких сантиметров. Она обеспечивает безопасный и удобный обмен данными между двумя устройствами, поддерживающими NFC, или между устройством и NFC-тегом. NFC имеет три основных режима работы:
- Режим чтения/записи — Этот режим позволяет устройству читать данные с NFC-тега или записывать данные на него.
- Режим эмуляции карты — Это позволяет устройству действовать как NFC-карта, чаще всего используемая для мобильных платежей или безопасного доступа.
- Режим устройство-устройство — Этот режим позволяет двум устройствам, поддерживающим NFC, обмениваться данными, что полезно для обмена файлами и аутентификации.
Ключевые применения NFC
NFC широко используется в различных отраслях благодаря своей универсальности и функциям безопасности:
- Мобильные платежи: NFC обеспечивает бесконтактные платежи через сервисы, такие как Google Pay, Apple Pay и Samsung Pay.
- Контроль доступа и безопасность: Офисы, отели и жилые здания используют умные замки и проверку идентичности на основе NFC.
- Общественный транспорт: Многие метрополитены и автобусные сети используют карты проезда с поддержкой NFC для удобного билетирования.
- Здравоохранение: NFC-теги хранят информацию о пациентах, обеспечивая быстрый и лёгкий доступ в больницах и клиниках.
- Маркетинг и реклама: Бизнес использует NFC в интерактивной рекламе, плакатах и аутентификации продуктов.
- Умный дом и Интернет вещей: NFC-теги можно использовать для управления умными устройствами, например, настройки термостата или открытия дверей.
Реализация NFC в Flutter
Flutter предоставляет несколько пакетов для интеграции NFC, среди которых flutter_nfc_kit и nfc_manager являются наиболее часто используемыми. В этом руководстве мы будем использовать nfc_manager для демонстрации того, как читать и записывать NFC-теги.
Шаг 1: Добавление зависимостей
Для начала добавьте необходимую зависимость в файл pubspec.yaml:
dependencies:
flutter:
sdk: flutter
nfc_manager: ^3.2.0
Затем получите зависимости, выполнив команду:
flutter pub get
Шаг 2: Настройка разрешений
Для работы функциональности NFC на мобильных устройствах необходимо добавить необходимые разрешения.
Разрешения для Android
Измените файл AndroidManifest.xml так, чтобы он содержал:
<uses-permission android:name="android.permission.NFC"/> <uses-feature android:name="android.hardware.nfc" android:required="true"/>
Разрешения для iOS
Для устройств iOS обновите Info.plist:
<key>NFCReaderUsageDescription</key> <string>Мы используем NFC для чтения и записи тегов</string>
Шаг 3: Реализация чтения NFC
Теперь создадим базовый интерфейс Flutter для сканирования NFC-тегов и отображения их содержимого.
import 'package:flutter/material.dart';
import 'package:nfc_manager/nfc_manager.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: NFCReaderScreen(),
);
}
}
class NFCReaderScreen extends StatefulWidget {
@override
_NFCReaderScreenState createState() => _NFCReaderScreenState();
}
class _NFCReaderScreenState extends State<NFCReaderScreen> {
String nfcData = "Прикоснитесь к NFC-тегу";
Future<void> startNFC() async {
bool isAvailable = await NfcManager.instance.isAvailable();
if (!isAvailable) {
setState(() {
nfcData = "NFC недоступен на этом устройстве";
});
return;
}
NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
setState(() {
nfcData = tag.data.toString();
});
NfcManager.instance.stopSession();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Читатель NFC")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(nfcData, style: TextStyle(fontSize: 18)),
SizedBox(height: 20),
ElevatedButton(
onPressed: startNFC,
child: Text("Сканировать NFC-тег"),
),
],
),
),
);
}
}
Шаг 4: Реализация записи NFC
Помимо чтения, вы также можете записывать данные на NFC-тег. Ниже приведен пример:
Future<void> writeNFC(String message) async {
bool isAvailable = await NfcManager.instance.isAvailable();
if (!isAvailable) {
return;
}
NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
Ndef ndef = Ndef.from(tag);
if (ndef != null && ndef.isWritable) {
NdefMessage ndefMessage = NdefMessage([NdefRecord.createText(message)]);
await ndef.write(ndefMessage);
}
NfcManager.instance.stopSession();
});
}
Шаг 5: Улучшение приложения
Чтобы улучшить функциональность и удобство использования вашего NFC-приложения, рассмотрите возможность реализации следующих функций:
- Обработка ошибок и обратная связь с пользователем: Отображать уведомления или всплывающие окна для различных состояний NFC (например, не поддерживаемое устройство, ошибки чтения/записи).
- Безопасная NFC-коммуникация: Шифровать данные перед записью на NFC-тег и реализовывать механизмы аутентификации.
- Фоновая обработка NFC: Позволяйте чтению NFC-тегов даже когда приложение работает в фоне.
- Поддержка нескольких тегов: Включите сканирование нескольких тегов в одной сессии для массовых операций.
- Собственные структуры данных: Храните структурированные данные, такие как JSON, в NFC-тегах вместо обычного текста.
Шаг 6: Тестирование NFC-функциональности
Чтобы протестировать ваше приложение Flutter NFC:
- Установите его на физическое устройство с поддержкой NFC.
- Попробуйте сканировать разные NFC-теги и наблюдайте результаты.
- Протестируйте функцию записи, закодировав текст в NFC-теги и прочитав их обратно.
Заключение
Технология NFC предлагает удобный и безопасный способ передачи данных и обеспечения бесконтактных взаимодействий. Используя Flutter и пакет nfc_manager, вы можете легко интегрировать функциональность NFC в свои мобильные приложения. Будь то для платежей, аутентификации или взаимодействий в IoT, NFC улучшает пользовательский опыт.
Следуя шагам в этом руководстве, вы сможете успешно реализовать чтение и запись NFC в вашем приложении Flutter. Теперь попробуйте добавить продвинутые функции, такие как шифрованное хранение, фоновое сканирование или поддержка нескольких тегов, чтобы сделать ваше приложение еще мощнее!