React-native-iap: [Android] getProducts retorna sempre um array vazio

Criado em 25 abr. 2018  ·  19Comentários  ·  Fonte: dooboolab/react-native-iap

Versão do react-native-iap

0,3,15

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

Android

Comportamento esperado

Obtenha todos os produtos

Comportamento real

Todos funcionam bem no iOS, mas getProducts retorna sempre um array vazio no android.
Acho que é um problema de configuração, porém segui cada passo ...

Upload de APK com permissão de faturamento / configuração da conta do comerciante / Criar na compra do aplicativo ...

🙏 help wanted

Comentários muito úteis

@vadermemo @martinberbesson Olá ~ Você poderia compartilhar seu código js de itemSkus ? Você configurou o código abaixo?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

Além disso, o teste do aplicativo de rascunho não é mais compatível. Por favor, consulte o guia . Certifique-se de publicar seu aplicativo no canal alfa ou beta.

Todos 19 comentários

Mesmo problema aqui

Meu trecho:

  RNIap.prepare().then(responsePrepare => {
    console.log("=============>responsePrepare:" + responsePrepare);
    RNIap.getProducts(itemSkus).then(response => {
        this.setState({ items  : response});
        console.log("=============>response:" + JSON.stringify(response));
    });
  });

Minha resposta em adb.logcat (Android)

208 28473 28524 I ReactNativeJS: Executando o aplicativo "testingIap" com appParams: {"rootTag": 11}. __DEV__ === verdadeiro, o aviso de nível de desenvolvimento está ATIVADO, as otimizações de desempenho estão DESATIVADAS
04-25 17: 04: 04.228 1140 1150 I AccountManagerService: getTypesVisibleToCaller: isPermitted? verdade
04-25 17: 04: 04.230 1140 2059 I AccountManagerService: getTypesVisibleToCaller: isPermitted? verdade
04-25 17: 04: 04.232 24842 24933 I Finsky: [4061] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Conta da primeira conta - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.233 28473 28473 D RNIapModule: cliente de faturamento pronto
04-25 17: 04: 04.303 28473 28524 I ReactNativeJS: =============> responsePrepare: null
04-25 17: 04: 04.308 28473 28524 I ReactNativeJS: =============> responsePrepare: null
04-25 17: 04: 04.328 1140 2107 I AccountManagerService: getTypesVisibleToCaller: isPermitted? verdade
04-25 17: 04: 04.330 1140 1896 I AccountManagerService: getTypesVisibleToCaller: isPermitted? verdade
04-25 17: 04: 04.339 1140 2095 I AccountManagerService: getTypesVisibleToCaller: isPermitted? verdade
04-25 17: 04: 04.340 1140 1679 I AccountManagerService: getTypesVisibleToCaller: isPermitted? verdade
04-25 17: 04: 04.343 24842 24854 I Finsky: [4020] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Conta da primeira conta - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.347 24842 24853 I Finsky: [4019] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Conta da primeira conta - [uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17: 04: 04.626 28473 28525 D RNIapModule: responseCode: 0
04-25 17: 04: 04.628 28473 28525 D RNIapModule: responseCode: 0
04-25 17: 04: 04.669 28473 28524 I ReactNativeJS: =============> resposta: []
04-25 17: 04: 04.693 28473 28524 I ReactNativeJS: =============> resposta: []

Mas com o iOS eu obtenho a matriz com o formato de dados bem

PD1 Recebo a recomendação de https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

PD2 "Ajude-me Obi Wan Kenobi, você é minha única esperança"

Snippet Package.json:
"dependências": {
"react": "16.3.1",
"reagir-nativo": "0.55.3",
"react-native-iap": "^ 0.3.18"
},

@vadermemo @martinberbesson Olá ~ Você poderia compartilhar seu código js de itemSkus ? Você configurou o código abaixo?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

Além disso, o teste do aplicativo de rascunho não é mais compatível. Por favor, consulte o guia . Certifique-se de publicar seu aplicativo no canal alfa ou beta.

Olá @dooboolab

Estes são meus dados
const itemSkus = Platform.select ({
ios: [
'com.iap.cart',
'com.iap.doublecoins'
],
android: [
'em dobro',
'cart_1500'
],
});

Atenciosamente

PD1 Meu aplicativo está na versão alfa, ainda não recebo os produtos.
PD2 Com outro npm, como react-native-billing, posso obter os produtos :(

@vadermemo isso soa muito ruim para mim .. desculpe por isso. Funciona bem no meu ambiente. Vou depurar mais amanhã e com certeza voltarei amanhã! Você também poderia tentar pegar a declaração e ver o que está aparecendo lá?

Acho que preciso de uma versão alpha ... Carregar um apk com permissão de faturamento não é suficiente

@dooboolab Bem, se existe algo que te ajude, talvez seja o próximo ponto:

quando coloquei a configuração em react-native-billing, coloquei no arquivo de recursos "string.xml" o parâmetro string name = "RNB_GOOGLE_PLAY_LICENSE_KEY"
mas em react-native-iap não consigo ver este parâmetro em ação.

O try-catch que você exigiu lança o próximo log:

  1. Alterar meus itensSkus

const itemSkus = Platform.select ({
ios: [
'Predictorcart_1500',
],
android: [
'Predictorcart_1500',
'android.test.purchased',
'android.test.canceled',
'android.test.refunded',
'android.test.item_unavailable',
],
});

  1. mudança em componentDidMount

    componente asyncDidMount () {
    tentar {
    aguardar RNIap.prepare ();
    aguarde this.getItems ();

    }
    pegar (errar) {
    console.warn (err.code, err.message);
    }
    }

  2. Alterar os dados de obtenção

    getProductDetails = async () => {
    tentar {
    const products = await RNIap.getProducts (itemSkus);
    console.log ('=======> Produtos ::::', produtos);
    this.setState ({productDetails: products});
    } catch (errar) {
    console.warn (err.code, err.message);
    }
    }

  3. Coloque um botão
    \

  4. Coloque o aplicativo no dispositivo
    react-native run-android --variant = release

6. Por fim, o log é o próximo:
04-26 12: 53: 11.335 16749 16759 I Finsky: [11707] com.google.android.finsky.billing.iab.ab.b (46): com.projectbundle: Conta da primeira conta - [uuAJBL1tLX2MAj69S-olEl331212]
04-26 12: 53: 11.401 226 1177 V audio_hw_primary: do_output_standby em
04-26 12: 53: 11.409 20362 20432 D RNIapModule: responseCode: 0
04-26 12: 53: 11.426 226 1177 W audio_hw_primary: do_output_standby.mode: 0
04-26 12: 53: 11.426 226 1177 V audio_hw_primary: do_output_standby in out
04-26 12: 53: 11.427 1140 2106 D PowerManagerService: releaseWakeLockInternal: lock = 87714678 [AudioMix], sinalizadores = 0x0, total_time = 3166ms
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: '=======> Produtos ::::', [{descrição: 'Descripción de muestra para el producto: android.test.canceled.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: título: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizado Preço: '$ 18,65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: tipo: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moeda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: preço: '18 0,65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.canceled'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {descrição: 'Descripción de muestra para el producto: android.test.item_unavailable.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: título: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizado Preço: '$ 18,65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: tipo: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moeda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: preço: '18 0,65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.item_unavailable'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {descrição: 'Descripción de muestra para el producto: android.test.purchased.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: título: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizadoPreço: '$ 18,65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: tipo: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moeda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: preço: '18 0,65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.purchased'},
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: {descrição: 'Descripción de muestra para el producto: android.test.refunded.',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: título: 'Título de muestra',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: localizado Preço: '$ 18,65',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: tipo: 'inapp',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: moeda: 'MXN',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: preço: '18 0,65 ',
04-26 12: 53: 11.444 20362 20431 I ReactNativeJS: productId: 'android.test.refunded'}]

@martinberbesson Tenho um aplicativo em versão alpha, mas não consigo obter os produtos. Acho que é outra coisa, talvez uma configuração em react-native-iap ou google console.

@martinberbesson @dooboolab Incredible !!

Fiz outro aplicativo com os mesmos passos e o aplicativo está funcionando em iOS e Android !!. Eu não posso acreditar.

Não sei qual é o motivo, mas acho que é algo configurado no código ou no console do google.

PD Eu estava esperando 5 horas para obter o itemSkus correto.
PD2 O app antigo não consegue itemsSkus mesmo com 24 horas.
PD3 @dooboolab Agora você pode dormir tranquilo. :)
PD4 Vou desenvolver o processo de compra, espero que seja fácil

Cumprimentos,

@vadermemo Que bom que está funcionando. Além disso, para o módulo iap mais recente para Android que é v3, você não precisa colocar mais nada em string.xml .

De acordo com o nº 124, acho que isso ainda está ocorrendo - pelo menos para aplicativos existentes, o que seria bom ter uma solução para isso também.

Para quem ainda está enfrentando esse problema, você deve primeiro ler https://stackoverflow.com/a/35132936/1374827 e garantir que atendeu a todos os requisitos descritos naquela postagem.

Se tudo estiver certo, verifique se você está chamando a função apropriada. Para mim, eu tinha um aplicativo em que estava usando apenas compras no aplicativo do Subscription, mas estava ligando por engano para RNIap.getProducts e, claro, recebendo de volta um array vazio. Em vez disso, tive que ligar para RNIap.getSubscriptions e as assinaturas foram devolvidas.

Na mesma linha, certifique-se de chamar RNIap.buySubscription se estiver comprando uma assinatura e RNIap.buyProduct se estiver comprando um produto.

Ok, depois de lutar com isso, meu problema acabou por ser minha inexperiência com o Android. Eu estava mexendo com o nome do pacote em dev e, embora funcionasse bem no dispositivo, o nome do pacote não sendo configurado perfeitamente é o motivo pelo qual estava retornando um array vazio. Depois de seguir esses passos e esses , tudo parece bom.

Também recebo array vazio,
E estou confuso com https://developer.android.com/google/play/billing/billing_testing#draft_apps doc, que preciso de conta de teste e adicionar testador, então, por favor, qualquer um pode me ajudar nisso.

Obrigado!

mesmo

@bharatidudhjiya @tmjordan Se vocês estão enfrentando problemas de configuração, gostaria que experimentassem o projeto android puro iap primeiro e ver se funciona corretamente. Isso também ajudaria você a entender melhor no iap sdk do Android.

@hyochan obrigado, é uma boa ideia. eu vou fazer isso

@tmjordan Este é antiga, mas isso poderá ajudá-lo a configuração básica.

obrigado cara @hyochan

Eu resolvi! Estou usando essas versões,

react-native-iap: ^4.3.0
react-native: 0.60.5

apenas faça assim

const itemSkus = Platform.select({
    ios: [
        '100coins' // just remove bundle id from product id
    ],
    android: [
        '100coins' // just remove bundle id from product id
    ]
});

Verifique se você tem o nome do pacote correto para seu aplicativo.

e caso você tenha alterado o comando react-native. ainda não funcionará.

Você tem que fazer isso manualmente e depois limpar o projeto usando ./gradlew clean na pasta android.

depois disso, experimente.

Happy Coding.

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

Questões relacionadas

chetstone picture chetstone  ·  4Comentários

sanilcgs picture sanilcgs  ·  3Comentários

makarsky picture makarsky  ·  3Comentários

coldfins picture coldfins  ·  3Comentários

Symyon picture Symyon  ·  5Comentários