React-native-iap: Adicionar suporte para Amazon Appstore IAP

Criado em 26 fev. 2020  ·  35Comentários  ·  Fonte: dooboolab/react-native-iap

Acho que seria bom ter suporte para a API IAP da Amazon Appstore .

🎯 feature 📢 announcement 🚶🏻 stale

Comentários muito úteis

Vi que havia um trabalho no passado para apoiá-lo, mas parece estar desatualizado e não pode ser usado com a biblioteca react-native-iap atual:
https://github.com/dooboolab/react-native-iap/issues/370
Então eu comecei meu próprio fork em https://github.com/nochkin/react-native-iap/tree/amazon-iap

Parece estar funcionando no meu próprio ambiente de desenvolvimento. Mas antes de criar um PR para ele, seria bom obter alguns testadores alfa/beta reais para revisar certos casos de borda e poli-los adequadamente, pois é muito possível que eu não use todas as funcionalidades em meu próprio aplicativo.

Tentei ficar dentro da API original react-native-iap possível. Existem alguns métodos que eu ainda não faço (posso adicioná-lo se alguém tiver uma maneira de testar corretamente).

Uma das principais decisões de design no meu fork é como detectar Google vs Amazon. Acho que detectar um modelo/marca de dispositivo não é uma boa abordagem porque um usuário pode instalar o Google Play em um Kindle e obter o aplicativo pelo Google (e vice-versa quando você pode instalar o Amazon Appstore em um dispositivo baseado no Play). Devemos fazer o IAP através da API correspondente neste caso.
Meus garfos verificam a fonte de instalação e atuam de acordo. No ambiente dev, a fonte de instalação não existe, então você pode definir um fallback para poder testá-la corretamente.
Vou documentar isso se houver algum interesse em que meu fork seja mesclado no repositório upstream.

Todos 35 comentários

Vi que havia um trabalho no passado para apoiá-lo, mas parece estar desatualizado e não pode ser usado com a biblioteca react-native-iap atual:
https://github.com/dooboolab/react-native-iap/issues/370
Então eu comecei meu próprio fork em https://github.com/nochkin/react-native-iap/tree/amazon-iap

Parece estar funcionando no meu próprio ambiente de desenvolvimento. Mas antes de criar um PR para ele, seria bom obter alguns testadores alfa/beta reais para revisar certos casos de borda e poli-los adequadamente, pois é muito possível que eu não use todas as funcionalidades em meu próprio aplicativo.

Tentei ficar dentro da API original react-native-iap possível. Existem alguns métodos que eu ainda não faço (posso adicioná-lo se alguém tiver uma maneira de testar corretamente).

Uma das principais decisões de design no meu fork é como detectar Google vs Amazon. Acho que detectar um modelo/marca de dispositivo não é uma boa abordagem porque um usuário pode instalar o Google Play em um Kindle e obter o aplicativo pelo Google (e vice-versa quando você pode instalar o Amazon Appstore em um dispositivo baseado no Play). Devemos fazer o IAP através da API correspondente neste caso.
Meus garfos verificam a fonte de instalação e atuam de acordo. No ambiente dev, a fonte de instalação não existe, então você pode definir um fallback para poder testá-la corretamente.
Vou documentar isso se houver algum interesse em que meu fork seja mesclado no repositório upstream.

@nochkin Parece muito bom. Gostaria de saber o passo para testar isso. Não tenho nenhum dispositivo amazon . Ainda posso testar? Espero que você possa trazer algum documento para quem tiver interesse em acompanhar essa integração.

Eu uso um dispositivo Amazon real para fins de teste. Acho que se você instalar o Amazon Appstore em um dispositivo que não seja da Amazon, isso deve acontecer.
Vou criar alguma documentação ainda hoje para começar. Fico feliz que haja interesse por isso.

Aqui está o guia sobre como adicionar suporte ao Amazon IAP ao aplicativo existente:
https://github.com/nochkin/react-native-iap/blob/amazon-iap/README_AMAZON.md
Deixe-me saber se algo precisa de esclarecimentos adicionais.

PARA SUA INFORMAÇÃO,
Fiz mais algumas alterações no meu fork ontem à noite e também lancei meu aplicativo para produção usando-o.
Parece bom até agora.
Eu estaria interessado em obter um feedback de outras pessoas caso haja necessidade de qualquer funcionalidade adicional ou casos de uso que não sejam abordados em meu próprio aplicativo.

@hyochan Existe algum plano para adicionar isso a um lançamento?

@curiousdustin ,
Você pode usar meu fork para testar e um feedback:
https://github.com/nochkin/react-native-iap/tree/amazon-iap
Tenho certeza de que seus casos de uso são diferentes dos meus, portanto, você pode fornecer comentários adicionais para obter mais alterações.

@nochkin seu fork inclui suporte para IAPs de assinatura da Amazon?

@curiousdustin ,
Apesar de já ter passado muito tempo desde a implementação, mas acredito que sim. Só não testei com assinaturas.
Você ainda precisará implementar a verificação no lado do servidor, pois nunca valido nada em um cliente.

A Amazon não traz tanto tráfego, então meus testes na vida real são meio lentos. Se você pudesse contribuir neste aspecto, seria bom.

Ok, provavelmente vou testar isso. Atualmente, estou usando meu próprio fork em produção, mas isso foi antes das principais mudanças relacionadas ao ciclo de vida. Eu realmente gostaria de aproveitar todas as grandes atualizações desde então.

Agradável. Ainda estou no processo de implementação de assinaturas para meu próprio aplicativo (lógica interna relacionada ao aplicativo, não o rn-iap), então me avise se houver alguma coisa.

A API de assinaturas da Amazon é meio estranha ao ser consultada. Por exemplo, tenho assinatura mensal e anual do mesmo serviço, mas a Amazon os relata de forma idêntica. A única diferença é o preço, então eu estava pensando em descobrir qual é qual baseado apenas no preço.

Você tem muitos usuários inscritos e novos assinantes?

Sim, o aplicativo para o qual estou usando tem centenas de novas assinaturas a cada mês. Além disso, qualquer atualização que use isso passará por um controle de qualidade completo antes do lançamento.

Também temos opções mensais e anuais. Como você descreveu, ambos estão sob um único ID para a Amazon. No nosso caso estamos confirmando a assinatura via API da Amazon, que nos dá informações sobre o período.

Isso soa muito bem. Estou feliz que meu fork terá um teste adequado em um cenário diferente.

Eu preciso mostrar o período de assinatura na interface do usuário para o usuário selecionar.
É estranho que o Amazon Developer Console tenha esses campos conforme necessário, mas a API não tem acesso a eles.

Isso pode ter mudado, mas descobrimos que mesmo que você apresente 2 opções aos usados, assim que iniciarem o fluxo de compra, a Amazon exibirá as opções de período com a primeira pré-selecionada. Então, tivemos que implementar uma nova interface do usuário para a Amazon, onde o usuário não seleciona o período, até que esteja na interface do fluxo de compra da Amazon.

Ideia interessante na verdade. Minha interface do usuário não se encaixa nesse modelo, mas posso considerar essa opção se decidir alterá-la. Eu ainda posso começar a usá-lo de qualquer maneira. Obrigado.

@curiousdustin @nochkin
Oi, como eu entendi que você fez muito para este problema, uau! Estou no processo de implementação de assinaturas também. Como você sabe que a assinatura foi atualizada? E você precisa atualizá-lo no servidor? Como funciona com o RVS, quero dizer, o recebimento da amazon não tem data final da assinatura, então, como atualizar a assinatura específica para o usuário no servidor. Seria bom ouvir de você se você sabe algo sobre todas essas coisas)

Na verdade, eu ainda não comecei a implementar esse fork no meu projeto. Provavelmente fará isso no próximo mês.

Desculpe, não tenho muitas informações sobre como funciona o material da Amazon do lado do servidor. Uma pessoa diferente na minha equipe cuidou do back-end. Eu sei que atualmente nós apenas entregamos o ID do produto e o ID do recibo para o nosso servidor e ele lida com todo o resto até verificar e atualizar a validade da assinatura conforme necessário.

@kostiantyn-solianyk
Meu próprio aplicativo atualmente implementou apenas o Google Play e a App Store, ainda não fiz o Amazon RVS para assinaturas.
Eu faço a verificação regular de compras no aplicativo para a Amazon e isso foi fácil de implementar, então eu diria que as assinaturas devem ser semelhantes.

sim, no modo de teste está tudo ok com isso, e com você também, trabalhando conforme necessário (nos casos que verifiquei).

Estamos presos no problema de atualizar a assinatura porque o recibo da Amazon não tem data de término da assinatura e é realmente estranho.

Verei se consigo priorizar novamente minhas tarefas para poder brincar com as verificações da Amazon em suas assinaturas.
Suponho que você também tenha o problema de usar o servidor de teste deles, certo?

@nochkin A propósito, notei que os métodos getAvailablePurchases e getPurchaseHistory retornam erros. Acho que esses 2 ainda não implementaram para amazon IAP no seu fork?

Você está certo. Meu próprio modelo de aplicativo não usa isso.
Vou dar uma olhada. Obrigada.

Semelhante a @kostiantyn-solianyk , descobri que os seguintes métodos precisam ser implementados para a Amazon:

RNIapAmazonModule.endConnection() chamado por RNIap.endConnection()

Eu acho que isso só precisa resolver a promessa. Também requer alterações em index.ts , ou nunca é usado.

RNIapAmazonModule.refreshItems() chamado por RNIap.consumeAllItemsAndroid()

Meu aplicativo não usa consumeAllItemsAndroid , então não analisei o que precisa ser feito.

RNIapAmazonModule.getPurchaseHistoryByType() chamado por RNIap.getPurchaseHistory()

Meu aplicativo não usa getPurchaseHistory , então não analisei o que precisa ser feito.

RNIapAmazonModule.getAvailableItemsByType() chamado por RNIap.getAvailablePurchases()

Isso é necessário para fornecer um fluxo de _Restaurar compras_ em seu aplicativo. Eu tenho isso funcionando, mas o que eu sinto parece um pouco hacky. Vou postar a solução aqui se eu conseguir limpar um pouco.

Fora isso, os testes até agora estão indo bem. Obrigado por isso @nochkin !

@nochkin , você poderia descrever como está instalando este fork em seu projeto de aplicativo?

Quando eu faço algo assim:

"react-native-iap": "github:nochkin/react-native-iap.git#amazon-iap"

O módulo não resolve porque espera que o js construído a partir do typescript esteja lá, mas a versão construída do projeto não existe no github. Ele só é criado para o pacote de lançamento do módulo. Na verdade instalando com o npm e a linha acima, ele nem baixa o index.ts, por causa do arquivo .npmignore, eu acho.

Isso faz sentido?

Muito obrigado pelo resumo sobre as implementações de métodos ausentes. Não implementei o "endConnection" porque não era necessário, mas concordo que precisa ter o método para fins de compatibilidade.
Vou pesquisar outros. Desculpe, demorou algum tempo, mas as coisas estão sendo esclarecidas agora e espero verificar/implementar em breve.

Eu instalei localmente, algo assim:
"react-native-iap": "../react-native-iap"
Embora o diretório "react-native-iap" seja simplesmente um clone do meu repositório.

Sem problemas!

Ok, sim, imaginei que a referência de arquivo local funcionaria, mas não torna o projeto muito portátil.

A solução alternativa que estou usando agora para referenciar meu próprio fork/branch é definir a dependência assim:

"react-native-iap": "github:curiousdustin/react-native-iap.git#curious-amazon-iap-ts"

E no meu ramo eu mudei a propriedade main em react-native-iap de package.json para index.ts em vez de .js . Eu também removi as entradas relacionadas ao TypeScript em .npmignore .

Isso funciona por enquanto, acho que porque minha configuração RN está construindo automaticamente módulos baseados em TS ...

Outra peça importante que parece estar faltando é o tratamento de erros.

A implementação da Amazon nunca executa nenhum código para emitir eventos de erro, como este da versão do Google:

sendEvent(reactContext, "purchase-error", error);

Isso significa que o purchaseErrorListener nunca será chamado.

Notado. Bom ponto. Obrigado.

Olá, parece que não houve nenhuma atividade sobre este problema recentemente. O problema foi corrigido ou ainda requer a atenção da comunidade? Esse problema pode ser fechado se nenhuma atividade adicional ocorrer. Você também pode rotular esta questão como "Para discussão" ou "Boa primeira edição" e eu a deixarei em aberto. Obrigado por suas contribuições.

Ressalto!

Seria ótimo ter o suporte da Amazon neste plugin também. Eu tenho usado a implementação da amazon feita por @nochkin para assinaturas de renovação automática e a coisa é bastante confiável. Seria incrível integrar este fork no repositório e ter uma base maior de contribuidores mantendo a implementação!

Haverá alguma notícia sobre isso mais tarde ou a ideia será descartada?

Não acho que vai cair. Acredito que o principal ponto de paralisação são alguns recursos ausentes (pequenos para meus casos de uso, mas talvez importantes para outros). Meu próprio aplicativo também está feliz com o estado atual.
As peças restantes do quebra-cabeça ainda estão no meu radar e comecei a trabalhar nelas. Infelizmente, a conclusão/teste demora mais do que o esperado devido a outras prioridades.

Sim, eu entendo a situação, vou ficar de olho nisso então!

Obrigado pela resposta e espero que você tenha um pouco mais de tempo para isso 🤣

Eu enviei um PR (#1134) baseado no seu ótimo trabalho @nochkin @curiousdustin ! 👏
Testes feitos, funcionando muito bem do nosso lado! Adicionaremos o suporte da Amazon ao react-native-iaphub quando o PR for mesclado.
É funcional, mas como @nochkin disse, ainda há algumas melhorias que podemos fazer no futuro.

Olá, parece que não houve nenhuma atividade sobre este problema recentemente. O problema foi corrigido ou ainda requer a atenção da comunidade? Esse problema pode ser fechado se nenhuma atividade adicional ocorrer. Você também pode rotular esta questão como "Para discussão" ou "Boa primeira edição" e eu a deixarei em aberto. Obrigado por suas contribuições.

Resolvido e agora parte da versão 5.0.0:
https://github.com/dooboolab/react-native-iap/releases/tag/5.0.0

Esta página foi útil?
0 / 5 - 0 avaliações