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, é necessário fazer atualizações para lidar com essas mudanças nas permissões.

iOS 14

Os desenvolvedores precisam atualizar os apps de transmissão do iOS para o SDK do Google Cast v4.6.0 ou mais recente. Essas 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 vão solicitar que os usuários, com uma caixa de diálogo de permissões únicas, encontrem e se conectem a dispositivos da rede local. A plataforma do Google Cast usa a rede local para descobrir e controlar dispositivos de transmissão. Portanto, se o usuário negar a permissão, ele não poderá transmitir.

Para melhorar a experiência do usuário, estamos fazendo algumas modificações de UX no SDK para os apps que usam o seletor de dispositivos padrão. Essas modificações na UX tornam mais claro 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 estiver desativado.

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

É possível fazer o download do SDK do Cast para iOS v4.6.0 ou mais recente com o CocoaPods seguindo a configuração do CocoaPods ou manualmente, seguindo a configuração manual. Essa versão inclui mudanças no mecanismo de descoberta para permitir que apps criados com o Xcode 12 encontrem dispositivos de transmissão na rede. O botão Transmitir agora sempre será exibido. Se nenhum dispositivo estiver disponível quando o usuário tocar no botão Transmitir, uma caixa de diálogo será mostrada com 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.

Mudanças no SDK do Cast

Primeira transmissão

Na primeira vez que um usuário tentar transmitir, 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, seguida pela solicitação de permissões de acesso à rede local do 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 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, tocar no botão Transmitir abre uma caixa de diálogo que dá ao usuário dicas sobre os possíveis motivos da indisponibilidade da transmissão, conforme mostrado nas simulações 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 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. Adicione NSBonjourServices ao seu Info.plist

    Especifique NSBonjourServices no Info.plist para que a descoberta de rede local funcione no iOS 14.

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

    O appID é o 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 a Info.plist

    Recomendamos que você personalize a mensagem mostrada na solicitação da rede local adicionando uma string de permissão específica do app ao arquivo Info.plist do NSLocalNetworkUsageDescription, por exemplo, para descrever a descoberta de 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 "Acesso à rede local" do iOS, como mostrado na simulação.

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

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

Personalizações

Início da descoberta do dispositivo de transmissão

Por padrão, a descoberta do dispositivo de transmissão é iniciada na primeira vez que o usuário toca no botão Transmitir (GCKUICastButton). Se esta for a primeira vez que o usuário tenta usar o app Cast na rede local após fazer upgrade para o iOS 14, o novo intersticial de LNA vai aparecer, 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 é iniciada 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 definida como true, a descoberta do dispositivo de transmissão começará quando um usuário tocar no GCKUICastButton pela primeira vez. Uma mensagem informativa será exibida ao usuário informando por que a permissão de rede local é necessária. Depois dessa mensagem, a mensagem LNA do iOS 14 será exibida. A descoberta do dispositivo de transmissão começa depois que a mensagem é confirmada.

Nas inicializações de app subsequentes, GCKUICastButton sempre é mostrado.

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

Perguntas frequentes

O que acontece se eu lançar novamente meu app de transmissão do Cast com o SDK do Cast v4.4.8 e o Xcode 12?

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

Se eu lançar meu app novamente com o novo SDK do Cast, o que meus usuários vão encontrar no iOS 13 ou experiência anterior?

Eles ainda terão a mesma experiência do usuário que tinham antes do relançamento do app. As mudanças visíveis ao usuário são limitadas aos usuários do iOS 14.

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

  • Atualize o 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ços do Bonjour para o Cast e o ID do app.
  • Faça upgrade do app remetente para usar o SDK do Cast 4.6.0.
  • Lance o app novamente na App Store da Apple.

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

Esse é um problema conhecido que pode acontecer se você estiver usando um seletor de dispositivo personalizado em vez do seletor de dispositivo padrão. Na versão 4.4.8 do SDK do Cast e 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 é que a solicitação de permissões de acesso à rede local (LNA, na sigla em inglês) será exibida depois que o app fizer a verificação 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 dispositivos 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ão que afetam os apps que usam o SDK do Google Cast.

A partir do SDK do Google Cast v4.4.3, está disponível outro SDK que não requer permissão do Bluetooth®. Isso está disponível no site para desenvolvedores e no novo Cocoapods google-cast-sdk-no-bluetooth.

Detalhamento do app

Veja um detalhamento, dependendo da versão do SDK para iOS que você está usando no momento:

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 será funcional. É altamente recomendável fazer upgrade para o SDK do Cast v4.4.4 quando disponível.
  • O iOS 13 solicitará que os usuários concedam permissões do Bluetooth® ao app.

Apps criados com o SDK do iOS 13

  • Ação necessária: a atualização para o SDK do Cast 4.4.4 ou o botão Transmitir pode não aparecer 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.