Pergunta

Para um aplicativo básico com nonconsumable compras in-app, alguém já descobriu as melhores práticas para o uso do SKPaymentQueue restoreCompletedTransactions?

Observações

Eu sei que é recomendado para sempre registrar uma transação observador para receber as transações pendentes que fazer o seu caminho de volta para o aplicativo, mas isso é uma questão diferente.Parece restoreCompletedTransactions é algo a que a aplicação tem para ativamente decidir quando chamada para pesquisar todas as compras que o cliente já fez.

O que posso dizer, o método foi concebido para recuperar as compras que podem ter sido perdidos.Por exemplo, um cliente pode instalar ou mover um aplicativo para um novo dispositivo de tal forma que o local do aplicativo registros anteriores, os pagamentos são perdidos ou redefinir.

Preocupações

O que não está claro para mim é como detectar automaticamente a essa condição (por exemplo,como decidir quando enquete para a falta de compras) de forma fiável.Eu não quero estragar isso e risco negando o acesso do cliente a funcionalidade que eles já pagou.

Ao mesmo tempo, eu não quero chamar restoreCompletedTransactions cada vez que o aplicativo é iniciado apenas para ser seguro e, basicamente, obter de volta transações eu já sei cerca de 99,9% do tempo.(Exceto para compra no aplicativo, o meu app realmente não requerem nenhuma conectividade de rede.)

Notas

A documentação da Apple esclarece que os clientes não são cobrados por qualquer nonconsumable compras que eles já fizeram.Se tentar re-compra, uma transação de pagamento ainda é supostamente enviada para o app.

Pior caso, um cliente pode recuperar compras dessa maneira, mas eu ainda gostaria de evitar andar por um caminho semelhante a re-compra de algo que já pagou.

Foi útil?

Solução

Atualização (junho de 2019)

Apple's Documentação sobre este tópico foi atualizado em 2018 e é bastante abrangente. Muitas de suas recomendações são consistentes com o que acabamos descobrindo aqui. O maior desenvolvimento desde que essa pergunta foi publicada pela primeira vez em 2009 é o recibo da App Store no iOS 7.

Caso o link fique obsoleto em algum momento no futuro, citarei parte da documentação aqui.

Restaurando produtos adquiridos

Os usuários restauram as transações para manter o acesso ao conteúdo que eles já compraram. Por exemplo, quando eles atualizam para um novo telefone, não perdem todos os itens que compraram no telefone antigo. Inclua algum mecanismo em seu aplicativo para permitir que o usuário restaure suas compras, como um botão Restaurar compras. Restaurando solicitações de compras para as credenciais da App Store do usuário, que interrompem o fluxo do seu aplicativo: por isso, não restaure automaticamente as compras, especialmente sempre que seu aplicativo é iniciado.

Na maioria dos casos, tudo o que o seu aplicativo precisa fazer é atualizar seu recibo e entregar os produtos em seu recibo. O recibo atualizado contém um registro das compras do usuário neste aplicativo, neste dispositivo ou em qualquer outro dispositivo. No entanto, alguns aplicativos precisam adotar uma abordagem alternativa por um dos seguintes motivos:

  • Se você usar conteúdo hospedado na Apple, a restauração de transações concluídas fornece ao seu aplicativo os objetos de transação que ele usa para baixar o conteúdo.
  • Se você precisar suportar versões do iOS mais cedo que o iOS 7, onde o recibo do aplicativo não estiver disponível, a restauração preenchida transações.
  • Se o seu aplicativo usar assinaturas sem renovação, seu aplicativo será responsável pelo processo de restauração.

A atualização do recibo solicita à App Store a cópia mais recente do recibo. A atualização de um recibo não cria novas transações. Embora você deva evitar a atualização várias vezes seguidas, essa ação teria o mesmo resultado que a atualização apenas uma vez.

A restauração de transações concluídas cria uma nova transação para cada transação concluída que o usuário fez, reproduzindo essencialmente o histórico para o seu observador da fila de transações. Enquanto as transações estão sendo restauradas, seu aplicativo mantém seu próprio estado para acompanhar por que está restaurando transações concluídas e como ele precisa lidar com elas. A restauração várias vezes cria várias transações restauradas para cada transação concluída.


Resposta anterior (2009-2012)

Depois de escrever a pergunta e pensar sobre isso, criei algumas soluções.

Automático (não recomendado)

Uma opção é gravar nos padrões do usuário se restoreCompletedTransactions foi chamado (e concluído com sucesso) ainda no aplicativo. Caso contrário, o aplicativo chama uma vez na inicialização. Como esse sinalizador pode ser armazenado no mesmo local que os pagamentos não consumíveis, se os padrões do usuário forem limpos mais tarde, o método de restauração será chamado novamente quando o aplicativo iniciar.

Dessa forma, se um cliente existente estiver de alguma forma fazendo uma nova instalação do aplicativo, ele ainda obtém suas compras restauradas automaticamente. Se eles são um novo cliente que nunca lançou o aplicativo antes, a operação de restauração não retorna nada.

Em ambos os casos, restoreCompletedTransactions é chamado apenas uma vez em vez de em todos os lançamentos.

Manual (recomendado)

Outra opção é oferecer ao cliente um botão "Restaurar compras" em algum lugar, conectá -lo a restoreCompletedTransactions E deixe -os decidir se e quando for necessário.

(Os comentários abaixo entram no motivo pelo qual uma restauração manual é provavelmente melhor do que tentar fazê -lo automaticamente.)

Outras dicas

Não se esqueça de que uma ID da Apple pode se estender por vários dispositivos.Assim, a manutenção de um sinalizador em um único dispositivo (por exemplo, o usuário do iPhone) que diz que se você não tiver feito uma restauração não vai permitir que você para detectar se o cliente fez a compra em outro dispositivo (dizer o seu iPad) que precisa ser restaurado para o iPhone.Por isso, ter um método manual de lançamento de uma restauração, é necessário, TAMBÉM, mesmo se você tiver um método automático.

Para piorar a situação, eu ainda não descobri ainda como você será notificado quando o REEMBOLSO dos IAPs são feitas.Eu suspeito que o processo de restauração será simplesmente retornar uma lista de não-reembolsada transações.Assim, a), você precisará EXCLUIR o registro do usuário do IAP é quando você faz o seu restauro em caso reembolsado produtos simplesmente não relatadas durante a restauração, e b) você precisa, periodicamente, fazer uma restauração automaticamente no fim para pegar a sua devolução.

Tudo isso põe em evidência o problema da Apple IAP-é mal concebido e documentadas de maneira inadequada -- e agora é NECESSÁRIO para provedores de conteúdo, como leitores de ebook, que já tem a funcionar na perfeição com base na web armazena já está trabalhando em seus aplicativos (como o Kindle).

Sempre que você tem uma compra no aplicativo não consumível, por exemplo, uma nova pista de corrida, você precisa implementar um botão 'Restaurar' em algum lugar do aplicativo para que o usuário possa restaurar sua compra se alterar dispositivos ou excluir o aplicativo. Isso é obrigatório e eu já tive um aplicativo da Apple para não implementar o botão Restaurar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top