React-native-iap: RNIap não está funcionando no Android, mas funciona no iOS com o mesmo código

Criado em 7 jul. 2020  ·  33Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap
4.4.7

Versão do react-native
0.60.6

Plataformas em que você enfrentou o erro (IOS ou Android ou ambos?)
Android

Comportamento esperado

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }

O comportamento esperado é uma lista de produtos extraídos do console de jogo por .getProducts () impressa no terminal

Comportamento real
A promessa não é devolvida. Erro 'o faturamento não está disponível'

Ambiente testado (emulador? Dispositivo real?)
Dispositivo real (aplicativo atualmente em produção)

Passos para reproduzir o comportamento
const itemSkus = Platform.select({ ios: [ 'com.example.1' ], android: [ 'com.example.1' ] });

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }
    this.purchaseUpdateSubscription = purchaseUpdatedListener(async (purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase) => {
        console.log('purchaseUpdatedListener', purchase);
        const receipt = purchase.transactionReceipt;
        if (receipt) {
            try {
                // if (Platform.OS === 'ios') {
                //   finishTransactionIOS(purchase.transactionId);
                // } else if (Platform.OS === 'android') {
                //   // If consumable (can be purchased again)
                //   consumePurchaseAndroid(purchase.purchaseToken);
                //   // If not consumable
                //   acknowledgePurchaseAndroid(purchase.purchaseToken);
                // }
                const ackResult = await finishTransaction(purchase);
            } catch (ackErr) {
                console.warn('ackErr', ackErr);
            }

            this.setState({ receipt }, () => this.goNext());
        }
    },
    );

    this.purchaseErrorSubscription = purchaseErrorListener(
        (error: PurchaseError) => {
            console.log('purchaseErrorListener', error);
        },
    );
}
componentWillUnmount() {
    if (this.purchaseUpdateSubscription) {
        this.purchaseUpdateSubscription.remove();
        this.purchaseUpdateSubscription = null;
    }
    if (this.purchaseErrorSubscription) {
        this.purchaseErrorSubscription.remove();
        this.purchaseErrorSubscription = null;
    }
}

Não consigo descobrir o porquê disso. Estou usando esse código exato para iOS e funciona perfeitamente. Configurei todos os produtos no console do jogo, adicionei permissão de faturamento ao arquivo de manifesto e vinculei o pacote IAP (estou usando o AndroidX, portanto, o pacote é vinculado automaticamente). Estou conectado à Play Store e tenho a versão mais recente dela, mas initConnection () ainda não está funcionando. Eu não sei mais o que fazer. Qualquer ajuda é muito apreciada! Obrigado por ler.

🙏 help wanted 🤖 android

Todos 33 comentários

Será que isso ajuda?

Será que isso ajuda?

Infelizmente não ajudou :(. Isso teria algo a ver com a migração do AndroidX? Por algum motivo, initConnection () não está funcionando e não sei o motivo.

@damialajogun Você descobriu o que estava errado? Eu tenho exatamente o mesmo erro e não entendo de onde veio ... initConnection () é indefinido.

@hyochan Você tem uma ideia?

@damialajogun Você descobriu o que estava errado? Eu tenho exatamente o mesmo erro e não entendo de onde veio ... initConnection () é indefinido.

Ei, não, ainda não descobri :(

Você adicionou <uses-permission android:name="com.android.vending.BILLING" /> ao seu arquivo AndroidManifest.xml?

@hakkikonu Sim, tenho

No meu loggin de erro, posso ver o mesmo erro ocorrendo para uma pequena parte dos meus usuários em vários países como EUA e Nova Zelândia. Parece ocorrer de forma muito inconsistente. Alguma ideia do que isso pode ser causado?

@ joris1995 Também tenho esse problema, uma pequena parte dos usuários não consegue fazer compras no aplicativo, o erro é "O sku não foi encontrado. Busque os produtos primeiro chamando getItems", mas o sku está presente porque no pop-up de compra I mostra o preço do objeto obtido de getProducts, getItems nem mesmo está na API

a versão mais recente do seu aplicativo da Google Play Store? Esse problema só acontece no seu telefone ou em todos os usuários.

Você também pode tentar fazer login na google play store com uma conta do gmail diferente.

certifique-se de limpar seus serviços do Google Play e arquivos de cache do aplicativo da loja do Google Play em settings / applications / google play em seu dispositivo.

Todos os usuários / contas / telefones ...

Para mim, é apenas uma parte dos meus usuários. Não parece haver nenhum fator consistente, como país, versão do sistema operacional ou fabricante do dispositivo. No BugSnag, ele mostra o erro 'Billing is not available. Isso pode ser um problema com o seu dispositivo ou a Play Store pode estar fora do ar '. O que pode ser causado por isso?

Você precisa enviar uma versão beta antes de poder carregar as compras no aplicativo e você só pode depurá-lo usando uma versão de lançamento.

beta não é obrigatório. também alfa fechado está ok

Eu também tenho o mesmo problema, até enviei a versão beta e fui aprovado há 4 dias

Se eu entendi o que você está dizendo, é que initConnection () não funciona em teste, mas em beta?

@Kamsou Sim, embora seja principalmente “getProducts ()” que não funciona em uma compilação de depuração.

Mais informações: https://medium.com/bleeding-edge/testing-in-app-purchases-on-android-a6de74f78878

O que está acontecendo comigo é que, quando quero ver se a compra foi feita, eu:
RNIap.getPurchaseHistory ()
No iOS, tudo funciona normalmente.
Mas no Android, tenho este único erro: "Erro: E_IAP_NOT_AVAILABLE"
_Estou no meu emulador local_

`` ` const initilizeIAPConnection = async () => { await initConnection() .then(async (connection) => { consumeAllItemsAndroid(); await getItems(); console.log('IAP result', connection); }) .catch((error) => { console.warn( IAP ERROR $ {error.code}`, error.message);
});
};

const getItems = async () => {
Experimente {
const subscriptions = await getSubscriptions (itemSkus);
console.log ('Produtos', assinaturas);
setSubscriptions (assinaturas);
} catch (errar) {
console.warn (err.code, err.message);
}
};
useEffect (() => {
initilizeIAPConnection ();
}, []);

`` ` I just removed await for consumeAllItemsAndroid (); `e começou a funcionar

@rizshivalli Fico feliz em saber que está funcionando para você. Infelizmente, ainda não funciona para mim quando eu removo a espera de consumeAllItemsAndroid() . Meu problema é que initConnection() não funciona. Como você consegue fazer essa parte funcionar?

@damialajogun eu removi try catch e adicionei .then e .catch

@rizshivalli Tentei isso e ainda não está funcionando para mim :(. Desculpe por todas as perguntas, mas você consegue ver os 'produtos' de baixo impressos no terminal? Acho que o problema com o meu é que ele não está puxando todos os meus produtos configurados no console de jogo, embora eu os tenha configurado e estejam ativos.
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

@damialajogun Sim, está funcionando. Também consigo testar pagamentos no Android. Você lançou a versão alfa ou beta no Android?

@rizshivalli Não é alfa ou beta, mas eu o

Olá, @rizshivalli, pergunta rápida - seu aplicativo está listado como gratuito ou pago no Google Play? O meu é gratuito, mas com compras no aplicativo (os usuários podem baixar o aplicativo gratuitamente e optar por comprar não consumíveis no aplicativo), mas agora estou me perguntando se ele deve ser listado como pago para que o IAP funcione.

@damialajogun é listado como gratuito porque os usuários não precisam pagar para instalar o aplicativo

Bom dia a todos,
Algum de vocês tem um aplicativo Android que funciona bem com pagamentos?
Porque comigo o initConnection não funciona.

Sim, usando a versão mais recente. Eu não acho que initConnection faz nada na verdade, ele apenas inicia a conexão, então você precisa buscar os produtos

Alguma solução para isso?
Para mim, o Android trava antes de iniciar o aplicativo. Mas Ios funciona conforme o esperado.
Por favor ajude

Estou enfrentando (provavelmente) o mesmo problema.

Adicionei mais duas assinaturas ao meu aplicativo, mas apenas a antiga está funcionando.
Quando tento aguardar RNIap.getSubscriptions (), recebo "o Google está indicando que temos um problema de conexão com o pagamento"

Quando tento RNIap.requestSubscription (subId, true), recebo "O sku não foi encontrado".

Skus são registrados no Google Play e os ids estão corretos, verifique isso. Testado em emulador e dispositivo real, usando modos de depuração e liberação.

Qualquer ideia?

Olá, parece que não houve nenhuma atividade sobre este problema recentemente. O problema foi corrigido ou ainda requer a atenção da comunidade? Este problema pode ser resolvido se nenhuma outra atividade ocorrer. Você também pode rotular esse problema como "Para discussão" ou "Bom primeiro problema" e eu o deixarei em aberto. Obrigado por suas contribuições.

Olá, parece que não houve nenhuma atividade sobre este problema recentemente. O problema foi corrigido ou ainda requer a atenção da comunidade? Este problema pode ser resolvido se nenhuma outra atividade ocorrer. Você também pode rotular esse problema como "Para discussão" ou "Bom primeiro problema" e eu o deixarei em aberto. Obrigado por suas contribuições.

ainda requer atenção

Podemos fechar!

Le sam. 19 de dezembro 2020 à 11:03, damialajogun [email protected] a
écrit:

Olá, parece que não houve nenhuma atividade neste problema
recentemente. O problema foi corrigido ou ainda requer o
atenção da comunidade? Este problema pode ser resolvido se não houver mais atividades
ocorre. Você também pode rotular esse problema como "Para discussão" ou "Bom primeiro
questão "e vou deixar em aberto. Obrigado por suas contribuições.

ainda requer atenção

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922 ,
ou cancelar
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ
.

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