- Para resolver a lentidão do app da PureGym e a inconveniência do processo complexo de entrada, foi feita uma otimização pessoal com o Apple Wallet
- O QR code existente exige abrir o app e carregar as informações toda vez, um método de entrada ineficiente que leva cerca de 47 segundos
- Por meio de vários processos técnicos, como engenharia reversa, uso do mitmproxy e do framework PassKit, foi implementado um passe do Wallet com renovação automática
- Nesse processo, foram confirmados na web detalhes do funcionamento interno da PureGym, como falhas de segurança no código PIN, a estrutura de autenticação da API e informações de localização das unidades
- No fim, foi criada uma experiência de uso que permite entrar em 3 segundos, deixando claro que se trata apenas de um experimento pessoal e não de um serviço oficial
47 segundos: o começo do incômodo
- Em um dia útil, às 11:15 da manhã, levou 47 segundos para abrir o app na entrada da PureGym
- O sinal era fraco, foi preciso conectar ao Wi‑Fi, abrir o app e passar por várias notificações push, ofertas especiais e outras telas até o QR code aparecer
- O QR code demorava muito para surgir, gerando até constrangimento diante dos outros membros
- Repetindo isso 6 vezes por semana, eram desperdiçados 282 segundos por semana em uma experiência ineficiente
- Em comparação com experiências sem atrito como a da Amazon Fresh, a UX de entrada da PureGym parecia muito defasada
O mistério do PIN de 8 anos
- O autor usa o mesmo PIN de 8 dígitos há 8 anos
- Esse PIN não expira nem é alterado
- Já o QR code no app é trocado por um novo valor a cada minuto
- Existe uma grande contradição entre o nível real de segurança e a implementação na prática
- O método do PIN permanece por tempo excessivamente longo, enquanto apenas o QR code é rigidamente protegido, em um verdadeiro "teatro de segurança"
Entendendo a PureGym com mitmproxy
- A ideia inicial era colocar um screenshot do QR code no Apple Wallet, mas isso não funcionou de imediato
- O QR code da PureGym é gerado dinamicamente, expira em cerca de 1 semana, mas no app é renovado a cada 1 minuto
- Ao buscar no GitHub por repositórios relacionados a "PureGym", foi descoberta a estrutura de autenticação da API
- O PIN de 8 dígitos usado no login também era usado como senha da API
- As credenciais de autenticação básica codificadas em Base64 também ofereciam pouca segurança
- Para analisar o tráfego do app, foram interceptadas requisições com ferramentas de proxy como o mitmproxy
- A estrutura JSON do QR code era composta por part1 (id fixo), part2 (timestamp) e part3 (salt para renovação)
- A própria API informava inclusive o momento de renovação e as condições de expiração
PassKit: o potencial do Apple Wallet
- Um passe do Apple Wallet não é apenas um cartão estático, mas uma estrutura de miniapp capaz de se atualizar sozinha, receber notificações push e reagir à localização
- A implementação com PassKit exige especificação em JSON, recursos de imagem, assinatura com certificado e um web service para atualização em tempo real
- No portal de desenvolvedores da Apple, é necessário emitir um Pass Type ID e um certificado WWDR
- A assinatura e o gerenciamento de certificados são trabalhosos, mas, quando funcionam, proporcionam uma experiência fluida no dispositivo real
Construindo um backend em Swift
- Embora o comum seja usar Node.js, o autor implementou diretamente o web service do PassKit com Vapor, baseado em Swift
- Quando o passe precisa ser atualizado, uma push silenciosa fornece a atualização automática
- Isso permite uma renovação natural do passe, sem que o usuário perceba
Automação das localizações da PureGym no país inteiro
- Um passe do Apple Wallet pode ser exibido automaticamente em locais especificados
- O site oficial da PureGym não traz coordenadas detalhadas, mas pela API foi possível obter a lista de coordenadas de todas as unidades do país
- Todas as coordenadas das unidades foram parseadas para definir, em cada passe, a academia mais próxima
- Desvantagem: quando a PureGym fica dentro de um shopping, o passe pode aparecer mesmo em uma simples ida às compras, causando um pequeno incômodo
Integração com Apple Watch
- O passe do Apple Wallet é sincronizado automaticamente com o Apple Watch sem trabalho extra
- Com dois cliques no pulso, escaneamento e entrada, o tempo caiu drasticamente para 3 segundos
- Foi alcançada uma redução de mais de 93% no tempo
A mudança em números
- Tempo anterior de entrada com o app da PureGym: 47 segundos
- Tempo de entrada com o passe do Apple Wallet: 3 segundos
- Tempo médio economizado por semana: 4,4 minutos (3,8 horas por ano)
- Pessoas ao redor perguntaram 23 vezes "esse app existe?", e sempre foi explicado que era algo não oficial
- Apesar dos pedidos, não há plano de distribuição por questões de direitos autorais e políticas de serviço
Bônus: integração com Home Assistant
- Por meio do endpoint de ocupação interna da API da PureGym, a lotação atual da academia é exibida em um dashboard de IoT
- Com base nos dados, é possível decidir voltar em horários mais vazios, melhorando a eficiência e a motivação nos treinos
Realidade da engenharia e ética
- Embora tenha começado como uma solução para um incômodo pessoal, era uma área que a PureGym não havia melhorado por anos internamente
- Um protótipo criado fora da organização às vezes resolve o problema mais rápido que o roadmap oficial
- Oficialmente, isso pode violar os termos de uso, e a PureGym pode bloquear a qualquer momento
- Não houve qualquer automação ou compartilhamento; foi usado apenas como experimento pessoal, respeitando princípios como uso de cache para manter a estabilidade
Próximos passos e conclusão
- No futuro, seria possível propor ideias de expansão, como uma "notificação push da vergonha"
- A utilidade prática pode ser pequena, mas há satisfação em ter otimizado 3,8 horas anuais de "ações desnecessárias"
- Se a PureGym implementasse isso oficialmente, poderia oferecer mais conveniência a muitos usuários
- Fica registrado como um caso de criação de uma "experiência não oficial, mas eficaz"
Ainda não há comentários.