React-native-iap: [Android] getProducts始终返回一个空数组

创建于 2018-04-25  ·  19评论  ·  资料来源: dooboolab/react-native-iap

版本的react-native-iap

0.3.15

您遇到错误的平台(IOS或Android还是两者兼有?)

安卓系统

预期行为

获取所有产品

实际行为

在iOS上一切正常,但在Android上getProducts始终返回一个空数组。
我认为这是一个配置问题,但是我遵循了每个步骤...

带有结算权限/已设置商家帐户/在应用内购买创建APK上传的APK ...

🙏 help wanted

最有用的评论

@vadermemo @martinberbesson嗨〜您能以itemSkus共享您的js代码吗? 您是否按照以下代码进行设置?

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

此外,不再支持草稿应用测试。 请参考指南。 确保将您的应用发布到Alpha或Beta频道。

所有19条评论

这里同样的问题

我的片段:

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

我对adb.logcat的回应(Android)

208 28473 28524 I ReactNativeJS:运行带有appParams的应用程序“ testingIap”:{“ rootTag”:11}。 __DEV__ === true,开发级别警告为ON,性能优化为OFF
04-25 17:04:04.228 1140 1150 I AccountManagerService:getTypesVisibleToCaller:isPermitted? 真正
04-25 17:04:04.230 1140 2059 I AccountManagerService:getTypesVisibleToCaller:isPermitted? 真正
04-25 17:04:04.232 24842 24933 I Finsky:[4061] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:第一个帐户的帐户-[uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17:04:04.233 28473 28473 D RNIapModule:计费客户端已准备好
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我AccountManagerService:getTypesVisibleToCaller:isPermitted? 真正
04-25 17:04:04.330 1140 1896我AccountManagerService:getTypesVisibleToCaller:isPermitted? 真正
04-25 17:04:04.339 1140 2095 I AccountManagerService:getTypesVisibleToCaller:isPermitted? 真正
04-25 17:04:04.340 1140 1679 I AccountManagerService:getTypesVisibleToCaller:isPermitted? 真正
04-25 17:04:04.343 24842 24854 I Finsky:[4020] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:第一个帐户的帐户-[uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17:04:04.347 24842 24853 I Finsky:[4019] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:第一个帐户的帐户-[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:=============>响应:[]
04-25 17:04:04.693 28473 28524 I ReactNativeJS:=============>响应:[]

但是使用iOS,我得到了数据格式良好的数组。

PD1我从https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67获得了建议

PD2“请帮助我Obi Wan Kenobi,您是我唯一的希望”

Package.json代码段:
“依赖关系”:{
“ react”:“ 16.3.1”,
“ react-native”:“ 0.55.3”,
“ react-native-iap”:“ ^ 0.3.18”
},

@vadermemo @martinberbesson嗨〜您能以itemSkus共享您的js代码吗? 您是否按照以下代码进行设置?

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

此外,不再支持草稿应用测试。 请参考指南。 确保将您的应用发布到Alpha或Beta频道。

@dooboolab

这是我的资料
const itemSkus = Platform.select({
ios:[
'com.iap.cart',
'com.iap.doublecoins'
],
安卓: [
'双倍的',
'cart_1500'
],
});

最好的祝福

PD1我的应用程序是alfa版本,甚至没有得到产品。
PD2与其他npm一样,像react-native-billing一样,我可以获得产品:(

@vadermemo这个肥皂泡对我真的很不好。 在我的环境中效果很好。 我将调试更多tommorow,然后一定要返回tommorow! 您还可以尝试捕捉该语句并查看其中出现了什么吗?

我认为我需要发布Alpha版本...上载具有结算权限的apk是不够的

@dooboolab好吧,如果对您有帮助,那么下一步可能是:

当我将配置放在react-native-billing上时,我将资源字符串“ =“ RNB_GOOGLE_PLAY_LICENSE_KEY”放入了资源文件“ string.xml”
但在react-native-iap中,我看不到此参数的作用。

您需要的try-catch引发下一个日志:

  1. 更改我的项目

const itemSkus = Platform.select({
ios:[
'predictorcart_1500',
],
安卓: [
'predictorcart_1500',
'android.test.purchased',
'android.test.canceled',
“ android.test.refunded”,
'android.test.item_unavailable',
],
});

  1. 更改componentDidMount

    异步componentDidMount(){
    尝试{
    等待RNIap.prepare();
    等待this.getItems();

    }
    抓住(错误){
    console.warn(err.code,err.message);
    }
    }

  2. 更改获取数据

    getProductDetails = async()=> {
    尝试{
    const products =等待RNIap.getProducts(itemSkus);
    console.log('=======> Products ::::',products);
    this.setState({productDetails:products});
    } catch(err){
    console.warn(err.code,err.message);
    }
    }

  3. 放个按钮
    \

  4. 将应用程式放到装置上
    react-native运行android --variant = release

6.最后是下一个日志:
04-26 12:53:11.335 16749 16759 I Finsky:[11707] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:第一个帐户的帐户-[uuAJBL1tLX2MAj69S-olEl331212]
04-26 12:53:11.401 226 1177 V audio_hw_primary:do_output_standby输入
04-26 12:53:11.409 20362 20432 D RNIapModule:响应代码:0
04-26 12:53:11.426 226 1177 W音频_硬件_主要:do_output_standby.mode:0
04-26 12:53:11.426 226 1177 V audio_hw_primary:do_output_standby输入输出
04-26 12:53:11.427 1140 2106 D PowerManagerService:releaseWakeLockInternal:lock = 87714678 [AudioMix],标志= 0x0,total_time = 3166ms
04-26 12:53:11.444 20362 20431 I ReactNativeJS:'=======> Products ::::',[{描述:'产品描述:android.test.canceled。',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:title:'Títulode muestra',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice:'$ 18.65',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:类型:'inapp',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:货币:'MXN',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:价格:'18 .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:{说明:“产品描述:android.test.item_unavailable。”,
04-26 12:53:11.444 20362 20431 I ReactNativeJS:title:'Títulode muestra',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice:'$ 18.65',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:类型:'inapp',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:货币:'MXN',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:价格:'18 .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:{说明:“产品描述:android.test.purchased。”,
04-26 12:53:11.444 20362 20431 I ReactNativeJS:title:'Títulode muestra',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice:'$ 18.65',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:类型:'inapp',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:货币:'MXN',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:价格:'18 .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:{说明:“产品描述:android.test.refunded。”,
04-26 12:53:11.444 20362 20431 I ReactNativeJS:title:'Títulode muestra',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice:'$ 18.65',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:类型:'inapp',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:货币:'MXN',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:价格:'18 .65',
04-26 12:53:11.444 20362 20431 I ReactNativeJS:productId:'android.test.refunded'}]

@martinberbesson我有一个Alpha版本的应用程序,即使我无法获得产品也是如此。 我认为是另一回事,也许是react-native-iap或Google控制台中的配置。

@martinberbesson @dooboolab不可思议!

我用相同的步骤制作了另一个应用程序,该应用程序可在iOS和Android上运行!! 我不敢相信。

我不知道是什么原因,但是我认为这是在代码或Google控制台上进行的配置。

PD我等了5个小时才得到正确的itemSkus。
PD2即使24小时,旧应用也无法获得itemsSkus。
PD3 @dooboolab现在您可以安静地睡觉了。 :)
PD4我将制定购买流程,希望这很容易

最好的祝福,

@vadermemo很高兴它正在工作。 另外,对于较新的适用于Android的v3的Iap模块,您无需在string.xml放入任何其他内容。

Per#124我认为这种情况仍在发生-至少对于现有的应用程序,最好也为此提供解决方案。

对于仍然遇到此问题的任何人,您应该首先阅读https://stackoverflow.com/a/35132936/1374827并确保您满足该帖子中概述的所有要求。

如果一切正常,请检查您是否正在调用适当的函数。 对我来说,我有一个应用程序,当时我只使用订阅应用程序内购买功能,但我误打了RNIap.getProducts并且当然返回了一个空数组。 我不得不打电话给RNIap.getSubscriptions ,然后返回了订阅。

同样,如果要购买订阅,请确保致电RNIap.buySubscription如果要购买产品,请致电RNIap.buyProduct

好吧,在摔跤之后,我的问题原来是我对android的经验不足。 我一直在搞乱dev中的程序包名称,尽管它在设备上运行良好,但程序包名称设置不完善就是为什么它返回一个空数组。 下面经过这些步骤这些这一切都看起来很不错。

我也得到空数组,
而且我对https://developer.android.com/google/play/billing/billing_testing#draft_apps文档感到困惑,我需要测试帐户并添加测试人员,所以请有人可以帮助我。

谢谢!

相同的

@bharatidudhjiya @tmjordan如果你们面临配置问题,我希望您先尝试纯android iap项目,看看它是否正常工作。 这也将帮助您更好地理解android的iap sdk。

@hyochan谢谢,这是个好主意。 我去做

@tmjordan这是很老,但是可能会帮助你的基本设置。

谢谢你@hyochan

我解决了! 我正在使用这些版本,

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

就这样做

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

确保您具有正确的应用程序包名称。

并且如果您已经从react-native命令更改了它。 它仍然无法正常工作。

您必须手动执行,然后在android文件夹中使用./gradlew clean清理项目。

之后,尝试一下。

编码愉快。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

bakedbean picture bakedbean  ·  5评论

fergalindez picture fergalindez  ·  5评论

ramondelmondo picture ramondelmondo  ·  4评论

coldfins picture coldfins  ·  3评论

jvandenaardweg picture jvandenaardweg  ·  4评论