How long does it take NFC to read tags?

NFC i Unity: Din Komplette Guide til Tag-scanning

17/11/2025

Rating: 4.84 (3070 votes)

I en verden, hvor digital og fysisk interaktion smelter mere og mere sammen, er teknologier som Near Field Communication (NFC) blevet uundværlige. Forestil dig at kunne starte din app automatisk, blot ved at holde din telefon hen over et tag, eller læse data fra et produktmærke med et enkelt tryk. Med NFC-plugin'et til Unity kan du bringe disse muligheder direkte ind i dine spil og applikationer. Dette plugin giver Unity-udviklere en kraftfuld og ligetil måde at udnytte NFC-hardwaren på tværs af både Android og iOS, hvilket åbner dørene for innovative brugeroplevelser. Denne omfattende guide vil føre dig gennem alt, hvad du behøver at vide for at integrere NFC-scanning i dine Unity-projekter, fra installation og grundlæggende begreber til avancerede scanningsmetoder og platformspecifikke implementeringer. Vi vil dække, hvordan du opsætter plugin'et, forstår NFC-tags' datastruktur, og implementerer både forgrunds- og baggrundsscanning for at maksimere din applikations interaktivitet.

Does intercom work on multiple devices?
Since Siri is on multiple devices, Intercom works across multiple devices. You are able to use your iPhone, iPad, Apple Watch, HomePod, HomePod mini, or even CarPlay to send messages. Now when you pull in the driveway you can send an Intercom announcement to the whole home to come help carry in the groceries.
Indholdsfortegnelse

Hvad er NFC-plugin'et til Unity?

NFC-plugin'et er et robust værktøj designet til Unity, der giver udviklere mulighed for at interagere med Near Field Communication (NFC) hardwaren på mobile enheder. I sin kerne handler det om at scanne efter NFC-tags og læse de data, der er gemt på dem. Dette kan omfatte alt fra en simpel tekststreng til URL'er, kontaktoplysninger eller mere komplekse applikationsspecifikke data. Plugin'et er især kraftfuldt, da det kan bruges til automatisk at starte din applikation, når en enhed er inden for rækkevidde af et specifikt formateret tag. Denne funktionalitet er tilgængelig på Android og udvalgte iOS 12+-enheder, hvilket gør det muligt for dine apps at reagere intelligent på den fysiske verden omkring dem. Forestil dig en museumsguide-app, der automatisk åbner den relevante informationsside, når brugeren holder sin telefon op mod en udstilling, eller en butiksapp, der viser produktdetaljer, når telefonen rører et prisskilt.

Udover automatisk lancering kan plugin'et også aktivt scanne efter tags i forgrunden, hvilket giver mulighed for at læse NDEF-data (NFC Data Exchange Format) gentagne gange, mens din app er i brug. Dette er ideelt til interaktive spil eller applikationer, der kræver løbende dataudveksling med et NFC-tag. Med en simpel API, der fungerer på tværs af understøttede platforme uden behov for kodeændringer, er integration af NFC-scanning i din applikation en hurtig og problemfri proces, der kan udføres med blot et par kodelinjer. Plugin'et tager højde for de komplekse forskelle mellem Android og iOS' NFC-implementeringer og præsenterer en samlet grænseflade, der forenkler udviklerens arbejde betydeligt.

Nøglefunktioner og Fordele

NFC-plugin'et til Unity er pakket med funktioner, der forenkler udviklingen og udvider dine applikationers muligheder. Disse funktioner er designet til at gøre NFC-integration så problemfri og kraftfuld som muligt:

  • Platformsuafhængig Scanning: Scan nemt efter NFC-tags på både iOS- og Android-enheder med en enkelt API-grænseflade. Dette betyder, at din kode, der håndterer NFC-scanning, kræver ingen ændringer for at fungere på tværs af understøttede platforme, hvilket sparer dig tid og ressourcer i udviklingsprocessen.
  • Automatisk App-lancering: Konfigurer din applikation til automatisk at starte, når en kompatibel NFC-tag registreres. Dette er en game-changer for kontekstuelle app-oplevelser på Android og iOS 12+, hvilket tillader en dybt integreret interaktion mellem den fysiske og digitale verden. Appen kan lanceres fra baggrunden, hvilket giver en meget flydende brugeroplevelse.
  • Læsning af NDEF-data: Hent og behandl NDEF-recorddata fra NFC-tags, hvilket giver dig adgang til en bred vifte af informationstyper. Fra simple URL'er og tekst til mere komplekse datastrukturer kan plugin'et parse og præsentere disse data på en organiseret måde.
  • Forenklet API: Plugin'ets API er designet til at være intuitiv og nem at bruge, hvilket minimerer den tid og indsats, der kræves for integration. Selv udviklere med begrænset erfaring med NFC-udvikling kan hurtigt komme i gang.
  • Eksempelprojekt og Dokumentation: Få adgang til eksempelprojektkode og omfattende ASDocs-reference, der hjælper dig med at komme hurtigt i gang og forstå alle aspekter af plugin'et. Disse ressourcer er uvurderlige for at løse specifikke udfordringer og udforske avancerede anvendelsesscenarier.

Disse funktioner sikrer, at du kan skabe dybt interaktive og kontekstbevidste applikationer, der udnytter NFC-teknologiens fulde potentiale, og giver dine brugere en mere engagerende og intuitiv oplevelse.

Kom godt i gang: Installation af NFC-plugin'et

Før du kan begynde at implementere NFC-funktionalitet i din Unity-app, skal plugin'et tilføjes til dit udviklingsmiljø. Processen er ligetil og kan gøres på flere måder, afhængigt af din foretrukne arbejdsgang:

  1. Via Unity Asset Store: Den mest almindelige og anbefalede metode er at tilføje plugin'et via Unity Asset Store. Åbn Asset Store i din browser eller direkte i Unity-editoren, søg efter "NFC plugin" (eller det specifikke Distriqt NFC plugin) og føj det til dine aktiver. Dette trin kræver typisk en Unity-konto.
  2. Via Unity Package Manager: Når plugin'et er tilføjet til dine aktiver, kan du åbne Package Manager i Unity Editor (Vindue > Package Manager). Vælg "Mine Aktiver"-sektionen, find NFC-plugin'et på listen, og klik på "Import" i nederste højre hjørne. Dette vil importere alle de nødvendige filer til dit projekt og sikre, at alle afhængigheder er på plads.
  3. Manuel Import af Custom Package: Hvis du har downloadet plugin'et som en .unitypackage-fil (f.eks. fra Distriqts repository for direkte adgang til den seneste version), kan du importere det manuelt. I Unity skal du vælge 'Assets / Import Package / Custom Package ...' og derefter navigere til filen com.distriqt.NFC.unitypackage. Dette vil præsentere en importdialog, der viser alle filer til plugin'et; sørg for, at alle filer er valgt for en komplet installation og for at undgå manglende komponenter.

Efter import vil plugin'et blive tilføjet til dit projekt, og du kan nu begynde at bruge dets funktionalitet i din applikation. Det er vigtigt at bekræfte, at alle filer er importeret korrekt for at undgå potentielle fejl under udviklingen.

Vigtigt for Android-udviklere: Proguard Konfiguration

Hvis du bruger en brugerdefineret Proguard-konfiguration til dine Android-builds (ofte brugt til at optimere og obfuscere kode), skal du muligvis tilføje følgende linje til din Proguard-konfigurationsfil for at sikre, at plugin'ets interface-klasse er tilgængelig for Unity under kørsel:

-keep class com.distriqt.extension.nfc.NFCUnityPlugin {*;}

Dette forhindrer Proguard i at fjerne essentielle klasser, der er nødvendige for NFC-funktionaliteten, hvilket kan føre til runtime-fejl, hvis det udelades.

Kontrol af Understøttelse på Enheden

Det er altid en god praksis at kontrollere, om NFC-funktionaliteten understøttes på den aktuelle platform og enhed, før du forsøger at bruge den. Ikke alle enheder har NFC-hardware, og det kan også være deaktiveret af brugeren. Du kan gøre dette ved hjælp af isSupported-flagget, som plugin'et stiller til rådighed:

if ( NFC.isSupported ) { // NFC er understøttet, fortsæt med NFC-relateret kode Debug.Log("NFC er tilgængelig på denne enhed."); } else { // NFC er ikke understøttet, giv en passende alternativ løsning eller deaktiver funktionen Debug.Log("NFC er ikke tilgængelig eller understøttet på denne enhed."); }

Dette giver dig mulighed for at reagere intelligent på, om funktionaliteten er tilgængelig på enheden, og give en passende brugeroplevelse, hvis ikke, f.eks. ved at vise en meddelelse eller skjule NFC-relaterede UI-elementer.

Forståelse af NFC-tags og NDEF-data

NFC-tags kommer i en bred vifte af teknologier og kan også have data skrevet til dem på mange forskellige måder. Både Android og iOS har den bedste understøttelse for NDEF-standarden (NFC Data Exchange Format), som er defineret af NFC Forum. NDEF er et letvægts, binært meddelelsesformat, der bruges til at udveksle data mellem NFC-enheder og tags. Det er den mest almindelige og anbefalede metode til at strukturere data på NFC-tags, da det sikrer interoperabilitet på tværs af enheder og applikationer.

NDEF-data er indkapslet i en meddelelse (NdefMessage), som indeholder et eller flere records (NdefRecord). Hvert NDEF-record skal være velformuleret i henhold til specifikationen for den type record, du ønsker at oprette. Almindelige record-typer inkluderer URL'er (f.eks. til websteder), almindelig tekst (f.eks. produktnavne), URI'er (f.eks. til app-specifikke handlinger), smart posters (kombination af tekst og URL), kontaktoplysninger (vCard) og mere. For eksempel kan et tag indeholde en NdefMessage med to NdefRecords: ét for en URL og ét for en beskrivelse.

Din applikation får besked om NFC-tag-detektionshændelser via NFCEvent. Den mest relevante hændelse er NFCEvent.ACTION_NDEF_DISCOVERED, som udsendes, når et gældende NDEF NFC-tag registreres. NFCEvent vil indeholde et Tag-objekt i variablen tag. Dette objekt indeholder alle tilgængelige oplysninger om det registrerede tag, herunder NdefMessage'er og NdefRecord'er indeholdt i tagget. Dette giver dig mulighed for at parse og reagere på de specifikke data, der er gemt på tagget.

Et simpelt eksempel på, hvordan man lytter til og behandler NDEF-data, kan se sådan ud i din C#-kode:

NFC.Instance.OnNdefDiscovered += InstanceOnNdefDiscovered; void InstanceOnNdefDiscovered (NFCEvent e) { Debug.Log("Ndef-tag opdaget!"); foreach (NdefMessage message in e.tag.messages) { foreach (NdefRecord record in message.records) { // Konverter payload til en læsbar streng (f.eks. UTF-8) string payloadData = System.Text.Encoding.UTF8.GetString(record.payload); Debug.Log("Record-payload: " + payloadData); // Her kan du behandle payloadData, f.eks. vise den i UI eller udføre en handling // Afhængigt af record.type kan du parse data forskelligt. } } }

Dette kodeeksempel viser, hvordan du itererer gennem meddelelser og records på et opdaget tag og udskriver deres payload-data. Dette er grundlaget for at interagere med NFC-tags i din Unity-app og giver dig den fleksibilitet, du har brug for til at håndtere forskellige typer NDEF-data.

Scanningsmetoder: Dispatch vs. Læsertilstand

NFC-plugin'et tilbyder to primære tilstande til scanning af tags, som vi refererer til som "dispatch-tilstand" (også kendt som foreground dispatch på Android) og "læsertilstand" (reader mode). Begge tilstande er meget ens og kommunikerer via de samme hændelser (f.eks. OnNdefDiscovered), men de har vigtige forskelle i funktionalitet, brugsscenarier og systempåvirkning. Forståelse af disse forskelle er afgørende for at vælge den rette tilstand til din applikations behov.

FunktionDispatch-tilstand (Foreground Dispatch)Læsertilstand (Reader Mode)
Primær AnvendelseLytter til systemdisponerede hændelser. Kan starte applikationen i baggrunden.Aktivt læser tags, potentielt flere gange. Kun når appen er aktiv i forgrunden.
BaggrundsscanningJa, understøtter baggrundsscanning og app-lancering fra tags (Android og iOS 12+).Nej, kun aktiv, mens appen er i forgrunden.
Gentagen LæsningTypisk én hændelse pr. tag-registrering, indtil tagget fjernes og genplaceres.Kan læse et tag flere gange uden at flytte enheden, hvis nødvendigt, via Restart().
Interferens med NFCMinimal interferens med andre NFC-funktioner som peer-to-peer (Android Beam) og kort-emulering.Kan forstyrre peer-to-peer (Android Beam) og kort-emuleringsfunktioner, da appen overtager NFC-adapteren.
Anbefalet BrugGenerel brug, især når app-lancering fra tag er et krav, eller når en problemfri brugeroplevelse er vigtig.Kun når du specifikt har brug for at læse et tag gentagne gange, eller har brug for fuld kontrol over læseprocessen, og er opmærksom på potentielle sideeffekter.

Som en generel regel bør du bruge dispatch-tilstand, medmindre du virkelig har brug for at læse et tag flere gange i hurtig rækkefølge eller foretage specifikke handlinger baseret på gentagne aflæsninger. Der er heller ingen grund til, at du ikke kan kombinere de to; brug dispatch-tilstand til at registrere din applikation for lanceringer fra tags (f.eks. når appen ikke kører) og brug læsertilstand til aktivt at scanne, mens din applikation er i brug (f.eks. i et specifikt NFC-scanningsvindue i appen). Denne fleksibilitet giver dig mulighed for at designe avancerede og nuancerede NFC-interaktioner.

NFC på Android-enheder

Android-drevne enheder søger typisk efter NFC-tags, når skærmen er låst op, medmindre NFC er deaktiveret i enhedens indstillinger. Når en Android-enhed opdager et NFC-tag, er den ønskede adfærd, at den mest passende aktivitet håndterer intent'et uden at spørge brugeren, hvilken applikation der skal bruges. Dette skyldes, at enheder scanner NFC-tags på meget kort afstand, og at bede brugeren om manuelt at vælge en aktivitet sandsynligvis ville tvinge dem til at flytte enheden væk fra tagget og afbryde forbindelsen. Android's system er designet til at gøre denne proces så gnidningsfri som muligt for brugeren.

Android's tag-dispatch-system analyserer scannede NFC-tags, parser dem og forsøger at finde applikationer, der er interesserede i de scannede data. Dette gøres ved at:

  1. Parse NFC-tagget og finde MIME-typen eller en URI, der identificerer data-payload'en i tagget.
  2. Indkapsle MIME-typen eller URI'en og payload'en i et intent, som er en abstrakt beskrivelse af en handling, der skal udføres.
  3. Starte en aktivitet baseret på det oprettede intent, der matcher applikationens intent-filtre.

Det er afgørende, at din aktivitet er designet til kun at håndtere de NFC-tags, den faktisk er interesseret i, for at forhindre, at "Activity Chooser" (hvor brugeren skal vælge en app) vises unødvendigt.

Automatisk App-lancering via Intent-filtre

For at få din applikation til automatisk at starte og håndtere NFC-tags uden at skulle være kørende, skal du tilføje NFCActionActivity til din applikations Android-manifesttilføjelser og anvende de passende filtre for din applikation. Plugin'et leverer en aktivitet, som du kan bruge til at informere din applikation om NFC-tagget. Du skal stadig konstruere dine intent-filtre i dine manifesttilføjelser for korrekt at starte denne aktivitet og lancere din applikation, når et tag af interesse registreres af Android-systemet.

Du kan tilføje disse manifesttilføjelser på flere måder:

  • Brug af NFCManifest.androidlib: Du kan kopiere mappen NFCManifest.androidlib fra plugin'ets eksempelprojekt til din applikations Assets/Plugins/Android-mappe og derefter redigere AndroidManifest.xml-filen i denne mappe, så den matcher dine krav. Dette er den nemmeste metode, hvis du ikke allerede har en brugerdefineret manifestfil.
  • Manuel tilføjelse til et brugerdefineret manifest: Hvis du allerede bruger en brugerdefineret Android-manifestfil, skal du blot tilføje aktiviteten og dens intent-filtre direkte til den fil. Sørg for at placere dem korrekt inden for <application>-tagget.

Her er nogle eksempler på intent-filtre, der viser, hvordan du kan registrere din app for forskellige typer NDEF-tags:

NDEF-record med en URL, der peger på https://airnativeextensions.com:

<activity android:name="com.distriqt.extension.nfc.activities.NFCActionActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="true" > <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="airnativeextensions.com" /> </intent-filter> </activity>

NDEF-record med almindelig tekst (text/plain MIME-type):

<activity android:name="com.distriqt.extension.nfc.activities.NFCActionActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="true" > <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>

Bemærk: Du kan tilføje flere intent-filter-knuder til den samme aktivitet for at registrere dig for flere forskellige tag-typer eller dataformater. Dette giver stor fleksibilitet i, hvilke tags din applikation skal reagere på.

Aktiv Forgrundsscanning på Android

Hvis du ikke kræver, at din applikation startes fra et tag, men i stedet blot har brug for aktiv forgrundsscanning (læsning af tags, mens din applikation er aktiv og i forgrunden), kan du bruge metoden RegisterForegroundDispatch(). Dette indebærer at kalde denne metode for at registrere din applikation for NFC-tag-detektion under kørsel, uden at skulle ændre manifestfilen for app-lancering.

Ligesom intent-filtrene ovenfor skal du specificere de URL'er eller MIME-typer, der er relevante for din applikation. Dette gøres gennem indstillingerne i en instans af ScanOptions-klassen:

ScanOptions options = new ScanOptions(); options.urls = new string[] { "https://airnativeextensions.com" }; // Eller options.mimeTypes = new string[] { "text/plain" }; NFC.Instance.RegisterForegroundDispatch(options);

Denne metode er ideel til scenarier, hvor appen allerede er åben, og du ønsker at give brugeren mulighed for at scanne tags for yderligere interaktion inden for appens kontekst, f.eks. til at tilføje varer til en indkøbskurv eller aktivere en funktion i et spil.

NFC på iOS-enheder

NFC-læsning på iOS er tilgængelig som en aktiv forgrundsaktivitet fra iOS 11 og som en baggrunds- / systemniveauaktivitet fra iOS 12 og nyere. Dette giver Apple-brugere en mere flydende og integreret oplevelse med NFC-teknologi, især med de nyere enheder.

How to read NFC tags on iPhone XS XR?
Download the Apps and you are good to go. If you don't have the XS, XS Max or XR, then to read NFC tags, you need to have installed iOS 11 or later and will need an App. NFC tag scanning with an App is only available on the iPhone 7, iPhone 7 Plus, iPhone 8, iPhone 8 Plus and the iPhone X.

Baggrundsscanning på iOS 12+

På iPhones, der understøtter baggrunds-tag-læsning (primært iPhone XS og nyere modeller), scanner systemet automatisk efter og læser NFC-data uden at kræve, at brugerne aktivt scanner tags ved hjælp af en app. Systemet viser en pop-up-meddelelse, hver gang det læser et nyt tag i baggrunden. Efter at brugeren trykker på meddelelsen, leverer systemet tag-dataene til den relevante app. Hvis iPhonen er låst, beder systemet brugeren om at låse telefonen op, før tag-dataene leveres til appen for at sikre sikkerhed og privatliv.

Når enheden scanner et NFC-tag i baggrunds-tag-læsetilstand, inspicerer systemet taggets NDEF-meddelelse for en URI-record. URI-recorden skal indeholde enten et universelt link eller et understøttet URL-skema. Det er vigtigt at bemærke, at du ikke kan bruge et brugerdefineret URL-skema til at starte din applikation via baggrundsscanning på iOS; dette fungerer kun med et foruddefineret sæt URL-skemaer, primært til web-URL'er (http://, https://), e-mail (mailto:), SMS (sms:) osv.

For tags, der indeholder universelle links, præsenterer systemet en meddelelse og starter derefter (eller bringer i forgrunden) den app, der er forbundet med det universelle link, efter at brugeren trykker på meddelelsen. Systemet sender NDEF-meddelelsen til appen, og plugin'et modtager den. Når du kalder CheckStartupData(), vil NFCEvent'et blive udsendt, efter samme proces som på Android. Hvis der ikke er installerede apps forbundet med det universelle link, åbner systemet linket i Safari.

Opsætning af Universelle Links til iOS

For at universelle links skal fungere korrekt med NFC på iOS, skal du opsætte et universelt link til din applikation og inkludere domænet i com.apple.developer.associated-domains-rettighedssektionen i dine iPhone-tilføjelser. Dette fortæller iOS-systemet, hvilke domæner din app er autoriseret til at håndtere.

I Unity skal du tilføje dit domæne til NFCConfig.cs-klassen, som typisk findes i mappen Assets/distriqt/NFCUnity/NFC/Editor. Indstil dine domæner i associatedAppDomains-array'et, f.eks.:

public static string[] associatedAppDomains = new string[] { "applinks:example.com", "applinks:anotherdomain.com" };

Disse domæner vil automatisk blive anvendt på rettighederne for din applikation af plugin'ets post-build-scripts, hvilket forenkler konfigurationen betydeligt.

Aktiv Forgrundsscanning på iOS

For at starte læsning af tags på iOS, når din app er i forgrunden, kalder du RegisterForegroundDispatch()-metoden. Det er vigtigt at bemærke, at der ikke er nogen filtreringsmetoder på iOS for RegisterForegroundDispatch(), som der er på Android. Det betyder, at alle NDEF-formaterede tags vil blive registreret, og hændelser vil blive udsendt til din applikation. Eventuelle ScanOptions, der leveres (som i Android-tilfældet), vil blive ignoreret i forhold til filtrering af tag-typer for forgrundsscanning på iOS.

NFC.Instance.RegisterForegroundDispatch();

Mens scanningen er aktiv på iOS, vil en standard systemdialogboks blive præsenteret for din bruger, der beder dem om at holde enheden tæt på et tag:

Du kan tilpasse meddelelsen, der vises i denne dialogboks, for at give specifikke instruktioner eller kontekst til din bruger. Dette gøres ved at indstille message-egenskaben i de ScanOptions, der sendes til RegisterForegroundDispatch():

ScanOptions options = new ScanOptions(); options.message = "Hold din enhed nær genstanden for at lære mere om den."; NFC.Instance.RegisterForegroundDispatch(options);

Denne meddelelse er vigtig for at informere brugeren om, hvad der sker, og forbedre brugeroplevelsen under scanning, hvilket gør interaktionen mere intuitiv og brugervenlig.

Håndtering af Startdata efter App-lancering

Hvis din applikation startes fra et NFC-tag (enten via Android's intent-system eller iOS's universelle links), skal du sørge for at følge et par trin for at sikre, at du korrekt modtager hændelsen og behandler tag-dataene. Plugin'et gemmer informationen om tagget, indtil du kalder CheckStartupData(), som derefter vil udløse hændelsesudsendelsen. Denne mekanisme giver dig mulighed for at sikre, at din applikation er fuldt initialiseret og klar til at håndtere hændelsen, før den faktisk udsendes, hvilket forhindrer potentielle race conditions eller fejl.

Så ved første kørsel af din applikation – typisk i din hovedscript's Start()-metode eller lignende – skal du opsætte dine handlere for NFC-hændelserne og derefter kalde CheckStartupData(). Hvis applikationen blev startet fra en baggrunds-tag-scanning, vil du straks modtage den relevante OnNdefDiscovered-hændelse:

NFC.Instance.OnNdefDiscovered += Instance_OnNdefDiscovered; // Opsæt din hændelseshandler NFC.Instance.CheckStartupData(); // Kontroller for startdata fra et NFC-tag

Hvis du ikke kalder CheckStartupData(), vil lanceringstag-hændelsen ikke blive udsendt, og de data, der udløste app-lanceringen, vil gå tabt. Dog vil alle efterfølgende baggrunds- eller forgrundshændelser (dvs. nye tag-scanninger, mens appen allerede kører) fungere som normalt. Denne specifikke mekanisme dækker udelukkende det tilfælde, hvor din applikation ikke kørte på det tidspunkt, tagget blev scannet, og din applikation blev lanceret som et direkte resultat af scanningen. Det er en afgørende del af at skabe en robust NFC-integration, der håndterer alle lanceringstilfælde.

Avanceret Læsertilstand: Fleksibel Tag-læsning

Læsertilstand (Reader Mode) kan bruges til aktivt at scanne efter tags og læse dem flere gange. Dette er især nyttigt i tilfælde, hvor data på tagget ændrer sig dynamisk, eller hvor du har brug for at genlæse tagget på et senere tidspunkt for at bekræfte dets tilstedeværelse eller status. Eksempler kan inkludere lagerstyring, hvor tags opdateres, eller interaktive udstillinger, der kræver gentagne interaktioner.

Det er dog vigtigt at bemærke, at brug af læsertilstand kan forstyrre enhedens andre NFC-operationer. Specifikt kan det deaktivere peer-to-peer (Android Beam) og kort-emuleringstilstande af NFC-adapteren på denne enhed. Dette skyldes, at læsertilstand giver din applikation eksklusiv kontrol over NFC-hardwaren. Overvej om disse potentielle sideeffekter er acceptable for din applikations brugsscenarie, før du vælger læsertilstand.

For at starte læsertilstand skal du kalde EnableReaderMode():

NFC.Instance.EnableReaderMode();

Mens læsertilstand er aktiv, vil alle registrerede tags udsende en OnNdefDiscovered-hændelse, ligesom i dispatch-tilstanden. Du kan opsætte din hændelseshandler til at behandle disse begivenheder:

NFC.Instance.OnNdefDiscovered += InstanceOnNdefDiscovered; void InstanceOnNdefDiscovered (NFCEvent e) { Debug.Log("Tag opdaget i læsertilstand!"); // Behandl det opdagede tag her. Du kan genlæse det, hvis nødvendigt. }

Du skal sørge for at deaktivere læsertilstand, når du er færdig med at scanne, for at genoprette normal NFC-funktionalitet på enheden og undgå unødigt batteriforbrug. Dette gøres ved at kalde DisableReaderMode():

NFC.Instance.DisableReaderMode();

Hvis du har scannet et tag og ønsker at genlæse det, mens det stadig er inden for rækkevidde (f.eks. for at tjekke for opdaterede data), skal du kalde Restart() for at invalidere eventuelle tidligere scannede tags og tvinge en ny scanning:

NFC.Instance.Restart();

Hvis et tidligere scannet tag stadig er inden for rækkevidde efter et Restart(), vil en anden OnNdefDiscovered-hændelse blive udsendt med de seneste payload-data. Dette giver en høj grad af kontrol over, hvordan og hvornår tags læses, hvilket er afgørende for dynamiske NFC-applikationer, der kræver opdaterede oplysninger eller gentagen interaktion.

Ofte Stillede Spørgsmål (FAQ)

Her besvarer vi nogle af de mest almindelige spørgsmål vedrørende NFC-plugin'et til Unity og generel NFC-funktionalitet:

Hvor hurtigt læser NFC-tags?

NFC-tags læses ekstremt hurtigt, ofte inden for millisekunder. Selve processen med at etablere forbindelse og overføre små mængder data er næsten øjeblikkelig. Den primære faktor, der kan påvirke den opfattede hastighed, er, hvor hurtigt systemet og din applikation kan behandle de modtagne data og udføre de tilhørende handlinger. Android's tag-dispatch-system er designet til at håndtere tags så hurtigt som muligt for at undgå, at brugeren skal flytte enheden væk fra tagget og afbryde forbindelsen. Så i praksis er læsehastigheden så hurtig, at den føles øjeblikkelig for brugeren, og eventuelle forsinkelser skyldes typisk applikationens behandlingslogik frem for selve NFC-hardwaren.

Kan jeg læse tekststrenge fra NFC-tags i Unity?

Ja, absolut! NFC-plugin'et giver dig direkte adgang til NDEF-recorddata, herunder tekststrenge. Som vist i eksemplet under "Forståelse af NFC-tags og NDEF-data", kan du nemt få fat i NdefRecord.payload, som ofte indeholder tekstdata, og konvertere det til en læsbar streng:

string payloadData = System.Text.Encoding.UTF8.GetString(record.payload);

Dette giver dig fuld fleksibilitet til at læse og behandle almindelige tekstbaserede data fra dine NFC-tags og integrere dem i din applikations logik eller brugergrænseflade.

Hvilke iOS-enheder understøtter baggrunds-NFC-læsning?

Baggrunds-NFC-tag-læsning på iOS er understøttet på iPhone XS og nyere modeller, der kører iOS 12 eller nyere. Ældre iPhones (f.eks. iPhone 7, 8, X) kan læse NFC-tags, men kun når en NFC-læseapp er aktiv i forgrunden, og brugeren aktivt initierer en scanning gennem appen. Det er vigtigt at informere dine brugere om disse begrænsninger, hvis din app målretter mod ældre iOS-enheder.

Kan jeg bruge brugerdefinerede URL-skemaer til at starte min iOS-app via NFC?

Nej, for baggrunds-NFC-tag-læsning og automatisk app-lancering på iOS er det ikke muligt at bruge brugerdefinerede URL-skemaer. Systemet understøtter kun universelle links (Universal Links) eller et foruddefineret sæt af standard URL-skemaer (f.eks. http://, https://, mailto:, sms:). For at starte din app via NFC på iOS skal du opsætte universelle links, der er forbundet med din applikation og dit domæne, som beskrevet i afsnittet om iOS-specifikke implementeringer.

Hvad er forskellen mellem "dispatch mode" og "reader mode"?

Forskellen ligger primært i aktiviteten og kontrolniveauet, som din applikation har over NFC-hardwaren:

  • Dispatch-tilstand: Lytter til systemdisponerede NFC-hændelser. Den kan starte din applikation fra et tag i baggrunden og forstyrrer typisk ikke andre NFC-funktioner på enheden. Den er velegnet til de fleste generelle anvendelser, hvor du ønsker en problemfri interaktion uden at appen skal have fuld kontrol over NFC-hardwaren.
  • Læsertilstand: Giver din applikation aktiv kontrol over NFC-læseren, mens den er i forgrunden. Den kan læse tags flere gange, hvilket er nyttigt for dynamiske tags, men den kan også deaktivere andre NFC-funktioner som peer-to-peer og kort-emulering, da appen overtager NFC-adapteren eksklusivt. Brug denne, når du har brug for gentagen læsning eller mere finkornet kontrol over læseprocessen.

Valget mellem de to afhænger af din applikations specifikke behov og den ønskede brugeroplevelse.

Konklusion

NFC-plugin'et til Unity åbner op for en verden af interaktive muligheder for dine mobile applikationer. Fra automatisk app-lancering til aktiv læsning af komplekse NDEF-data giver dette plugin dig de værktøjer, du skal bruge for at skabe innovative og engagerende brugeroplevelser. Uanset om du udvikler til Android eller iOS, sikrer den ensartede API og den omfattende funktionalitet en glidende integrationsproces. Ved at følge de trin og principper, der er beskrevet i denne guide, er du godt rustet til at udnytte NFC-teknologiens fulde potentiale i dine Unity-projekter. Begynd at eksperimentere med NFC i dag, og se, hvordan dine apps kan forbinde den digitale og fysiske verden på nye og spændende måder, forbedre brugervenligheden og åbne op for helt nye interaktionsmønstre.

Hvis du vil læse andre artikler, der ligner NFC i Unity: Din Komplette Guide til Tag-scanning, kan du besøge kategorien Mobiludvikling.

Go up