Table of Contents
Inzicht in het kernkader voor iOS voor gegevensuitwisseling zonder contact
Het iOS Core NFC-kader biedt ontwikkelaars de mogelijkheid om applicaties te bouwen die tags van Near Field Communication (NFC) lezen en schrijven, waardoor snel, veilig en direct contactloos met elkaar kunnen worden uitgewisseld. Omdat NFC-technologie een nietje wordt in retail, transport, toegangscontrole en meer, kan het begrijpen hoe dit kader in uw iOS-app kan worden geïntegreerd, opent het de deur naar moderne, wrijvingsvrije gebruikerservaringen. Dit artikel biedt een uitgebreide, productiegerichte gids voor het Core NFC-kader van initiële setup en sessiebeheer tot geavanceerde functies en implementatie in de praktijk.
Een kort overzicht van NFC op iOS
Near Field Communication (NFC) is een korte afstand draadloze connectiviteit standaard die werkt op 13,56 MHz. Apple introduceerde het Core NFC framework met iOS 11, oorspronkelijk beperkt tot het lezen van NFC Data Exchange Format (NDEF) tags. Latere iOS versies uitgebreide mogelijkheden: iOS 13 toegevoegd ondersteuning voor het schrijven van NDEF tags en achtergrond tags lezen, terwijl iOS 14 en later verbeterde compatibiliteit met ISO-7816, ISO‐15693, en FeliCa tags. Vandaag, Core NFC is beschikbaar op de iPhone 7 en later, het bereiken van miljoenen gebruikers.
NFC werkt op een afstand van enkele centimeters, waardoor het ideaal is voor .Tap-to-interact .. scenario's zoals betaling, loyaliteit, ticketing en identiteitscontrole. Het kader brengt de radiocommunicatie op laag niveau in kaart, zodat ontwikkelaars zich kunnen concentreren op het verwerken en verwerken van de gegevens die van NFC-tags zijn ontvangen.
Kernvermogens van het NFC-kader
Het is van essentieel belang om te begrijpen wat het kernkader voor NFC's kan (en kan) doen voordat met de ontwikkeling wordt begonnen.
- NDEF-tags lezen
- NDEF-tag schrijven
- Achtergrond tag reading . . . Detecteer en lees NFC tags zelfs wanneer uw app op de achtergrond (iOS 13+).
- ISO-7816 en ISO-14443-4 communicatie . . Exchange application protocol data units (APDU's) voor betaling, toegangscontrole en overheids-ID-toepassingen.
- Aangepaste opdracht verzenden
Opvallende beperkingen: Core NFC ondersteunt geen peer-to-peer data-uitwisseling, host-based kaart emulatie (HCE) is niet beschikbaar op iOS (Apple Pay gebruikt een ander veilig element pad), en de NFC-controller is exclusief beschikbaar voor de voorgrondapp, tenzij achtergrondlezen wordt gebruikt.
Projectvereisten
Hardware- en softwarevereisten
- Een iPhone 7 of later (iPhone SE, 6s, en eerdere modellen ontbreken NFC hardware ondersteuning voor Core NFC).
- Xcode 12 of later (voor achtergrondlezen en schrijven ondersteuning).
- iOS 13+ wordt aanbevolen voor volledige NDEF schrijf- en achtergrondmogelijkheden, hoewel alleen lezen werkt terug naar iOS 11.
- Een Apple Developer-account (gratis accounts kunnen testen op fysieke apparaten; commerciële distributie vereist een betaalde account).
Het kernrecht van het NFC invoeren
In uw Xcode project, navigeer naar Signing & Capabilities en voeg de Near Field Communication Tag Reading]-functie toe. Deze actie voegt het vereiste rechtenbestand toe en zorgt ervoor dat uw app toegang tot NFC hardware kan aanvragen.
Uw app voor NFC instellen
Info.pictogramsleutel
Voeg de sleutel toe aan je met een tekenreeks die uitlegt waarom je app toegang nodig heeft tot NFC. Deze tekenreeks wordt aan de gebruiker getoond tijdens de eerste NFC sessie. Bijvoorbeeld:
<key>NFCReaderUsageDescription</key>
<string>This app uses NFC to read your loyalty cards and event tickets.</string>
Als uw app naar tags schrijft, moet u ook de sleutel (iOS 13+) toevoegen.
Achtergrondmodi
Om achtergrondtags te kunnen lezen, moet u de Achtergrondmodus-functie inschakelen en controleren Nabij veldcommunicatie-taglezing. Daarnaast moet uw app de implementeren en voorbereid zijn om de tagdetectie te verwerken terwijl u op de achtergrond zit.
Kern-NFC-sessielevenscyclus
Het centrale object voor het lezen van NDEF-tags is . Een sessie begint wanneer u aanroept en eindigt automatisch wanneer een tag wordt gelezen (als waar is) of wanneer u het handmatig ongeldig maakt. Tijdens de sessie toont het systeem een systeem-aangegeven UI-alarm waarin de gebruiker wordt verteld het apparaat in de buurt van een tag te houden.
Een sessie starten
import CoreNFC
class NFCHandler: NSObject, NFCNDEFReaderSessionDelegate {
private var session: NFCNDEFReaderSession?
func beginScanning() {
guard NFCNDEFReaderSession.readingAvailable else {
print("NFC is not available on this device.")
return
}
session = NFCNDEFReaderSession(delegate: self, queue: DispatchQueue.main, invalidateAfterFirstRead: true)
session?.alertMessage = "Hold your iPhone near the tag."
session?.begin()
}
}
Delegerende terugroepen verwerken
De twee vereiste gedelegeerde methoden toepassen:
- .. Gebeld wanneer een of meer NDEF-berichten succesvol worden gelezen. De methode ontvangt een reeks objecten, elk met records.
- .. Gebeld wanneer de sessie eindigt, hetzij omdat er een tag werd gelezen of een fout opgetreden (bijv., gebruiker geannuleerd, niet ondersteund tag). Gebruik deze methode om de status van de sessie te resetten en de gebruiker te informeren.
Voorbeeld implementatie:
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
for message in messages {
for record in message.records {
let payload = String(data: record.payload, encoding: .utf8) ?? "Unknown"
print("NDEF Record type: \(record.typeNameFormat), payload: \(payload)")
}
}
}
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
if let readerError = error as? NFCReaderError {
switch readerError.code {
case .readerSessionInvalidationErrorUserCanceled:
print("User cancelled scanning.")
case .readerSessionInvalidationErrorSessionTimeout:
print("Session timed out.")
default:
print("Session error: \(error.localizedDescription)")
}
}
}
Lezen van NDEF-tags in diepte
NFC-tags slaan gegevens meestal op in NDEF-formaat. Een NDEF-bericht kan een of meer records bevatten, elk met een type, identificatie en lading. Gemeenschappelijke recordtypes omvatten (platte tekst), (URL's), en (rijk gehalte).
Ontleden van Record-payloads
Om de lading te interpreteren, moet u de en de gegevens inspecteren:
func handleRecord(_ record: NFCNDEFPayload) {
switch record.typeNameFormat {
case .nfcWellKnown:
if record.type == NFCTypeNameFormat.wellKnownTypeText {
let textPayload = String(data: record.payload, encoding: .utf8) ?? ""
print("Text: \(textPayload)")
} else if record.type == NFCTypeNameFormat.wellKnownTypeURI {
let uriPayload = String(data: record.payload, encoding: .utf8) ?? ""
print("URI: \(uriPayload)")
}
case .absoluteURI:
let absoluteURI = String(data: record.payload, encoding: .utf8) ?? ""
print("Absolute URI: \(absoluteURI)")
default:
print("Unhandled type name format: \(record.typeNameFormat)")
}
}
NDEF-tags schrijven
Beginnend met iOS 13 kun je NDEF berichten schrijven naar compatibele tags met (of de gecombineerde met schrijfcapaciteit). Het proces vereist de in .
Hier is een compact voorbeeld met met schrijfondersteuning:
func writeToTag() {
let session = NFCNDEFReaderSession(delegate: self, queue: .main, invalidateAfterFirstRead: false)
session.alertMessage = "Hold your iPhone near the tag to write."
session.begin()
}
func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
guard let tag = tags.first else { return }
session.connect(to: tag) { error in
guard error == nil else { return }
// Create an NDEF message
let payload = NFCNDEFPayload(
format: .nfcWellKnown,
type: NFCTypeNameFormat.wellKnownTypeURI.data(using: .utf8)!,
identifier: Data(),
payload: "https://example.com".data(using: .utf8)!
)
let message = NFCNDEFMessage(records: [payload])
tag.queryNDEFStatus { status, _, error in
guard status == .readWrite, error == nil else { return }
tag.writeNDEF(message) { error in
if error == nil {
print("Write successful.")
}
session.invalidate()
}
}
}
}
Opmerking: Schrijven werkt alleen met herschrijfbare tags (type 2, type 4, enz.). Sommige tags (zoals MIFARE Classic) kunnen speciale handling vereisen of kunnen worden vergrendeld.
Achtergrond-tag lezen
Met de juiste rechten- en achtergrondmodus ingeschakeld, kan uw app NFC-tags detecteren, zelfs als deze niet op de voorgrond staan. Het systeem start of hervat uw app en levert de taggegevens via dezelfde gedelegeerde methoden. U moet ervoor zorgen dat uw app de tag snel behandelt, omdat de achtergrondsessie beperkte tijd heeft.
Belangrijkste punten voor achtergrondlezen:
- Voeg de Near Field Communication Tag Reading achtergrondmodus toe.
- Het systeem toont een waarschuwing met uw apps naam en optioneel de die u hebt ingesteld voordat de sessie eindigde.
- Als de app niet op de achtergrond draait, zal het systeem het een paar seconden op de achtergrond starten.
Geavanceerde NFC: ISO-7816 en APDU-communicatie
Voor toepassingen die directe communicatie met een veilig element in een kaart vereisen (bijvoorbeeld betaalterminals, transitkaarten, overheids-ID's), gebruik of ] objecten. Hiermee kunnen APDU-opdrachten worden verzonden en ontvangen zoals gedefinieerd in de ISO-norm-7816-4.
Voorbeeld: Communiceren met een MIFARE DEFire Card
func readerSession(_ session: NFCReaderSession, didDetect tags: [NFCISO7816Tag]) {
guard let tag = tags.first else { return }
session.connect(to: tag) { error in
guard error == nil else { return }
// Send SELECT command
let selectCommand = NFCISO7816APDU(
instructionClass: 0x00,
instructionCode: 0xA4,
p1Parameter: 0x04,
p2Parameter: 0x00,
data: Data([0xA0, 0x00, 0x00, 0x03, 0x00, 0x00]),
expectedResponseLength: -1
)
tag.sendCommand(apdu: selectCommand) { response, sw1, sw2, error in
if error == nil {
print("Command succeeded, SW1=\(sw1), SW2=\(sw2)")
}
}
}
}
Voor gevorderd gebruik van ISO-7816-tags is een diepgaand begrip van de opdrachtset van de doelkaart vereist. Apple
Beveiliging en privacyoverwegingen
NFC op iOS is ontworpen met privacy en veiligheid in de voorhoede:
- Gebruikerstoestemming .. Een NFC-sessie begint altijd met een zichtbare systeemalarm. De gebruiker moet het apparaat actief bij een tag houden; de app kan niet stil scannen.
- Data encryptie
- Tag-contentvalidatie
- Entitlement en plist keys . . Apple beoordeelt uw gebruiksbeschrijving; het misbruik van NFC mogelijkheden kan leiden tot afwijzing van apps.
Uitgebreide Real-World-gebruikscases
Kern-NFC maakt een grote verscheidenheid aan contactloze interacties mogelijk:
- Contactloze betalingen en loyaliteit . . . Integreer met bestaande NFC-uitgeruste betaalterminals of gebruik het kader om opgeslagen waardekaarten en loyaliteitspunten te lezen.
- Toegangscontrole
- Openbaar vervoer
- Slimme verpakking
- Museum- en retailinformatiepunten . . Plaats NFC-tags naast tentoonstellingen of producten om rijke media-inhoud te leveren wanneer ze worden afgetapt.
- Medisch en farmaceutisch . . Lees de polsbandjes van de patiënt of de etiketten van de medicatie om identiteit en dosering te verifiëren.
Voor inspiratie, zie Apple
Prestatieoptimalisatie en beste praktijken
- Verminder de sessieduur . Set in true wanneer u slechts één tag nodig hebt. Voor batchscannen, sessielevenscyclus zorgvuldig beheren om te voorkomen dat de batterij leegloopt.
- Gebruik een speciale wachtrij
- Handle NFCReaderError gracieus
- Test met echte tags .De simulator ondersteunt NFC niet. Gebruik een verscheidenheid aan fysieke tags (Type 2, Type 4, MIFARE) om compatibiliteit te garanderen.
- Vermijd polling loops
Problemen oplossen van gemeenschappelijke problemen
| Problem | Solution |
|---|---|
NFCNDEFReaderSession.readingAvailable returns false | Ensure the device is iPhone 7 or later. Check that the NFC capability is enabled in Xcode and the entitlement file is present. |
| Session starts but no tag is detected | Make sure the tag is NDEF‑formatted and placed correctly near the top‑back of the iPhone (near the camera). Some thick cases can interfere. |
| App rejected due to missing usage description | Add both NFCReaderUsageDescription and (if writing) NFCWriteAccessUsageDescription to Info.plist. |
| Background reading not triggering | Enable the “Near Field Communication Tag Reading” background mode. Also ensure the app was terminated properly (not force‑killed). |
| Writing fails with “tag not writable” | Check if the tag is locked or read‑only. Some tags require a password before writing. |
De toekomst van NFC op iOS
Apple blijft Core NFC ontwikkelen met elke iOS-versie. Geruchten en opkomende mogelijkheden omvatten uitgebreide ondersteuning voor ISO-15693 (gebruikt in bibliotheekboeken en enkele inventaristags), mogelijke verbeteringen in leesbereik en diepere integratie met Wallet en Express Mode. Ontwikkelaars moeten de Core NFC-versienotities controleren om actueel te blijven.
Conclusie
Het iOS Core NFC-raamwerk is een robuust en goed ontworpen instrument om contactloze gegevensuitwisseling toe te voegen aan een iPhone-app. Door de sessielevenscyclus, NDEF-behandeling en geavanceerde tagcommunicatie te beheersen, kunt u alles leveren van eenvoudige businesscardscanning tot geavanceerde toegangscontrolesystemen. Beginnen met het bouwen van een minimale lezer, dan uitbreiden met schrijf- en achtergrondmogelijkheden zoals uw use case vraagt. Met miljoenen NFC-gecompetteerde iPhones in het veld is de kans om naadloze, op tap gebaseerde ervaringen te creëren nooit groter geweest.