Vanessa Fagundes
💻 Engenheira de Software iOS do iFood
Todo ano, a Apple organiza a WWDC (Worldwide Developers Conference), uma conferência que marca o lançamento de novas tecnologias e melhorias existentes para os usuários do universo Apple. Em 2023, a Apple lançou uma tecnologia inovadora: SharePlay utilizando AirDrop.
Lançado em 2021, o SharePlay consiste em um framework de atividade em grupo via FaceTime ou iMessage, seja assistir a um filme, ouvir uma música ou um jogar um jogo em grupo. Com ele, é possível sincronizar o conteúdo que deseja ser compartilhado entre os participantes de forma automática, facilitando a comunicação entre os dispositivos, ou também, trocar mensagens com dados customizados.
Já em 2023, a Apple lançou a compatibilidade com o AirDrop no iOS 17.0, permitindo a transmissão de dados sem a necessidade de estar em uma chamada ou em uma conversa, bastando apenas aproximar seu dispositivo ao de outras pessoas. Essa nova funcionalidade abriu um universo de possibilidades, principalmente para o cenário brasileiro, em que o uso do FaceTime não é tão comum. E foi através desse lançamento que o Chapter iOS do iFood, mais especificamente o mini chapter de Innovations, resolveu criar uma nova experiência para nossos usuários: compartilhar os itens da sacola em um pedido em grupo.
Imagine o seguinte cenário: você está com o seu xodó ou amigos e bateu aquela fome e decidem pedir lanches, mas vocês querem fazer um único pedido pra chegar tudo junto e/ou economizar no frete. Atualmente, seria necessário definir a pessoa responsável pelo pedido, e ir adicionando o lanche, a batata e a bebida de cada um. Ia ser trabalhoso e demorado, e vocês estão com fome, né? Com a nova funcionalidade, basta iniciar uma sessão SharePlay, cada um montar a sua sacola com os itens desejados e enviar para quem irá fazer o pedido. Simples e prático, né?
Implementação
Para que você também possa aplicar isso ao seu contexto, vou explicar um pouquinho como aplicar essa nova tecnologia. O exemplo abaixo é próximo ao que temos no iFood hoje, ou seja, um cenário de app UIKit que suporta versões anteriores ao iOS 17.0. Para um exemplo simples em SwiftUI, a Apple implementou um app de exemplo que você pode consultar:
Adicionando o entitlement de Group Activities
Para que um projeto seja capaz de performar as atividades em grupo, é necessário o registro do entitlement GroupActivities no signing do projeto. Para isso, basta acessar o target do projeto, Signing & Capabilities, clicar no botão + Capability, e selecionar GroupActivities.
Criando uma atividade
Uma atividade é qualquer tarefa que você queira realizar em grupo: desenhar, assistir a um filme ou, no caso do iFood, compartilhar os itens da sacola. Uma atividade deve se conformar com o protocolo GroupActivity e prover alguns dados básicos para sua exibição ao usuário.
Iniciando uma atividade
Uma atividade pode ser iniciada de diversas maneiras: na abertura do app, na abertura de uma tela específica, ou no clique de um botão, por exemplo. Para isso, é necessário que o usuário autorize o uso de SharePlay em seu dispositivo, dessa forma, antes de iniciá-la, é necessário checar se essa permissão já foi concedida, ou se será necessário requisitá-la.
Para uma inicialização baseada em uma decisão do usuário, como a execução de um fluxo customizado, é necessário criar uma atividade, identificar se a permissão de SharePlay foi concedida, e então, ativar a atividade.
Também é possível registrar uma configuração na sua ViewController para que o framework já saiba previamente que a sua tela em específico possui uma atividade em grupo. Dessa forma, ao estar com essa ViewController aberta e aproximar a outro dispositivo, a atividade já poderá ser iniciada, que é o caso da nossa funcionalidade no iFood.
Um outro possível exemplo de inicialização, é através do Share Sheet, adicionando a configuração da atividade para o botão SharePlay
Durante a execução do app, deve haver um observer que identifique a inicialização de uma sessão da atividade, para que o app possa manipular os dados e executar a atividade, bem como tenha um mensageiro responsável pelo envio das mensagens para essa sessão. Após a identificação e criação de ambos, o usuário pode se juntar à sessão.
Criando uma mensagem
Uma mensagem é qualquer estrutura de dados que conforme com `Codable`, podendo ser uma simples `String` ou um tipo customizado, como no nosso exemplo, os itens que queremos compartilhar.
Enviando mensagens
Com uma sessão iniciada, e um mensageiro responsável pelas mensagens, agora é possível enviar os dados desejados a qualquer momento.
É possível também escolher para quais participantes enviar uma nova mensagem, caso seja um jogo de dupla, por exemplo, ou no nosso caso, quem irá realizar o pedido.
Recebendo mensagens
Dentro do observer de novas sessões, é possível adicionar também os observers de mensagem, para que quando uma determinada mensagem chegue, ela seja corretamente interpretada.
Saindo ou finalizando a atividade
Um usuário pode sair ou finalizar uma atividade por diversos motivos: escolha do usuário, fechamento do app, ou acontecer algo no fluxo que não necessite mais da atividade, que no nosso caso, é o pedido ser realizado.
Conclusão
Essa nova tecnologia possibilita que muitas funcionalidades incríveis sejam desenvolvidas com muito mais facilidade, trazendo novas experiências para nossos usuários, sem a necessidade de estruturas complexas de dados, criação de sockets ou outros sistemas de comunicação simultâneos. Espero que esse artigo ajude você a inserir o SharePlay em seu app também. Ficou alguma dúvida ou sugestão? Não hesite em me contatar. Caso queira conferir o exemplo completo, basta acessar: