Permissões e descoberta do iOS

A partir do iOS 14, o sistema operacional aplicará novas restrições e permissões que afetam a experiência do usuário do Google Cast. Isso também afetará a forma como você cria o SDK do Cast no seu app. Para que o app mantenha a funcionalidade do Cast com as versões mais recentes do iOS, faça atualizações para processar essas alterações de permissões.

iOS 14

Os desenvolvedores precisam atualizar os apps de transmissão do iOS do Google Cast para o SDK do Google Cast v4.6.0 ou mais recente. Estas versões são compatíveis com o iOS 14 e os requisitos dele.

A partir do iOS 14, os aplicativos que verificam dispositivos na rede local agora vão solicitar que os usuários com uma caixa de diálogo de permissões única encontrem e se conectem a dispositivos de rede local. A plataforma de transmissão usa a rede local para descobrir e controlar dispositivos de transmissão. Assim, se o usuário negar a permissão, não será possível transmitir.

Para melhorar a experiência do usuário, estamos fazendo algumas modificações na UX no SDK para apps que usam o seletor de dispositivo padrão. Essas modificações de UX tornam mais óbvio para os usuários por que as permissões de acesso à rede local são necessárias e como ativar a transmissão se o acesso ao dispositivo de rede local tiver sido desativado.

Os apps criados com versões do SDK do Cast usando a versão 4.4.8 ou anteriores continuarão funcionando, desde que sejam criados com o Xcode 11.7 ou versões anteriores. Se você estiver criando para o iOS 14 com Xcode 12 ou mais recente, recomendamos atualizar para o SDK do Cast v4.6.0 ou mais recente para garantir que seu app continue funcionando corretamente.

Para fazer o download do SDK do Cast para iOS v4.6.0 ou mais recente com o CocoaPods, siga a configuração do CocoaPods ou manualmente seguindo a configuração manual. Esta versão inclui mudanças no mecanismo de descoberta subjacente para permitir que apps criados com o Xcode 12 encontrem dispositivos de transmissão na rede. Agora, o botão Transmitir sempre será exibido. Se nenhum dispositivo estiver disponível quando o usuário tocar no botão Transmitir, uma caixa de diálogo vai aparecer, fornecendo orientações sobre por que os dispositivos podem não estar disponíveis, incluindo informações sobre como reativar a permissão de acesso à rede local.

Alterações no SDK do Cast

Primeira transmissão

Na primeira vez que um usuário tentar fazer a transmissão, uma caixa de diálogo intersticial de acesso à rede local (LNA, na sigla em inglês) será exibida explicando por que o acesso à rede local é necessário, seguido pela solicitação de permissões de acesso à rede local no iOS fornecida pela Apple. Os modelos abaixo ilustram o fluxo:

Fluxo de permissões de acesso à rede local

Transmissão indisponível

A partir do SDK de remetente do iOS 4.6.0, o botão Transmitir sempre aparece quando o usuário está conectado ao Wi-Fi. Quando os dispositivos de transmissão não estão disponíveis, toque no botão "Transmitir" abre uma caixa de diálogo com dicas ao usuário sobre os possíveis motivos da indisponibilidade, conforme mostrado nos exemplos abaixo:

Fluxo com transmissão indisponível

Como atualizar seu app no iOS 14

  1. Adicionar o SDK do Cast para iOS 4.8.1 ao seu projeto

    Se estiver usando CocoaPods, use pod update para adicionar o SDK 4.8.1 ao seu projeto.

    Caso contrário, extraia o SDK manualmente.

  2. Adicionar NSBonjourServices ao Info.plist

    Especifique NSBonjourServices em Info.plist para permitir que a descoberta de rede local seja bem-sucedida no iOS 14.

    Você precisará adicionar _googlecast._tcp e _<your-app-id>._googlecast._tcp como serviços para que a descoberta de dispositivos funcione corretamente.

    O appID é seu receiverID, que é o mesmo ID definido no GCKDiscoveryCriteria.

    Atualize o exemplo de definição de NSBonjourServices a seguir e substitua "ABCD1234" pelo seu appID.

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. Adicione NSLocalNetworkUsageDescription ao seu Info.plist

    Recomendamos que você personalize a mensagem mostrada na solicitação da rede local adicionando uma string de permissão específica ao app no arquivo Info.plist para o NSLocalNetworkUsageDescription. Por exemplo, para descrever a descoberta do Cast e outros serviços de descoberta, como DIAL.

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} usa a rede local para descobrir dispositivos compatíveis com Cast na sua rede
    Wi-Fi.</string>

    Essa mensagem vai aparecer como parte da caixa de diálogo do "Acesso à rede local do iOS", conforme mostrado na simulação.

    Imagem da caixa de diálogo &quot;Transmitir permissões de acesso à rede local&quot;
  4. Lançar o app novamente na App Store da Apple

    Recomendamos também relançar seu app usando a versão 4.8.1 assim que possível.

Personalizações

Início da descoberta de dispositivos de transmissão

Por padrão, a descoberta de dispositivos de transmissão é iniciada na primeira vez que o usuário toca no botão "Transmitir" (GCKUICastButton). Se essa for a primeira vez que o usuário tenta usar o app na rede local após fazer upgrade para o iOS 14, o novo LNA intersticial será exibido, seguido pela caixa de diálogo de permissões de acesso à rede local do iOS.

Uma nova flag está disponível para permitir que você controle quando a descoberta do dispositivo começa e o comportamento de determinados elementos da UX:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

O valor padrão é true. Essa sinalização só é aplicável quando GCKCastOptions::disableDiscoveryAutostart está definida como false.

Se definido como true, a descoberta de dispositivos de transmissão vai começar quando o usuário tocar no GCKUICastButton pela primeira vez. Uma mensagem informativa será mostrada ao usuário informando por que a permissão de rede local é necessária. Após essa mensagem, a mensagem da LNA do iOS 14 vai aparecer. A descoberta do dispositivo de transmissão começa após a confirmação da mensagem.

Em inicializações de apps subsequentes, GCKUICastButton sempre será exibido.

Se definido como false, a descoberta de dispositivos será iniciada com base no valor da flag GCKCastOptions::disableDiscoveryAutostart.

Perguntas frequentes

O que acontecerá se eu lançar novamente meu app de remetente do Google Cast com o SDK do Cast v4.4.8 e o Xcode 12?

Talvez o app não consiga descobrir dispositivos de transmissão na rede local, a menos que você tenha recebido da Apple um direito de multicast de rede. A Apple não concederá direitos de multicast apenas para fins de suporte ao Cast. Se você planeja criar com o Xcode 12, lance o app com o Cast 4.6.0.

Se eu lançar novamente meu app com o novo SDK do Cast, qual será a experiência dos meus usuários no iOS 13 ou anterior?

Eles continuarão tendo a mesma experiência do usuário que tinham antes da nova versão do app. As mudanças visíveis aos usuários são limitadas aos usuários do iOS 14.

O que preciso fazer para atualizar meu app quando a nova versão do SDK do Cast for lançada?

  • Atualize a Info.plist do app para incluir uma descrição do uso da rede local.
  • Adicione NSBonjourServices ao Info.plist do seu app e forneça os nomes de serviço Bonjour para o Cast e o ID do app.
  • Faça upgrade do app de remetente para usar o SDK do Cast 4.6.0.
  • Publique o aplicativo novamente na Apple App Store.

Por que os dispositivos pararam de aparecer no meu seletor personalizado de dispositivos depois do upgrade para a versão 4.6.0?

Esse é um problema conhecido que pode acontecer ao usar um seletor de dispositivo personalizado em vez do seletor de dispositivo padrão. Na versão 4.4.8 do SDK do Cast e em versões anteriores, a verificação de dispositivos era automática. A partir da versão 4.6.0, será necessário chamar explicitamente o método startDiscovery na classe GCKDiscoveryManager para iniciar a descoberta de dispositivos.

O motivo dessa mudança é porque a solicitação de permissões de acesso à rede local (LNA, na sigla em inglês) vai aparecer depois que o app for verificado pela primeira vez. Isso pode fazer com que caixas de diálogo de permissões apareçam em lugares aleatórios no app.

Os desenvolvedores que criarem um seletor de dispositivo personalizado para o app precisarão fornecer um intersticial único antes de iniciar a verificação do dispositivo pela primeira vez no iOS 14.

iOS 13

Com o iOS 13, foram introduzidos novos requisitos de permissões que afetam os apps que usam o SDK do Google Cast.

A partir do SDK do Google Cast v4.4.3, há um SDK adicional disponível que não exige permissão para Bluetooth®. Isso está disponível no site para desenvolvedores e nos novos Cocoapods google-cast-sdk-no-bluetooth.

Detalhamento do app

Veja a seguir um detalhamento dependendo da versão do SDK para iOS que você está usando atualmente:

Apps criados com o SDK do iOS 12 ou anterior

  • Ação recomendada. O desempenho da descoberta de dispositivos pode diminuir quando executado no iOS 13, mas ainda funcionará. Recomendamos que os desenvolvedores façam upgrade para o SDK do Cast v4.4.4 quando disponível.
  • O iOS 13 solicitará que os usuários concedam permissões de Bluetooth® ao app.

Apps criados com o SDK do iOS 13

  • Ação necessária: atualize para o SDK do Cast 4.4.4 ou talvez o botão Transmitir não apareça se o usuário não conceder permissão de localização. É necessário fazer upgrade para o SDK do Cast 4.4.4 para garantir uma experiência de transmissão confiável no iOS 13.