NFC (Near Field Communication) teknolojisi, mobil uygulamalara kart okuma, sayaç sorgulama ve donanım iletişimi kapısı açar. Flutter'da bu entegrasyonu gerçek bir kurumsal projede uyguladım — bu yazıda pratik derslerimi paylaşıyorum.
Flutter'da NFC: Temel Mimari
Flutter'da NFC işlemleri için nfc_manager paketi en olgun seçenektir. Android tarafında NfcAdapter sınıfı ile doğrudan iletişim mümkün, ancak platform kanalı (MethodChannel) açmak daha fazla esneklik sağlar.
NfcManager.instance.startSession(
onDiscovered: (NfcTag tag) async {
final mifare = MifareClassic.from(tag);
if (mifare != null) {
await mifare.authenticateSectorWithKeyA(
sectorIndex: 0,
key: Uint8List.fromList([0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]),
);
final data = await mifare.readBlock(blockIndex: 1);
// Veriyi işle
}
},
);ISO-DEP: Akıllı Sayaç Okuma
Elektrik akıllı sayaçları çoğunlukla ISO-DEP (ISO 14443-4) protokolünü kullanır. MIFARE Classic'ten farklı olarak APDU komutları gönderilir. Flutter'da IsoDep.from(tag) ile bu protokole erişilir ve sayaç kimlik, tüketim, tarife bilgileri sorgulanabilir.
Yaygın Hatalar ve Çözümleri
- TagLostException: Kullanıcı kartı çok hızlı çekiyor. UI'da "Kart okununca çekebilirsiniz" mesajı ve vibration feedback şart.
- Sector Authentication Failure: Yanlış key. Sektör başına farklı key kullanıldığını unutmayın.
- Timeout: İşlem süresini minimize edin. Gereksiz read/write işlemlerini birleştirin.
Güvenlik
NFC key'lerini asla hardcode etmeyin. Şifreli key yönetimi, sunucu taraflı key derivation ve her oturum için session token kullanın. Kurumsal projelerde key'ler güvenli bir backend'den alınmalıdır.
Sonuç
Flutter ile NFC entegrasyonu, platform kanallarını doğru kullanarak enterprise seviyede güvenilir hale getirilebilir. Gerçek dünya bağlamında ise kullanıcı deneyimi — doğru feedback, hata mesajları, hız — teknik doğruluk kadar önemlidir.