Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questo argomento si applica solo a Windows 10 Mobile.
Questo argomento descrive come usare Host Card Emulation (HCE) per comunicare direttamente con un lettore di schede NFC (Near-Field Communication) e consentire ai clienti di accedere ai servizi tramite il telefono (anziché una scheda fisica) senza un operatore di rete mobile (MNO).
Elementi necessari per sviluppare un'app HCE
Per sviluppare un'app di emulazione di schede basata su HCE, è necessario installare Microsoft Visual Studio 2015 (vedere la pagina di download di Visual Studio) (include gli strumenti di sviluppo di Windows) e l'emulatore di Windows 10 Mobile.
Per ulteriori informazioni sulla configurazione, vedere Test con l'Emulatore Microsoft per Windows 10 Mobile.
Facoltativamente, se vuoi eseguire il test con un dispositivo Windows 10 Mobile reale invece dell'emulatore di Windows 10 Mobile incluso, ti serviranno anche gli elementi seguenti.
- Un dispositivo Windows 10 Mobile con supporto NFC HCE.
- Terminale lettore che supporta i protocolli ISO/IEC 14443-4 e ISO/IEC 7816-4
Windows 10 Mobile implementa un servizio HCE che fornisce le funzionalità seguenti.
- Le app possono registrare gli identificatori applet (AID) per le carte che desiderano emulare.
- Risoluzione dei conflitti e instradamento del comando APDU (Application Protocol Data Unit) e delle coppie di risposta verso una delle applicazioni registrate basandosi sulla selezione del lettore di schede esterno e sulla preferenza dell'utente.
- Gestione di eventi e notifiche alle app in seguito alle azioni dell'utente.
Windows 10 supporta l'emulazione di smart card basate su ISO-DEP (ISO-IEC 14443-4) e comunica usando le APDU definite nella specifica ISO-IEC 7816-4. Windows 10 supporta la tecnologia ISO/IEC 14443-4 Type A per le app HCE. Le tecnologie di tipo B, tipo F e nonISO-DEP (ad esempio MIFARE) vengono instradate alla SIM per impostazione predefinita.
Solo i dispositivi Windows 10 Mobile sono abilitati con la funzionalità di emulazione delle carte. L'emulazione di schede basate su SIM e HCE non è disponibile in altre versioni di Windows 10.
L'architettura per il supporto dell'emulazione di schede basate su SIM e HCE è illustrata nel diagramma seguente.
Selezione dell'applicazione e instradamento AID
Per sviluppare un'app HCE, è necessario comprendere in che modo i dispositivi Windows 10 Mobile instradano gli AID a un'app specifica, poiché gli utenti possono installare diverse app HCE. Ogni app può registrare più schede HCE e basate su SIM.
Quando l'utente tocca il dispositivo Windows 10 Mobile a un terminale, i dati vengono indirizzati automaticamente all'app appropriata installata nel dispositivo. Questo routing si basa sull'ID applet (AID) che è un identificatore di 5-16 byte. Durante un tocco, il terminale esterno trasmetterà un comando APDU SELECT per specificare l'AID a cui si desidera instradare tutti i comandi APDU seguenti. I comandi SELECT successivi modificheranno di nuovo il routing. In base agli ID di intelligenza artificiale registrati dalle app e dalle impostazioni utente, il traffico APDU viene instradato a un'app specifica, che invierà una risposta APDU. Tenere presente che un terminale può voler comunicare con diverse app durante lo stesso tocco. È quindi necessario assicurarsi che l'attività in background dell'app venga chiusa il più rapidamente possibile quando disattivata per fare spazio all'attività in background di un'altra app per rispondere all'APIDU. Le attività in background verranno illustrate più avanti in questo argomento.
Le app HCE devono registrarsi con ID applicazione specifici che possono gestire, in modo da ricevere APDU per un AID. Le app dichiarano gli AID usando i gruppi di AID. Un gruppo AID è concettualmente equivalente a una singola carta fisica. Ad esempio, una carta di credito viene dichiarata con un gruppo AID e una seconda carta di credito di una banca diversa viene dichiarata con un secondo gruppo AID diverso, anche se entrambe possono avere lo stesso AID.
Risoluzione dei conflitti per i gruppi AID di pagamenti
Quando un'app registra schede fisiche (gruppi di AID), può dichiarare la categoria del gruppo AID come "Pagamento" o "Altro". Anche se in un determinato momento possono essere registrati più gruppi di AID di pagamento, è possibile abilitare solo uno di questi gruppi di AID di pagamento per Tap e Pay alla volta, selezionato dall'utente. Questo comportamento esiste perché l'utente si aspetta di avere il controllo della scelta consapevole di una singola carta di credito o di debito da usare, in modo da non pagare involontariamente con un'altra carta quando avvicina il dispositivo a un terminale.
Tuttavia, più gruppi di AID registrati come "Altro" possono essere abilitati contemporaneamente senza l'interazione dell'utente. Questo comportamento esiste perché si prevede che altri tipi di carte, come quelle fedeltà, i coupon o i titoli di viaggio, funzionino automaticamente senza alcuno sforzo o introduzione ogni volta che si avvicina il telefono.
Tutti i gruppi di AID registrati come "Pagamento" vengono visualizzati nell'elenco delle carte nella pagina Impostazioni NFC, in cui l'utente può selezionare la carta di pagamento predefinita. Quando si seleziona una carta di pagamento predefinita, l'app che ha registrato questo gruppo di AID di pagamento diventa l'app di pagamento predefinita. Le app di pagamento predefinite possono abilitare o disabilitare uno dei gruppi di AID senza l'interazione dell'utente. Se l'utente rifiuta il prompt dell'app di pagamento predefinita, l'app di pagamento predefinita corrente (se presente) rimane comunque quella predefinita. Lo screenshot seguente mostra la pagina Nfc Settings (Impostazioni NFC).
Usando lo screenshot di esempio precedente, se l'utente modifica la carta di pagamento predefinita in un'altra carta non registrata da "Applicazione HCE 1", il sistema crea una richiesta di conferma per il consenso dell'utente. Tuttavia, se l'utente modifica la carta di pagamento predefinita con un'altra carta registrata da "HCE Application 1", il sistema non richiede una conferma all'utente poiché "HCE Application 1" è già l'app di pagamento predefinita.
Risoluzione dei conflitti per i gruppi di AID di mancato pagamento
Le carte non di pagamento classificate come "Altro" non vengono visualizzate nella pagina delle impostazioni NFC.
L'app può creare, registrare e abilitare gruppi di AID non di pagamento nello stesso modo dei gruppi di AID di pagamento. La differenza principale è che per i gruppi aid non di pagamento la categoria di emulazione è impostata su "Altro" anziché su "Pagamento". Dopo aver registrato il gruppo AID con il sistema, è necessario attivare il gruppo AID per ricevere il traffico NFC. Quando si tenta di abilitare un gruppo AID non di pagamento per ricevere traffico, non viene richiesta all'utente alcuna conferma, a meno che non ci sia un conflitto con uno degli AID già registrati nel sistema da un'app diversa. Se si verifica un conflitto, l'utente verrà informato su quale scheda e quale app associata verrà disabilitata se sceglie di abilitare il gruppo AID appena registrato.
Coesistenza con applicazioni NFC basate su SIM
In Windows 10 Mobile il sistema configura la tabella di routing del controller NFC usata per prendere decisioni di routing a livello di controller. La tabella contiene informazioni di routing per gli elementi seguenti.
- Route di AID individuali.
- Percorso basato su protocollo (ISO-DEP).
- Routing basato sulla tecnologia (NFC-A/B/F).
Quando un lettore esterno invia un comando "SELECT AID", il controller NFC verifica innanzitutto i percorsi AID nella tabella di routing per trovare una corrispondenza. Se non vi è alcuna corrispondenza, utilizzerà il percorso basato su protocollo come percorso predefinito per il traffico ISO-DEP (14443-4-A). Per qualsiasi altro traffico nonISO-DEP verrà usato il routing basato sulla tecnologia.
Windows 10 Mobile offre un'opzione di menu "Scheda SIM" nella pagina Impostazioni NFC per continuare a usare le app legacy basate su SIM di Windows Phone 8.1, che non registrano i propri AID con il sistema. Se l'utente seleziona "SIM card" come carta di pagamento predefinita, la route ISO-DEP è impostata su UICC, per tutte le altre selezioni nel menu a discesa la route ISO-DEP è all'host.
Il percorso ISO-DEP è impostato su "Scheda SIM" per i dispositivi con una scheda SIM con SE abilitato quando il dispositivo viene avviato per la prima volta con Windows 10 Mobile. Quando l'utente installa un'app abilitata per HCE e tale app abilita qualsiasi registrazione di gruppo AID HCE, la route ISO-DEP verrà indirizzata all'host. Le nuove applicazioni basate su SIM devono registrare gli AID nella SIM affinché i percorsi AID specifici vengano popolate nella tabella di instradamento del controller.
Creazione di un'app basata su HCE
L'app HCE ha due parti.
- L'app in primo piano principale per l'interazione con l'utente.
- Un'attività in background attivata dal sistema per elaborare le APDU per un determinato AID.
A causa dei requisiti di prestazioni estremamente rigorosi per il caricamento dell'attività in background in risposta a un tocco NFC, è consigliabile implementare l'intera attività in background nel codice nativo C++/CX (incluse eventuali dipendenze, riferimenti o librerie da cui si dipende) invece di C# o codice gestito. Anche se il codice C# e gestito funziona normalmente correttamente, vi è un sovraccarico, come il caricamento del .NET CLR, che può essere evitato scrivendolo in C++/CX.
Crea e registra l'attività in background
È necessario creare un'attività in background nella tua app HCE per l'elaborazione e la risposta alle APDU indirizzate ad essa dal sistema. Durante la prima volta che l'app viene avviata, in primo piano registra un'attività in background HCE che implementa l'interfaccia IBackgroundTaskRegistration, come mostrato nel seguente codice.
var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = bgTaskName;
taskBuilder.TaskEntryPoint = taskEntryPoint;
taskBuilder.SetTrigger(new SmartCardTrigger(SmartCardTriggerType.EmulatorHostApplicationActivated));
bgTask = taskBuilder.Register();
Si noti che il trigger dell'attività è impostato su SmartCardTriggerType. EmulatorHostApplicationActivated. Ciò significa che ogni volta che viene ricevuto un COMANDO SELECT AID APDU dal sistema operativo che risolve l'app, verrà avviata l'attività in background.
Ricevere e rispondere alle APDU
Quando è presente un'APDU mirata alla tua app, il sistema avvierà il tuo compito in background. L'attività in background riceve l'APDU passata attraverso la proprietà SmartCardEmulatorApduReceivedEventArgsCommandApdu dell'oggetto e risponde all'APDU usando il metodo TryRespondAsync dello stesso oggetto. È consigliabile mantenere l'attività in background per le operazioni leggere per motivi di prestazioni. Ad esempio, rispondi immediatamente alle APDU ed esci dall'attività in background al termine di tutte le elaborazioni. A causa della natura delle transazioni NFC, gli utenti tendono a tenere il dispositivo contro il lettore solo per un periodo di tempo molto breve. L'attività in background continuerà a ricevere traffico dal lettore finché la connessione non viene disattivata, nel qual caso si riceverà un oggetto SmartCardEmulatorConnectionDeactivatedEventArgs. La tua connessione può essere disattivata a causa dei seguenti motivi, come indicato nella proprietà SmartCardEmulatorConnectionDeactivatedEventArgs.Reason.
- Se la connessione viene disattivata con il valore ConnectionLost, significa che l'utente ha allontanato il dispositivo dal lettore. Se l'app richiede che l'utente tocchi più a lungo il terminale, potresti voler considerare di invitarli a dare un feedback. Devi terminare rapidamente l'attività in background (completando il differimento) per assicurarti che, nel caso tocchino di nuovo, non vi siano ritardi in attesa della conclusione del compito in background precedente.
- Se la connessione viene disattivata con la ConnectionRedirected, significa che il terminale ha inviato un nuovo comando SELECT AID APDU indirizzato a un AID diverso. In questo caso, l'app deve uscire immediatamente dall'attività in background (completando il rinvio) per consentire l'esecuzione di un'altra attività in background.
L'attività in background deve anche registrarsi per l'evento Canceled nell'interfaccia IBackgroundTaskInstancee uscire rapidamente dall'attività in background (completando il differimento) perché questo evento viene generato dal sistema al termine dell'attività in background. Di seguito è riportato il codice che illustra un'attività in background dell'app HCE.
void BgTask::Run(
IBackgroundTaskInstance^ taskInstance)
{
m_triggerDetails = static_cast<SmartCardTriggerDetails^>(taskInstance->TriggerDetails);
if (m_triggerDetails == nullptr)
{
// May be not a smart card event that triggered us
return;
}
m_emulator = m_triggerDetails->Emulator;
m_taskInstance = taskInstance;
switch (m_triggerDetails->TriggerType)
{
case SmartCardTriggerType::EmulatorHostApplicationActivated:
HandleHceActivation();
break;
case SmartCardTriggerType::EmulatorAppletIdGroupRegistrationChanged:
HandleRegistrationChange();
break;
default:
break;
}
}
void BgTask::HandleHceActivation()
{
try
{
auto lock = m_srwLock.LockShared();
// Take a deferral to keep this background task alive even after this "Run" method returns
// You must complete this deferral immediately after you have done processing the current transaction
m_deferral = m_taskInstance->GetDeferral();
DebugLog(L"*** HCE Activation Background Task Started ***");
// Set up a handler for if the background task is cancelled, we must immediately complete our deferral
m_taskInstance->Canceled += ref new Windows::ApplicationModel::Background::BackgroundTaskCanceledEventHandler(
[this](
IBackgroundTaskInstance^ sender,
BackgroundTaskCancellationReason reason)
{
DebugLog(L"Cancelled");
DebugLog(reason.ToString()->Data());
EndTask();
});
if (Windows::Phone::System::SystemProtection::ScreenLocked)
{
auto denyIfLocked = Windows::Storage::ApplicationData::Current->RoamingSettings->Values->Lookup("DenyIfPhoneLocked");
if (denyIfLocked != nullptr && (bool)denyIfLocked == true)
{
// The phone is locked, and our current user setting is to deny transactions while locked so let the user know
// Denied
DoLaunch(Denied, L"Phone was locked at the time of tap");
// We still need to respond to APDUs in a timely manner, even though we will just return failure
m_fDenyTransactions = true;
}
}
else
{
m_fDenyTransactions = false;
}
m_emulator->ApduReceived += ref new TypedEventHandler<SmartCardEmulator^, SmartCardEmulatorApduReceivedEventArgs^>(
this, &BgTask::ApduReceived);
m_emulator->ConnectionDeactivated += ref new TypedEventHandler<SmartCardEmulator^, SmartCardEmulatorConnectionDeactivatedEventArgs^>(
[this](
SmartCardEmulator^ emulator,
SmartCardEmulatorConnectionDeactivatedEventArgs^ eventArgs)
{
DebugLog(L"Connection deactivated");
EndTask();
});
m_emulator->Start();
DebugLog(L"Emulator started");
}
catch (Exception^ e)
{
DebugLog(("Exception in Run: " + e->ToString())->Data());
EndTask();
}
}
Creare e registrare gruppi di AID
Durante il primo avvio dell'applicazione, quando viene effettuato il provisioning della scheda, creerai e registrerai gruppi di AID nel sistema. Il sistema determina l'app con cui un lettore esterno desidera comunicare e instrada di conseguenza le APDU in base agli ID applicativi registrati e alle impostazioni utente.
La maggior parte delle carte di pagamento si registra per lo stesso AID, il Proximity Payment System Environment (PPSE), insieme ad ulteriori AID specifici delle reti di pagamento. Ogni gruppo di AID rappresenta una scheda e quando l'utente abilita la scheda, tutti gli AID nel gruppo sono abilitati. Analogamente, quando l'utente disattiva la scheda, tutti gli AID nel gruppo vengono disabilitati.
Per registrare un gruppo di AID, è necessario creare un oggetto SmartCardAppletIdGroup e impostarne le proprietà per riflettere che si tratta di una carta di pagamento basata su HCE. Il nome visualizzato deve essere descrittivo per l'utente perché verrà visualizzato nel menu delle impostazioni NFC e nelle richieste degli utenti. Per le carte di pagamento HCE, la proprietà SmartCardEmulationCategory deve essere impostata su Pagamento e la proprietà SmartCardEmulationType deve essere impostata su Host.
public static byte[] AID_PPSE =
{
// File name "2PAY.SYS.DDF01" (14 bytes)
(byte)'2', (byte)'P', (byte)'A', (byte)'Y',
(byte)'.', (byte)'S', (byte)'Y', (byte)'S',
(byte)'.', (byte)'D', (byte)'D', (byte)'F', (byte)'0', (byte)'1'
};
var appletIdGroup = new SmartCardAppletIdGroup(
"Example DisplayName",
new List<IBuffer> {AID_PPSE.AsBuffer()},
SmartCardEmulationCategory.Payment,
SmartCardEmulationType.Host);
Per le carte HCE non di pagamento, la proprietà SmartCardEmulationCategory deve essere impostata su Other e la proprietà SmartCardEmulationType deve essere impostata su Host.
public static byte[] AID_OTHER =
{
(byte)'1', (byte)'2', (byte)'3', (byte)'4',
(byte)'5', (byte)'6', (byte)'7', (byte)'8',
(byte)'O', (byte)'T', (byte)'H', (byte)'E', (byte)'R'
};
var appletIdGroup = new SmartCardAppletIdGroup(
"Example DisplayName",
new List<IBuffer> {AID_OTHER.AsBuffer()},
SmartCardEmulationCategory.Other,
SmartCardEmulationType.Host);
È possibile includere fino a 9 AID (di lunghezza da 5 a 16 byte ciascuno) per ogni gruppo di AID.
Utilizzare il metodo RegisterAppletIdGroupAsync per registrare il gruppo AID nel sistema, che restituirà un oggetto SmartCardAppletIdGroupRegistration. Per impostazione predefinita, la proprietà di
reg = await SmartCardEmulator.RegisterAppletIdGroupAsync(appletIdGroup);
È possibile abilitare le schede registrate (gruppi di AID) usando il metodo RequestActivationPolicyChangeAsync della classeSmartCardAppletIdGroupRegistration, come illustrato di seguito. Poiché è possibile abilitare solo una singola carta di pagamento alla volta nel sistema, l'impostazione del ActivationPolicy di un gruppo AID di pagamento su Abilitato equivale a impostare la carta predefinita di pagamento. All'utente verrà richiesto di consentire questa carta come carta di pagamento predefinita, indipendentemente dal fatto che sia già selezionata o meno una carta di pagamento predefinita. Questa affermazione non è vera se l'app è già l'applicazione di pagamento predefinita e sta cambiando semplicemente tra i suoi gruppi AID. È possibile registrare fino a 10 gruppi di AID per ogni app.
reg.RequestActivationPolicyChangeAsync(AppletIdGroupActivationPolicy.Enabled);
È possibile interrogare i gruppi di AID registrati dell'app con l'OS e controllarne i criteri di attivazione usando il metodo GetAppletIdGroupRegistrationsAsync.
Agli utenti verrà notificato un avviso quando si modifica la politica di attivazione di una carta di pagamento da Disabilitato a Abilitato, solo se l'app in uso non è già l'app di pagamento predefinita. Agli utenti verrà richiesto solo quando si modificano i criteri di attivazione di una carta non di pagamento da Disabilitato a Abilitato in caso di conflitto di AID.
var registrations = await SmartCardEmulator.GetAppletIdGroupRegistrationsAsync();
foreach (var registration in registrations)
{
registration.RequestActivationPolicyChangeAsync (AppletIdGroupActivationPolicy.Enabled);
}
Notifica degli eventi quando cambiano i criteri di attivazione
Nell'attività in background puoi registrarti per ricevere eventi quando i criteri di attivazione di una delle registrazioni del gruppo AID cambiano all'esterno dell'app. Ad esempio, l'utente può modificare l'app di pagamento predefinita tramite il menu delle impostazioni NFC da una delle tue carte a un'altra carta ospitata da un'altra app. Se l'app deve conoscere questa modifica per la configurazione interna, ad esempio l'aggiornamento dei riquadri animati, puoi ricevere notifiche degli eventi per questa modifica e intervenire di conseguenza nell'app.
var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = bgTaskName;
taskBuilder.TaskEntryPoint = taskEntryPoint;
taskBuilder.SetTrigger(new SmartCardTrigger(SmartCardTriggerType.EmulatorAppletIdGroupRegistrationChanged));
bgTask = taskBuilder.Register();
Comportamento di sovrascrittura in primo piano
È possibile modificare l' dell'
reg.RequestActivationPolicyChangeAsync(AppletIdGroupActivationPolicy.ForegroundOverride);
Inoltre, è possibile registrare un gruppo di AID costituito da un singolo AID di lunghezza 0 che farà in modo che il sistema instrada tutti gli APDU indipendentemente dall'AID e includendo qualsiasi comando APDU inviato prima che venga ricevuto un comando SELECT AID. Tuttavia, tale gruppo di AID funziona solo mentre l'app è in primo piano perché può essere impostata solo su ForegroundOverride e non può essere abilitata in modo permanente. Inoltre, questo meccanismo funziona sia per i valori della Host che per i valori della UICC nell'enumerazione SmartCardEmulationType al fine di instradare tutto il traffico all'attività in background HCE o alla scheda SIM.
public static byte[] AID_Foreground =
{};
var appletIdGroup = new SmartCardAppletIdGroup(
"Example DisplayName",
new List<IBuffer> {AID_Foreground.AsBuffer()},
SmartCardEmulationCategory.Other,
SmartCardEmulationType.Host);
reg = await SmartCardEmulator.RegisterAppletIdGroupAsync(appletIdGroup);
reg.RequestActivationPolicyChangeAsync(AppletIdGroupActivationPolicy.ForegroundOverride);
Verificare la disponibilità del supporto NFC e HCE
L'app deve verificare se un dispositivo dispone di hardware NFC, supporta la funzionalità di emulazione delle carte e supporta l'emulazione delle schede host prima di offrire tali funzionalità all'utente.
La funzionalità di emulazione di smart card NFC è abilitata solo in Windows 10 Mobile, quindi il tentativo di usare le API dell'emulatore di smart card in qualsiasi altra versione di Windows 10 causerà errori. È possibile verificare il supporto dell'API smart card nel frammento di codice seguente.
Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Devices.SmartCards.SmartCardEmulator");
È anche possibile verificare se il dispositivo dispone di hardware NFC in grado di eseguire un'emulazione di carte controllando se il metodo SmartCardEmulator.GetDefaultAsync restituisce null. In caso affermativo, nel dispositivo non è supportata alcuna emulazione di carte NFC.
var smartcardemulator = await SmartCardEmulator.GetDefaultAsync();<
Il supporto per il routing UICC basato su HCE e AID è disponibile solo su dispositivi avviati di recente, ad esempio Lumia 730, 830, 640 e 640 XL. Tutti i nuovi dispositivi con supporto NFC che eseguono Windows 10 Mobile e dopo devono supportare HCE. L'app può verificare la disponibilità del supporto HCE come indicato di seguito.
Smartcardemulator.IsHostCardEmulationSupported();
Comportamento di blocco della schermata e dello schermo disattivato
Windows 10 Mobile include impostazioni di emulazione delle schede a livello di dispositivo, che possono essere impostate dall'operatore di telefonia mobile o dal produttore del dispositivo. Per impostazione predefinita, l'interruttore "tocca per pagare" è disabilitato e il "criterio di abilitazione a livello di dispositivo" è impostato su "Sempre", a meno che il mo o l'OEM non sovrascriva questi valori.
L'applicazione può interrogare il valore della EnablementPolicy a livello di dispositivo e agire per ogni caso a seconda del comportamento desiderato dell'app in ogni stato.
SmartCardEmulator emulator = await SmartCardEmulator.GetDefaultAsync();
switch (emulator.EnablementPolicy)
{
case Never:
// you can take the user to the NFC settings to turn "tap and pay" on
await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-nfctransactions:"));
break;
case Always:
return "Card emulation always on";
case ScreenOn:
return "Card emulation on only when screen is on";
case ScreenUnlocked:
return "Card emulation on only when screen unlocked";
}
L'attività in background della tua app verrà avviata anche se il telefono è bloccato e/o lo schermo è disattivato solo se il lettore esterno seleziona un AID che si risolve nella tua app. È possibile rispondere ai comandi del lettore nell'attività in background, ma se è necessario un input dall'utente o se si vuole visualizzare un messaggio all'utente, è possibile avviare la tua app in primo piano con certi parametri. L'attività in background può avviare l'app in primo piano con il comportamento seguente.
- Nella schermata di blocco del dispositivo (l'utente visualizzerà l'app in primo piano solo dopo aver sbloccato il dispositivo)
- Sopra la schermata di blocco del dispositivo (dopo che l'utente chiude l'app, il dispositivo è ancora bloccato)
if (Windows::Phone::System::SystemProtection::ScreenLocked)
{
// Launch above the lock with some arguments
var result = await eventDetails.TryLaunchSelfAsync("app-specific arguments", SmartCardLaunchBehavior.AboveLock);
}
Registrazione AID e altri aggiornamenti per le app basate su SIM.
Le app di emulazione delle carte che usano la SIM come elemento sicuro possono registrarsi con il servizio Windows per dichiarare gli ID di intelligenza artificiale supportati nella SIM. Questa registrazione è molto simile a una registrazione di un'applicazione basata su HCE. L'unica differenza è la SmartCardEmulationType, che deve essere impostata su Uicc per le app basate su SIM. Come risultato della registrazione della carta di pagamento, anche il nome visualizzato della carta apparirà nel menu delle impostazioni NFC.
var appletIdGroup = new SmartCardAppletIdGroup(
"Example DisplayName",
new List<IBuffer> {AID_PPSE.AsBuffer()},
SmartCardEmulationCategory.Payment,
SmartCardEmulationType.Uicc);