React-native-iap: 购买订阅忽略用户反馈

创建于 2018-10-06  ·  32评论  ·  资料来源: dooboolab/react-native-iap

react-native-iap 的版本

2.3.0

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

安卓

预期行为

let sub = await RNIApp.buySubscription("some");

应该等待用户在应用内支付模式上按下购买

实际行为

我无法检查用户是否接受订阅,因为在执行以下操作时:

let sub = await RNIApp.buySubscription("some");
如果(子){
做一些事情..
}

if(sub) 块在弹出窗口打开后立即执行,但用户仍然不接受订阅

测试环境(模拟器?真实设备?)

真机

有任何想法吗?

还有其他方法,如 getAvailablePurchases 也返回一个承诺并且工作正常

问题是 buySubscription 应该返回用户输入的回调,而不是

⌚️ regression 📱 iOS

最有用的评论

我们目前正在处理这个问题。 另外,任何面临这个问题的人,在实际拨打buySubscription之前,您是否拨打过getSubscriptions buySubscription

所有32条评论

我使用的是 RN 57,订阅也完成了,我可以在 Playstore 上检查购买是否正常,但是 buySubscription 承诺返回未定义

有什么帮助吗?

好吧,我降级到 2.2.2 并且可以工作.. 所以我想你们错过了新版本中的一些东西

@marcosmartinez7抱歉2.3.1吗?

你好谢谢!

我现在没有时间,但我会的

@marcosmartinez7谢谢,请回来。

@doobolab问题也存在于 iOS 上。 尝试了2.3.12.3.2 。 正如@marcosmartinez7所提到的2.2.2工作正常

我认为它在2.3.3是固定的。 当这种情况仍然发生时,请重新打开。

@dooboolab对不起,刚刚安装并重新链接2.3.5await RNIap.buySubscription(iapProductId) undefined在 iOS 上仍然立即返回

@Gaia-Nutrition 我认为您的问题有所不同,因为ios代码没有改变。 您可以尝试取消链接并重新链接吗?

@doobolab我尝试链接和取消链接。 每当我切换回2.2.2它就会重新开始工作。 但我明天再检查一下。 也许我会尝试手动安装本机组件

@dooboolab好的,我现在手动链接新的2.3.6版本。 仍然得到undefined 。 我很乐意帮助解决这个问题。 让我知道我能做些什么来帮忙!

有人可以证实这一点吗? 这不应该发生,尤其是在 ios 中。

@doobolab我可以确认在 iOS 版本 2.3.6 上不执行承诺,但版本 2.2.2 可以(使用 iPhone 5 设备,React Native 0.56)

我也在 2.3.7 上遇到了这个问题。 当我尝试使用await ,立即调用下一行而不是等待承诺,当我使用RNIap.buySubscription(subId).then(purchase => {})它崩溃并出现错误无法读取未定义的属性

我们目前正在处理这个问题。 另外,任何面临这个问题的人,在实际拨打buySubscription之前,您是否拨打过getSubscriptions buySubscription

我刚刚在 RNExample 应用程序中测试了购买。 我使用 buyProductWithoutFinishTransaction() 方法购买了订阅。
我建议像 RNExample 一样进行测试。 并更新 Xcode,将构建设置设置为“旧版”.. 我猜 Xcode 中的构建过程更改了此更新。
并使用新制作的沙盒测试仪。

@JJMoon非常有趣。 buyProductWithoutFinishTransaction()finishTransaction()适用于2.3.7buySubscription()直接仍然失败!

@Gaia-Nutrition 好的。 然后使用buyProductWithoutFinishTransactionfinishTransaction而不是buySubscription 。 购买行为完全相同。

@Gaia-Nutrition 你能试试2.3.8吗? 另外,你有没有在buySubscription之前打电话给getSubscriptions buySubscription

@dooboolab 2.3.8使用buySubscription 2.3.8仍然失败,并且再次失败:是的,我之前确实调用过getSubscriptions 。 我不认为buyProductWithoutFinishTransaction()会起作用。

我在 iOS 设备中以沙盒模式测试了 buySubscription。
它成功了,但它显示了一些错误消息。
并且自动续订订阅不发出收据。
我建议使用buyProductWithoutFinishTransaction 和finishTransaction 而不是buySubscription。
目前我没有用于测试的设备,我稍后会跟踪这个问题。

感觉这只是目前在iOS 。 我对吗?

@doobolab不,也发生在 Android 上。 该函数甚至在调用 buyItemByType 中的第一行之前就返回 undefined 。

@doobolab问题是在 index.js:105 中引起的。 您应该将行更改为类似

export const buySubscription = (sku, oldSku, prorationMode) => Platform.select({ ios: () => RNIapIos.buyProduct(sku), android: () => RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, -1), })();
(我知道这忽略了 prorationMode)

但是订阅成功后出现了一个问题:

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.dooboolab.RNIap.RNIapModule$11.onPurchasesUpdated(RNIapModule.java:427) at com.android.billingclient.api.BillingClientImpl$1.onReceive(BillingClientImpl.java:136) at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303) at com.android.billingclient.api.LocalBroadcastManager.access$000(LocalBroadcastManager.java:44) at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:114) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

@mfentross你在哪个版本的react-native-iapRNIapModule.java:427有空行。 请重试最近的一次。

我的错:我编辑了几行。 但主要问题的解决方法是将buySubscription 函数编辑为

`
export const buySubscription = (sku, oldSku, prorationMode) =>
平台选择({
ios: () => RNIapIos.buyProduct(sku),
机器人:()=> {
if (!prorationMode) prorationMode = -1;
return RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, prorationMode);
},
})();

`

有一些不必要的括号。

@mfentross我不好。 我错过了return声明。 我刚刚发布到2.3.11 。 那么现在安卓能用了吗?

@doobolab谢谢,现在可以用了👍

@mfentross @JJMoon好的! 所以我们只剩下 iOS 问题了。

@JJMoon他说如果用asyncawait包装方法,它就可以工作。 但是,我不太确定这怎么可能。 用asyncawait包装在返回值上是多余的,不是吗?

我已经发布到2.3.13 。 希望大家试试这个。

当这种情况仍然发生时,请重新打开。 谢谢大家的帮助。

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