Permissões e descoberta do iOS

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

iOS 14

Os desenvolvedores precisam atualizar os apps de envio do Google Cast para iOS para o SDK v4.6.0 ou mais recente. Essas versões oferecem suporte ao iOS 14 e aos requisitos dele.

A partir do iOS 14, os aplicativos que procuram dispositivos na rede local vão mostrar uma caixa de diálogo de permissões únicas para encontrar e se conectar a dispositivos de rede local. A plataforma Cast usa a rede local para descobrir e controlar dispositivos Cast. 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 apps que usam o seletor de dispositivos 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, bem como 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 v4.4.8 ou anterior vão continuar funcionando se forem criados com o Xcode 11.7 ou anterior. Se você estiver criando para o iOS 14 com o Xcode 12 ou mais recente, recomendamos atualizar para o SDK do Cast v4.6.0 ou mais recente para garantir que seu app do Cast continue funcionando corretamente.

O SDK do Cast para iOS v4.6.0 ou mais recente pode ser baixado com o CocoaPods seguindo a configuração do CocoaPods ou manualmente seguindo a configuração manual. Esta versão inclui mudanças no mecanismo de descoberta para permitir que apps criados com o Xcode 12 encontrem dispositivos Cast na rede. O botão "Transmitir" agora vai aparecer sempre. Se nenhum dispositivo estiver disponível quando o usuário tocar no botão Transmitir, uma caixa de diálogo vai aparecer com orientações sobre por que os dispositivos não estão 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 de acesso à rede local (LNA, na sigla em inglês) vai aparecer explicando por que o acesso à rede local é necessário, seguido pelo comando de permissão de acesso à rede local do iOS fornecido pela Apple. Os modelos abaixo ilustram o fluxo:

Fluxo de permissões de acesso à rede local

Transmissão indisponível

A partir do SDK do remetente do iOS 4.6.0, o botão "Transmitir" aparece sempre que o usuário está conectado ao Wi-Fi. Quando os dispositivos de transmissão não estão disponíveis, tocar no botão de transmissão mostra uma caixa de diálogo que dá ao usuário dicas sobre os possíveis motivos para a transmissão não estar disponível, como mostrado nos modelos abaixo:

Fluxo com o Google Cast indisponível

Como atualizar seu app no iOS 14

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

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

    Caso contrário, insira o SDK manualmente.

  2. Adicionar NSBonjourServices ao Info.plist

    Especifique NSBonjourServices no Info.plist para permitir que a descoberta de rede local seja bem-sucedida 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 ID do receptor, que é o mesmo ID definido em GCKDiscoveryCriteria.

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

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

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

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi
    network.</string>

    Essa mensagem vai aparecer como parte da caixa de diálogo de acesso à rede local do iOS, conforme mostrado no modelo.

    Imagem da caixa de diálogo de permissões de acesso à rede local do Google Cast
  4. Lançar o app novamente na App Store da Apple

    Recomendamos que você também lance o app novamente usando a versão 4.8.3 o mais rápido possível.

Personalizações

Iniciação da descoberta de dispositivos com o Google Cast

Por padrão, a descoberta de dispositivos do Google Cast é iniciada na primeira vez que o usuário toca no botão do Google Cast (GCKUICastButton). Se essa for a primeira vez que o usuário tentar usar o app do Google Cast na rede local após o upgrade para o iOS 14, o novo intersticial do 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 de dispositivos começa e o comportamento de determinados elementos da UX:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

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

Se definido como true, a descoberta de dispositivos com Cast será iniciada quando um usuário tocar no GCKUICastButton pela primeira vez. Uma mensagem informativa vai ser mostrada ao usuário informando por que a permissão de rede local é necessária. Depois dessa mensagem, a mensagem de LNA do iOS 14 vai aparecer. A descoberta do dispositivo de transmissão começa depois que a mensagem é confirmada.

Em lançamentos subsequentes do app, GCKUICastButton sempre aparece.

Se definido como false, a descoberta de dispositivos vai começar com base no valor da flag GCKCastOptions::disableDiscoveryAutostart.

Perguntas frequentes

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

Talvez seu app não consiga descobrir 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 vai conceder direitos de multicast apenas para oferecer suporte ao Google Cast. Se você planeja criar com o Xcode 12, libere seu app com o Cast 4.6.0.

Se eu lançar meu app novamente com o novo SDK do Cast, qual será a experiência dos meus usuários que usam o iOS 13 ou versões anteriores?

Eles vão continuar tendo a mesma experiência de usuário que tinham antes do lançamento do app. As mudanças visíveis para o usuário são limitadas aos usuários que usam o iOS 14.

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

  • Atualize o Info.plist do app para incluir uma descrição de uso de rede local.
  • Adicione NSBonjourServices ao Info.plist do app e forneça os nomes de serviço 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 seletor de dispositivos personalizados depois que eu fiz 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 padrão. Na versão 4.4.8 do SDK do Google Cast e anteriores, a verificação do dispositivo 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.

A razão dessa mudança é que 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 resultar em caixas de diálogo de permissão aparecendo em lugares aleatórios no app.

Os desenvolvedores que criam um seletor de dispositivos personalizado para o app precisam fornecer um intersticial único antes de iniciar a verificação de dispositivos pela primeira vez no iOS 14.

iOS 13

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

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

Detalhamento do app

Confira um detalhamento dependendo da versão do SDK do iOS que você está usando:

Apps criados com o SDK do iOS 12 ou versões anteriores

  • Ação recomendada. A performance da descoberta de dispositivos pode diminuir ao ser executada no iOS 13, mas ainda será funcional. É altamente recomendável que os desenvolvedores façam upgrade para o SDK do Google Cast v4.4.4 quando ele estiver disponível.
  • O iOS 13 vai 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 Google Cast 4.4.4. Caso contrário, o botão de transmissão pode não aparecer se o usuário não conceder a permissão de localização. O upgrade para o SDK do Cast 4.4.4 é necessário para garantir uma experiência de transmissão confiável no iOS 13.