Compartilhar itens da sacola usando SharePlay

Saiba como você também pode aplicar esse framework de atividade em grupo ao seu contexto

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:

Esse conteúdo foi útil para você?
SimNão

Publicações relacionadas