Ir para o conteúdo
Idioma: PT

Como ler várias tags numa mesma sessão do iOS?

Mantenha a sessão viva e deixe-a voltar a sondar depois de cada tag. Uma sessão NDEF criada com invalidateAfterFirstRead em false lê tag depois de tag até expirar ou ser cancelada; com objetos de tag, o aplicativo chama restartPolling depois de cada uma. As tags detectadas antes de uma volta ficam inválidas, e o aplicativo deve descartá-las.

Ler mensagens em sequência

Uma sessão NDEF criada com invalidateAfterFirstRead em false lê várias tags. A documentação da Apple sobre o inicializador diz que cada leitura bem-sucedida chega ao delegado por readerSession(_:didDetectNDEFs:), até a sessão expirar ou ser cancelada pelo aplicativo ou pelo usuário.

Esse método do delegado não precisa de ajuda para continuar. A referência dele diz que a sessão volta a sondar assim que as tags detectadas saem do alcance, então ler uma sequência não exige nada além do delegado.

A sequência mesmo assim termina com a sessão. Uma expiração a invalida com readerSessionInvalidationErrorSessionTimeout, e a documentação não dá duração alguma, então um aplicativo que lê uma sequência longa deve esperar iniciar uma sessão nova.

Voltar a sondar com objetos de tag

Um delegado que implementa readerSession(_:didDetect:) recebe objetos de tag em vez disso, e pede ele mesmo a tag seguinte com restartPolling(). Uma sessão de tag funciona do mesmo jeito.

Uma volta tem um custo. A observação da Apple sobre restartPolling() diz que as tags detectadas antes dela ficam inválidas e que o aplicativo deve descartar as referências a elas, e que a chamada não tem efeito numa sessão já invalidada.

Numa sessão NDEF cujo delegado não tem readerSession(_:didDetect:), a chamada não serve de nada: a sessão informa mensagens e volta a sondar sozinha. A partir do iOS 26.4, uma sessão de tag consegue voltar com uma Configuration nova, mudando as opções de sondagem ou os identificadores dela entre duas tags.

Duas tags de uma vez

Uma sessão consegue ver mais de uma tag na mesma passagem. O exemplo de leitor de tags da Apple trata disso antes de gravar: ele conta as tags, pede ao usuário que tire todas elas, e volta a sondar depois de meio segundo.

A mesma regra convém à leitura. Duas tags no campo durante uma sequência em geral quer dizer duas tags empilhadas ou instaladas perto demais uma da outra, o que a página do espaçamento cobre.

Dizer ao usuário o que aconteceu

alertMessage é onde o usuário olha durante uma leitura. A documentação dela diz que uma sessão que lê várias tags consegue atualizá-la depois de cada uma, de qualquer thread, enquanto a sessão continuar válida.

Use-a para contar, tag três de dez lida, a próxima. Uma sequência sem retorno entre as tags deixa o usuário adivinhando se o último toque contou.

Perguntas frequentes

Por que a minha sessão para depois da primeira tag?

invalidateAfterFirstRead está em true. Crie a sessão com false para continuar lendo.

Tenho de chamar restartPolling depois de cada tag?

Só quando o delegado recebe objetos de tag por readerSession(_:didDetect:). Com mensagens apenas, a sessão volta a sondar sozinha assim que as tags saem do alcance.

Quanto tempo dura uma sessão?

A Apple documenta um erro de expiração mas nenhuma duração. Espere a sessão terminar, e inicie uma nova para uma sequência longa.

Dá para continuar usando um objeto de tag depois de voltar a sondar?

Não. As tags detectadas antes de uma volta ficam inválidas, e a Apple pede aos aplicativos que descartem as referências a elas.