Ir para o conteúdo
Idioma: PT

Como um aplicativo iOS recebe uma tag lida em segundo plano?

Por um link universal. Nos iPhones que a suportam, o sistema lê a tag, pega o primeiro registro URI e mostra um aviso. Quando o usuário toca nele, o aplicativo que reivindica o link abre e recebe a mensagem NDEF inteira num NSUserActivity. Esquemas de URL próprios não funcionam, e sem o aplicativo o link abre no Safari.

O que o sistema faz

O artigo sobre a leitura em segundo plano da Apple descreve a sequência. O sistema lê a tag sem nenhum aplicativo aberto, mostra um aviso para cada tag nova, e entrega os dados só depois que o usuário toca nele; num iPhone bloqueado, ele pede antes que o usuário desbloqueie.

Ele procura uma coisa só na mensagem: um registro URI, do tipo bem conhecido U. Quando a mensagem guarda vários, o sistema usa o primeiro, e esse registro tem de conter ou um link universal ou um dos esquemas de URL que ele suporta.

A Apple afirma que o iPhone XS e os modelos posteriores suportam a leitura de tags em segundo plano. Nos modelos mais antigos o aplicativo tem de oferecer a leitura de dentro dele, o que o artigo recomenda em todos os casos.

O artigo é explícito: a leitura em segundo plano não suporta esquemas de URL próprios, e os aplicativos devem usar links universais em vez disso. Os esquemas que ela trata pertencem ao sistema: links da web, e-mail, SMS, telefone, FaceTime, Mapas e configuração de acessório HomeKit.

Então a tag carrega um endereço https num domínio que o aplicativo reivindica. O aplicativo liga os Associated Domains e lista esse domínio, o que acrescenta a autorização de domínios associados ao projeto e ao App ID.

Quando nenhum aplicativo instalado reivindica o link, o sistema o abre no Safari. É essa a reserva que a página da abertura de aplicativo recomenda projetar: uma página que faça sentido sem o aplicativo.

O que o aplicativo recebe

O sistema abre o aplicativo, ou o traz para primeiro plano, e chama application(_:continue:restorationHandler:) com um NSUserActivity do tipo NSUserActivityTypeBrowsingWeb. A mensagem lida da tag está na propriedade ndefMessagePayload dele.

Confira que a atividade veio de uma tag. Para as atividades que não foram produzidas pela leitura em segundo plano, o artigo diz que a carga útil guarda um único registro do tipo vazio, então um aplicativo que também abre os links universais dele de outro lugar consegue distinguir os dois.

A mensagem inteira chega, e não só o link. Os outros registros da tag, um texto ou uma carga útil MIME depois do URI, ficam disponíveis para o aplicativo assim que ele abre.

Quando isso não acontece

A leitura em segundo plano roda só enquanto o iPhone está em uso, e o artigo lista os momentos em que ela não está disponível mesmo com a tela ligada: antes do primeiro desbloqueio, durante uma sessão de leitura do Core NFC, enquanto a carteira do Apple Pay está em uso, enquanto a câmera está em uso, e no modo avião.

Um aplicativo que lê com a própria sessão portanto bloqueia a leitura em segundo plano enquanto a sessão durar. O lado do usuário dessas condições está na página da leitura em segundo plano.

Perguntas frequentes

Um esquema de URL próprio consegue abrir o meu aplicativo a partir de uma tag?

Não pela leitura em segundo plano, que a documentação da Apple diz não suportar esquemas de URL próprios. Use um link universal num domínio que o aplicativo reivindica.

O aplicativo abre sem o usuário tocar em nada?

Não. O sistema mostra um aviso para cada tag nova e entrega os dados só depois que o usuário toca nele, pedindo antes um desbloqueio quando o celular está bloqueado.

Qual registro o sistema usa?

O primeiro registro URI da mensagem, do tipo bem conhecido U. A mensagem inteira é entregue depois ao aplicativo na atividade do usuário.

E se o aplicativo não estiver instalado?

O sistema abre o link no Safari, então o endereço deveria levar a uma página que faça sentido sem o aplicativo.