NFC principal no Xamarin.iOS
Leitura de tags NFC (Near Field Communication) usando o iOS 11
CoreNFC é uma nova estrutura no iOS 11 que fornece acesso ao rádio Near Field Communication (NFC) para ler tags de dentro de aplicativos. O CoreNFC funciona nos modelos iPhone 7, iPhone 7 Plus, iPhone 8, iPhone 8 Plus, iPhone X, iPhone XS e iPhone 11 (enquanto os modelos iPhone 6 e iPhone 6 Plus têm funcionalidade de pagamento NFC, eles não suportam CoreNFC).
O leitor de tags NFC em dispositivos iOS oferece suporte a todos os tipos de tags NFC de 1 a 5 que contêm informações de NDEF (NFC Data Exchange Format ).
Existem algumas limitações a serem consideradas, como:
- O CoreNFC suporta apenas leitura de tags (não gravação ou formatação).
- As varreduras de tags devem ser iniciadas pelo usuário e atingir o tempo limite após 60 segundos.
- Os aplicativos devem estar visíveis em primeiro plano para digitalização.
- O CoreNFC só pode ser testado em dispositivos reais (não no simulador).
Esta página descreve a configuração necessária para usar o CoreNFC e mostra como usar a API.
Configuração
Para habilitar o CoreNFC, você deve configurar três itens em seu projeto:
- Uma chave de privacidade Info.plist .
- Uma entrada Entitlements.plist .
- Um perfil de provisionamento com recurso de leitura de tags NFC.
Info.plist
Adicione a chave de privacidade e o texto NFCReaderUsageDescription, que são exibidos ao usuário durante a verificação. Use uma mensagem apropriada para seu aplicativo (por exemplo, explique a finalidade da verificação):
<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>
Entitlements.plist
Seu aplicativo deve solicitar o recurso Near Field Communications Tag Reading usando o seguinte par chave/valor em seu Entitlements.plist:
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
Perfil de provisionamento
Crie uma nova ID de aplicativo e verifique se o serviço de leitura de tags NFC está marcado:
Em seguida, você deve criar um novo perfil de provisionamento para essa ID do aplicativo e, em seguida, baixá-lo e instalá-lo em seu Mac de desenvolvimento.
Lendo uma tag
Depois que seu projeto estiver configurado, adicione using CoreNFC;
à parte superior do arquivo e siga estas três etapas para implementar a funcionalidade de leitura de tags NFC:
1. Implementar INFCNdefReaderSessionDelegate
A interface tem dois métodos a serem implementados:
DidDetect
– Chamado quando uma tag é lida com sucesso.DidInvalidate
– Chamado quando ocorre um erro ou o tempo limite de 60 segundos é atingido.
DidDetect
No código de exemplo, cada mensagem digitalizada é adicionada a um modo de exibição de tabela:
public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
foreach (NFCNdefMessage msg in messages)
{ // adds the messages to a list view
DetectedMessages.Add(msg);
}
DispatchQueue.MainQueue.DispatchAsync(() =>
{
this.TableView.ReloadData();
});
}
Esse método pode ser chamado várias vezes (e uma matriz de mensagens pode ser passada) se a sessão permitir várias leituras de tag. Isso é definido usando o terceiro parâmetro do Start
método (explicado na etapa 2).
DidInvalidate
A invalidação pode ocorrer por vários motivos:
- Ocorreu um erro durante a varredura.
- O aplicativo deixou de estar em primeiro plano.
- O usuário optou por cancelar a varredura.
- A varredura foi cancelada pelo aplicativo.
O código abaixo mostra como lidar com um erro:
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
// some error handling
}
}
Depois que uma sessão for invalidada, um novo objeto de sessão deverá ser criado para verificar novamente.
2. Inicie um NFCNdefReaderSession
A varredura deve começar com uma solicitação do usuário, como pressionar um botão. O código a seguir cria e inicia uma sessão de varredura:
Session = new NFCNdefReaderSession(this, null, true);
Session?.BeginSession();
Os parâmetros para o construtor são os NFCNdefReaderSession
seguintes:
delegate
– Uma implementação doINFCNdefReaderSessionDelegate
. No código de exemplo, o delegado é implementado no controlador de exibição de tabela, portantothis
, é usado como o parâmetro delegado.queue
– A fila em que os retornos de chamada são manipulados. Pode sernull
, nesse caso, certifique-se de usar o ao atualizar os controles da interface doDispatchQueue.MainQueue
usuário (conforme mostrado no exemplo).invalidateAfterFirstRead
– Quandotrue
, a varredura pára após a primeira varredura bem-sucedida, quandofalse
a varredura continuará e vários resultados retornarão até que a varredura seja cancelada ou o tempo limite de 60 segundos seja atingido.
3. Cancele a sessão de digitalização
O usuário pode cancelar a sessão de digitalização através de um botão fornecido pelo sistema na interface do usuário:
O aplicativo pode cancelar programaticamente a verificação chamando o InvalidateSession
método:
Session.InvalidateSession();
Em ambos os casos, o método do DidInvalidate
delegado será chamado.
Resumo
O CoreNFC permite que seu aplicativo leia dados de tags NFC. Ele oferece suporte à leitura de uma variedade de formatos de tag (tipos NDEF 1 a 5), mas não oferece suporte à gravação ou formatação.