No momento, estou testando o faturamento no aplicativo para um aplicativo futuro e, depois de comprar com sucesso o item de teste "android.test.purchased" na primeira vez, agora recebo o código de resposta 7 toda vez que tento comprá-lo novamente, o que significa que eu já possuo este item.
12-15 23: 02: 14.149: E / IabHelper (19829): Erro de cobrança no aplicativo: não é possível comprar o item, Resposta de erro: 7: item já possui
Pelo que entendi, essa compra deve sempre ser possível, certo? Para que o desenvolvedor possa testar seu aplicativo?
Caso contrário, como posso "redefinir" seu estado para não possuído? Estou usando o pacote util do exemplo de cobrança no aplicativo do Google.
android
in-app-billing
psykhi
fonte
fonte
Respostas:
Adicione esse código a um encadeamento para iniciar a solicitação de consumo.
Aqui para o teste de compra, PurchaseToken é
E
então o consumo é bem sucedido.
Também não se esqueça de tornar público o mService em
seria possível acessar assim:
fonte
Não há necessidade de escrever nenhum código de consumo especial. Basta usar o comando adb para limpar os dados da Google Play Store:
fonte
Acontece que o item android.test.purchased se comporta como um ID regular. Isso significa que, se você quiser comprá-lo novamente, precisará consumi-lo em algum lugar do seu código. Acho que a documentação do Google é enganosa sobre esse assunto e que eles devem adicionar outro ID estático que você pode comprar sem parar para fins de teste.
fonte
billingClient.queryPurchases()
não retorna esse item não consumida, então agora eu não posso consumir item porque eu não posso conseguirpurchaseToken
issoVersão 3 no aplicativo:
fonte
Versão 3 - Maneira mais rápida de resolver : limpar o cache da Google Play Store deixará "android.test.purchased" disponível novamente.
fonte
eu usei adb shell:
fonte
É assim que podemos consumir o Item
fonte
android.test.purchase
em algum momento que estava causando problemas - a tarefa de inventário no faturamento no aplicativo apenas gerou uma carga de erros e nunca foi concluída. A execução como uma única limpeza a liberou para que eu pudesse continuar usando o meu no meu SKU real e continuar como estava antes. ObrigadoNa minha opinião, se o seu programa não foi projetado para consumir o item, você não precisa ajustar o código para limpar a memória de um fornecedor externo. Isso tornará seu código mais frágil e você precisará gastar muito tempo para adicionar e remover o código que não pertence ao seu software, por isso é um mau design implementar uma solução como essa.
A melhor solução que funcionou para eu limpar o android.test.purchased foi
e depois
Não precisei liberar dinheiro e navegar nas configurações de meus aplicativos ou alterar o código para isso. Eu precisava adicionar o adb às variáveis de caminho do sistema Windows, o que foi bastante direto. Então, sim, você precisa usar o adb, o que você provavelmente precisa, de qualquer maneira.
Você acabou de adicionar seu C: \ ... \ android-sdk \ platform-tools; no caminho do windows em variáveis de ambiente, e imagino que seja bem simples também nos sistemas operacionais mac e linux. Espero que ajude alguém a passar alguns dias a menos com a implementação do android no faturamento de aplicativos.
fonte
uninstall
não é necessário limpar o sku android.test.purchased .O principal problema é que você precisa consumir o
android.test.purchased
item. Mas esse item não estará disponível no seu inventário de consultas, portanto você não pode consumir usando o fluxo normal.Portanto, se você estiver usando o IabHelper, em
IabHelper
sala de aula, poderá alterar temporariamente oIInAppBillingService
mService para público, para que seja acessível a partir do seu IabHelper.Então, na sua turma, você pode consumir assim,
Se for bem-sucedida, a resposta será 0.
Espero que isto ajude.
fonte
consumeAsync()
para android.test.purchased . Não há problema com isso.Para fins de teste, também sugiro que você insira um pedaço de código que limpará todos os produtos que você comprou antes de chamar um método que inicialize o fluxo de compra da gp. Isso é especialmente confortável quando você testa apenas um item no momento. Por exemplo:
fonte
acesse o console do Google Play e abra a guia Gerenciamento de pedidos. Lá você pode reembolsar / cancelar compras de teste.
fonte
Se você estiver no ambiente de teste
1) No caso de android.test.purchased, posso redefinir o pagamento falso reiniciando o dispositivo Android (consumido o inventário).
2) No InApp util, existe um arquivo chamado Security.java, que é o seguinte, temporariamente. Como o pagamento do teste (falso) sempre retorna falso devido a uma exceção de segurança.
Em seguida, na sua chamada OnIabPurchaseFinishedListener, fechInvForconsumeItem ()
O fechInvForconsumeItem () é
Consumir ouvinte é
fonte
fonte
No meu caso, parece que o Google não registra uma compra para o item. Em vez disso, a cópia local do Google Play Services armazena em cache a compra. Dessa forma, quando uma segunda solicitação é feita no mesmo dispositivo,
android.test.purchased already owned
aparece. No entanto, usar outro dispositivo ou redefinir o dispositivo limpa o cache e permite que a compra seja repetida.fonte
No meu caso, eu só precisava limpar o cache dos aplicativos. Depois de limpar o cache, consegui iniciar o fluxo de compras novamente.
No meu dispositivo (4.4.2), naveguei para "Configurações-> Gerenciador de aplicativos". Em seguida, selecionei o aplicativo na guia "DOWNLOAD" e depois em "Limpar cache".
fonte
Essa é a diferença entre itens consumíveis e não consumíveis; itens não consumíveis (com o que você parece estar lidando aqui) têm seu estado rastreado persistentemente, enquanto itens consumíveis podem ser comprados várias vezes. Você precisará acessar o console de gerenciamento do Play e cancelar / reembolsar a venda para testá-lo novamente.
fonte