Atualização do produto
Feliz 4 de julho: Conquistas de viagem e amigos do Mapsake.
Feliz 4 de julho para todos que celebram nos Estados Unidos. Esta versão torna o atlas privado mais divertido, com conquistas explicáveis e um compartilhamento intencional entre amigos.
Feliz 4 de julho!
Feliz 4 de julho para todos que celebram nos Estados Unidos!
Esta atualização é sobre duas maneiras pelas quais um mapa de viagens privado pode se tornar mais vivo: as conquistas dão ao proprietário novos padrões para observar em sua própria história, enquanto o Mapsake Friends torna possível comparar essa história com pessoas que ele realmente conhece.
Nenhuma dessas funcionalidades altera a regra fundamental. O Mapsake é, antes de tudo, um atlas pessoal. Não há contagem pública de seguidores, ranking global ou feed projetado para fazer desconhecidos competirem.
160 razões para olhar novamente para o mapa.
Mapsake agora inclui aproximadamente 160 conquistas. Algumas são marcos familiares: um primeiro local marcado, cinco países, cada continente ou uma lista crescente de cidades e aeroportos. Outras descrevem grupos geográficos, cultura, natureza, ciência, aviação e as formas menos óbvias escondidas em um histórico de viagens.
O catálogo é intencionalmente amplo. Uma pessoa que faz viagens de carro por regiões próximas ainda deve encontrar um progresso significativo; o sistema não é reservado para alguém que tenta coletar todos os países.
Na interface, a avaliação de conquistas é uma passagem determinística pelo atlas. Cada conquista define os lugares ou limites que lhe interessam, o Mapsake compara essa definição com o registro Visited e Lived atual e o resultado inclui o progresso, o estado desbloqueado, a data e o nível da medalha. Não depende de um serviço de análise ou de um mecanismo de regras remoto.
Essa abordagem tem uma consequência útil: as conquistas funcionam offline e são atualizadas imediatamente após uma importação ou alteração manual. Isso também as torna testáveis. O mesmo ambiente de teste pode sempre produzir o mesmo conjunto de conquistas.
O catálogo cresceu de 11 para aproximadamente 160.
O primeiro motor de conquistas foi lançado com marcos 11 simples. Isso foi suficiente para demonstrar o processo: derive o progresso do mapa, destaque o que foi desbloqueado e mostre uma barra de progresso para o restante. Também era muito pequeno para ser interessante para qualquer pessoa com um histórico de viagens estabelecido.
A segunda etapa introduziu famílias e grupos geográficos. Os marcos de contagem de países passaram a formar uma pilha, em vez de uma parede de cartões quase idênticos. A conclusão continental e grupos como União Europeia, Espaço Schengen, ASEAN, G7, Magrebe e os países da Ásia Central terminados em ‘-stão’ acrescentaram objetivos ligados ao formato da viagem, não apenas ao seu volume.
O catálogo se expandiu para incluir artes, música, ciência, tecnologia, natureza, geologia e economia. Foi aí que começou a parecer distintamente Mapsake. Um grupo de história do jazz e um grupo do programa espacial podem se sobrepor geograficamente, enquanto contam histórias completamente diferentes sobre por que esses lugares pertencem juntos.
O desafio era evitar trivialidades arbitrárias. Cada grupo precisa de uma lista de membros fixa e defendível e uma explicação que faça sentido depois que a novidade passa. A filiação reside na fonte e não vem de um serviço web em evolução, portanto, uma atualização do catálogo é revisada e versionada como qualquer outro comportamento do produto.
Ao redor de 160, há informações suficientes para tornar a pesquisa e a organização necessárias. Não é um objetivo que precise crescer para sempre. Um catálogo pequeno e coerente é melhor do que milhares de distintivos processuais que ninguém entende.
As datas e famílias de desbloqueio alteraram a interface.
Quando o catálogo atingiu aproximadamente 80 itens, uma grade normal parou de funcionar. Múltiplos limites da mesma família obscureceram tudo o mais, e um usuário experiente não conseguiu determinar qual atualização era nova.
Mapsake agora agrupa as conquistas obtidas dentro de uma família em uma pilha, com o nível mais alto na parte superior. Ao expandir, são exibidos os marcos anteriores. As conquistas bloqueadas permanecem visíveis como objetivos, mas a classificação padrão mostra primeiro aquelas que estão mais próximas de serem concluídas.
As datas de desbloqueio são registradas na primeira vez que uma conquista se torna verdadeira. Elas persistem em avaliações posteriores e viajam dentro da captura do amigo, o que permite que a página de conquistas de um amigo mostre quando algo aconteceu sem expor um registro privado de eventos. Os usuários existentes são definidos como linha de base no primeiro uso, portanto, a instalação da atualização não produz uma tempestade de confetes para cada marco que seu mapa antigo já cumpriu.
Esse comportamento padrão surgiu do fato de que a migração foi considerada parte da funcionalidade. Um motor tecnicamente correto que anunciasse as "conquistas" 70 "novas" no lançamento pareceria defeituoso, mesmo que cada medalha fosse matematicamente merecida.
O progresso deve ser compreensível.
Uma parede de ícones bloqueados não é muito útil, então a guia "Conquistas" é organizada com explicações:
- Pesquise por nome e filtre por categoria ou continente.
- Ordene pelo que está mais próximo, desbloqueado recentemente ou já concluído.
- Abra uma conquista para ver sua descrição, locais dos membros, mapa e progresso atual.
- Avance pelos níveis de bronze, prata, ouro e platina, onde uma família os apoia.
- Toque e segure em uma conquista para criar um cartão de compartilhamento sem publicar nada automaticamente.
As celebrações de desbloqueio são breves e táteis, e todos os detalhes permanecem disponíveis posteriormente. O tom é deliberadamente leve e, às vezes, um pouco nerd. Deve parecer que você está descobrindo algo sobre o mapa, não recebendo uma avaliação de desempenho.
A tela de detalhes também resolveu um problema de confiança. Um título como "Five Eyes" ou "Ring of Fire" não é autoexplicativo para todos. Ao abri-lo, é exibida a descrição completa, a região do mapa, os países do grupo, quais são considerados concluídos e o intervalo de datas de visita, quando disponível. Para famílias de níveis, o bronze até o platina comunicam o progresso sem exigir quatro sistemas visuais não relacionados.
O mapa destaca deliberadamente os países não visitados, assim como os visitados. É mais fácil entender o progresso quando uma pessoa pode ver que um objetivo está a apenas um país vizinho, em vez de simplesmente ler "8 de 9".
Uma celebração não pode controlar a navegação
Um detalhe de implementação se tornou visível durante os testes: as celebrações de conquistas se comportavam originalmente como um resumo modal. Os cartões pareciam clicáveis, mas a camada de celebração não continha informações de navegação suficientes para abrir de forma confiável o detalhe subjacente.
A correção foi tratar cada prêmio como a mesma identidade de conquista usada pelo catálogo principal e direcioná-lo para a tela de detalhes existente. A "celebração" permanece uma apresentação temporária; o modelo de conquista permanece a fonte duradoura. Este é um pequeno exemplo de uma regra mais ampla da Mapsake: os efeitos especiais devem estar sobre o produto, e não dividi-lo.
Amigos, sem criar uma rede social
Mapsake Friends começa com um convite, não com um diretório pesquisável. Um link contém um código de compartilhamento privado em vez de um nome ou uma conta. Abrir isso cria uma conexão mútua: cada pessoa pode ver o mapa compartilhado da outra dentro do Mapsake.
Links funcionam bem em longas distâncias, enquanto códigos QR e descoberta próxima cobrem o momento em que duas pessoas estão no mesmo cômodo. O aplicativo publica uma captura de tela de viagem compacta para a conexão em vez de tentar sincronizar dois bancos de dados locais completos.
O primeiro modelo de compartilhamento não era confiável o suficiente.
Originalmente, os amigos usavam uma partilha CloudKit separada para cada relacionamento. Isso parecia atraente porque o CloudKit lidava com os convites de acesso, mas tornou a amizade mútua complicada. Uma pessoa poderia aceitar uma partilha sem que o remetente original recebesse um caminho confiável de volta, e a URL de partilha do sistema era difícil de transformar num fluxo previsível dentro do aplicativo.
O modelo de substituição fornece a cada perfil um registro de mapa compartilhado e estável ao qual se acessa por meio de um código opaco. Um link de convite abre o registro do amigo, armazena um instantâneo, publica o próprio mapa do destinatário e grava uma pequena solicitação de volta ao código original. As atualizações em primeiro plano e em segundo plano completam a conexão mútua.
A primeira versão desse substituto usou o código estável diretamente no link. Isso funcionou, mas um link poderia ser reutilizado indefinidamente se escapasse da conversa pretendida. Agora, um token de convite único está na frente da identidade do mapa estável. Um token consumido não pode ser reutilizado, enquanto a amizade subjacente pode continuar a ser atualizada.
Este é um exemplo de como o produto e a infraestrutura mudam juntos. "Compartilhar meu mapa" é apenas um botão na interface, mas por baixo dele há roteamento de links universais, pesquisa de registros do CloudKit, tratamento de solicitações mútuas, cache local, desduplicação e uma mensagem clara de sucesso ou falha. Ocultar essa maquinaria é o trabalho; fingir que ela não existe tornaria as falhas impossíveis de explicar.
O perfil de um amigo tem muita profundidade. Ele pode incluir um mapa interativo, um Passaporte com controles de lente, região e ano, conquistas e uma visualização de comparação mostrando a sobreposição e os lugares exclusivos de cada pessoa. Um ponto de localização residencial é excluído, a menos que o proprietário opte explicitamente por compartilhá-lo.
A tela de amigos inicialmente reutilizou um globo e um resumo mais simples. Isso rapidamente pareceu uma prévia em vez de um relacionamento. A superfície atual usa as mesmas configurações de mapa do Atlas do proprietário, os mesmos cálculos de passaporte e o mesmo modelo de detalhes de conquista com uma fonte de dados diferente.
A reutilização desses componentes revelou uma abstração útil: as telas de mapas e passaportes devem consumir dados de viagem, e não presumir que os dados pertencem ao perfil local conectado. Depois que a função de captura de tela com amigos implementou essa interface, a filtragem, os intervalos de datas, as áreas continentais, o progresso das conquistas e as comparações poderiam compartilhar o mesmo comportamento sem dar a um amigo acesso ao banco de dados subjacente do proprietário.
Houve um bug de navegação menos glamoroso no caminho. Uma linha de "amigos" estava diretamente vinculada a um objeto de modelo SwiftData, mas a sincronização do CloudKit poderia reiniciar esse objeto e alterar sua identidade logo quando a navegação começava. Usar o ID estável do amigo para a navegação corrigiu o problema da pressão aparentemente inativa. Bugs de dados distribuídos frequentemente aparecem como bugs comuns da interface do usuário.
As fotos do perfil seguiram a mesma regra para capturas instantâneas. Um pequeno avatar pode ser publicado com o perfil compartilhado e atualizado após uma edição. Se nenhuma foto for definida, as iniciais são usadas como padrão. O Mapsake solicita um nome e uma foto reconhecíveis antes do primeiro convite, mas não torna nenhum dos dois obrigatório.
Um feed de alterações significativas.
A guia Amigos não é um fluxo de postagens carregadas. O Mapsake compara periodicamente a última captura de tela de um amigo com a que já está armazenada no dispositivo. Se um amigo adicionou lugares ou desbloqueou conquistas, essas diferenças se tornam um pequeno feed de atividade local.
Essa abordagem de comparação de instantâneos mantém o recurso simples. Amigos não precisam compor uma postagem cada vez que seu atlas muda, e o Mapsake não precisa de um sistema de classificação de conteúdo. O feed registra um evento útil porque o histórico de viagens subjacente mudou.
Também evita adicionar outro tipo de registro CloudKit para cada evento de feed. O aplicativo já possui os instantâneos antigos e novos. Comparar seus identificadores de local e conquistas desbloqueadas pode derivar as alterações interessantes localmente e, em seguida, manter um feed limitado em uma pequena loja JSON no dispositivo.
As adições de lugares e os desbloqueios de conquistas são agrupados em lotes separados, mesmo quando chegam em uma única atualização. Isso impede que uma importação grande gere dezenas de linhas quase idênticas e faz com que o feed pareça "Emma adicionou Japão, Kyoto e outros dois" em vez de um registro de transações de banco de dados.
As notificações podem ser ativadas por filtro de viagem com um período de espera, para que uma grande quantidade de histórico importado não se transforme em uma série de alertas. O recurso de atualização por deslizar permanece disponível quando alguém deseja verificar deliberadamente.
A privacidade é parte da funcionalidade, não um aviso legal.
Os históricos de viagens podem revelar casas, rotinas e planos futuros. Portanto, a função de amigos deve ser mais explícita do que uma função social convencional:
- Para adicionar alguém, é necessário um convite, uma leitura de código QR ou uma troca próxima.
- O payload compartilhado contém os dados do mapa necessários para a experiência de amigos, não uma cópia da biblioteca de fotos.
- O compartilhamento na tela inicial é separado e desativado por padrão.
- Remover um amigo remove o relacionamento local e sua atividade em cache.
- Para usar o Mapsake, você não precisa de uma conta Mapsake.
A captura de tela de um amigo nunca inclui bytes de foto originais. Contém as marcas de viagem, os campos de perfil, as informações da lente, as datas necessárias para estatísticas específicas e os desbloqueios de conquista necessários para as superfícies que o amigo pode abrir. Essa fronteira impede que uma experiência rica se torne um serviço de compartilhamento de fotos acidentalmente.
Mapsake distingue o compartilhamento com amigos de um link público para o navegador. Uma conexão com um amigo é mútua e está dentro do aplicativo. Um mapa público é um artefato opcional separado para quem deseja um link de somente leitura. Ativar um não ativa automaticamente o outro.
As Conquistas e os Amigos tornam o atlas mais divertido, mas não o transformam em um perfil público. Essa distinção é importante e deve ser repetida à medida que o aplicativo cresce.
Experimente a atualização
Abrir Conquistas para pesquisar em todo o catálogo e ver o que está mais próximo. Em seguida, abra Amigos, compartilhe um link de convite ou use a opção "perto" e "QR code" e compare mapas com alguém que você conhece.
O melhor resultado não é uma pontuação mais alta. É uma conversa: o lugar que ambas as pessoas amaram, a região que uma pessoa nunca havia considerado, ou a pequena conquista incomum que nenhuma delas sabia que estava prestes a alcançar.