Partilhar via


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:

Página de Nova ID do Aplicativo do Portal do Desenvolvedor com a Leitura de Tags NFC selecionada

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 do INFCNdefReaderSessionDelegate. No código de exemplo, o delegado é implementado no controlador de exibição de tabela, portanto this , é usado como o parâmetro delegado.
  • queue – A fila em que os retornos de chamada são manipulados. Pode ser null, nesse caso, certifique-se de usar o ao atualizar os controles da interface do DispatchQueue.MainQueue usuário (conforme mostrado no exemplo).
  • invalidateAfterFirstRead – Quando true, a varredura pára após a primeira varredura bem-sucedida, quando false 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:

Botão Cancelar durante a digitalização

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.