2.2.2
(因为iOS上的任何较新版本由于#279而失败)
的iOS
没有错误应该抛出。 购买成功(正在生产)
Promise返回E_UNKNOWN
错误
我们的Sentry.io错误跟踪报告此:
{"framesToPop":1,"code":"E_UNKNOWN","nativeStackIOS":["0 LuCoaching 0x000000010062f6fc LuCoaching + 1996540","1 LuCoaching 0x000000010060aa98 LuCoaching + 1845912","2 LuCoaching 0x00000001007cad98 __cxa_throw + 438380","3 LuCoaching 0x00000001007cc62c __cxa_throw + 444672","4 libdispatch.dylib 0x000000019d078484 <redacted> + 16","5 libdispatch.dylib 0x000000019d025610 <redacted> + 56","6 LuCoaching 0x00000001007cc46c __cxa_throw + 444224","7 libdispatch.dylib 0x000000019d0776c8 <redacted> + 24","8 libdispatch.dylib 0x000000019d078484 <redacted> + 16","9 libdispatch.dylib 0x000000019d0249ec <redacted> + 1068","10 CoreFoundation 0x000000019d5ce1bc <redacted> + 12","11 CoreFoundation 0x000000019d5c9084 <redacted> + 1964","12 CoreFoundation 0x000000019d5c85b8 CFRunLoopRunSpecific + 436","13 GraphicsServices 0x000000019f83c584 GSEventRunModal + 100","14 UIKitCore 0x00000001ca444bc8 UIApplicationMain + 212","15 LuCoaching 0x000000010044d110 LuCoaching + 20752","16 libdyld.dylib 0x000000019d088b94 <redacted> + 4"],"userInfo":{"NSLocalizedDescription":"Verbindung mit iTunes Store nicht möglich"},"domain":"SKErrorDomain","line":26,"column":1877,"sourceURL":"/var/containers/Bundle/Application/818C8439-E250-42E8-AD57-EC4FB5FE5547/LuCoaching.app/main.jsbundle"}
真实设备。 现场客户。 非常谦虚失败
使用Sandbox用户测试此过程时,无法重现该错误。
@ Gaia-Nutrition您会检查这个旧问题吗? 原因可能是相同的。
https://github.com/dooboolab/react-native-iap/issues/201
@JJMoon在#201中,错误是E_DEVELOPER_ERROR
,是由于未使用getSubscriptions()
填充validProducts
列表引起的。
但是,我在尝试执行结帐之前就调用了该函数,并且还会收到其他错误。
但是现在我考虑了。 可能发生在getSubscriptions()
和buySubscription()
通话之间有相当长的时间延迟,这是由用户重新考虑他/她是否要执行购买引起的。 这可能是个问题吗? 同时,该应用可能已被后台运行。
编辑:但是再次购买成功执行,因此问题必须是正在处理应用商店响应的地方
你好,
与“ buyProductWithoutFinishTransaction”或“ buyProduct”具有相同的问题行为。
版本2.2.1
返回的存储为{
"framesToPop": 1,
"code": "E_UNKNOWN",
"nativeStackIOS": [...],
"userInfo": {
"NSLocalizedDescription": "Connexion à l’iTunes Store impossible"
},
"domain": "SKErrorDomain",
"line": 16,
"column": 1599,
"sourceURL": "..."
}
我们更新了模块,因为我们在生产时使用以前的版本重现了该错误。
有趣的是,发生这种情况时,还原购买对我的用户也失败。 它仅发生在大约1%的iOS用户中。
@fierysolid同样,在iOS上购买失败的用户大约占5%。 当客户再次尝试购买时,他会弹出恢复购买的提示。
嗨,大家好。 希望今天我们的新版本( 2.3.15
。 我已经注意到,纯粹在ios中使用NSDictionary
并不安全,可能会导致意外行为。 我已修复此问题,希望现在在所有设备中都能正常运行。 请测试一下。
当仍然遇到问题时,请重新打开。
@dooboolab
当将buySubscription()
与iPhone 6S的沙盒测试器用户一起使用时,我仍然遇到此问题。
{"userInfo":{"NSLocalizedDescription":"Cannot connect to iTunes Store"}}
@danrevah所以您尝试了我们的新版本2.3.15
吗? @JJMoon您
@dooboolab是,我正在使用该版本。
@danrevah请尝试2.3.16
。
@dooboolab它曾经工作过一次,但是当我再次尝试时,我一直收到此错误。 (用于2.3.17版)
@JJMoon您对此有任何线索吗? 他正在使用iPhone6S
我已经重新打开了问题。 cc @JJMoon
如果有更多的人对该问题投赞成票,我们将更加努力地深入研究。
@danrevah希望您参考此文档。
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267 -CH7-SW6
要在沙盒模式下测试订阅,您需要在一段时间后重新购买订阅。
您可能需要取消它才能再次购买。
苹果沙盒服务器有一些奇怪的反应,这使得测试更加困难。
如果@JJMoon问题是问题,我们可以再次关闭它。 如果您仍然需要帮助,请重新打开。 @danrevah
@JJMoon我也遇到过同样的问题。 有什么办法吗? buySubscription引发异常,但扣除了付款。 我需要具有结果数据来存储和验证它们。
@hyochans
+1我有同样的问题
也尝试在buySubscription
使用addAdditionalSuccessPurchaseListenerIOS 。 这与#307中的问题相同。
也尝试在
buySubscription
使用addAdditionalSuccessPurchaseListenerIOS 。 这与#307中的问题相同。
有人已经在生产中使用了吗?
@hyochan ,我尝试这样做,但没有成功。
if (subscription && subscription.success) {
this.props.subscribe(subscription.result);
} else {
if (Platform.OS === 'ios') {
const sub = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
this.props.subscribe(purchase); // -> This code is never fired
sub.remove();
});
}
}
@cbfranca请遵循实际代码。 您甚至都没有使用promises
。 承诺被拒绝后,您应该听addAdditionalSuccessPurchaseListenerIOS
。
另外,您不需要额外的Platform.OS === 'ios'
。
@hyochan
抱歉,我的无知,但我认为我的理解不正确。 我遵循了示例的相同基础,适合我的情况。 我创建了一个抽象,使用async / await处理此承诺。 此订阅对象由我的抽象返回。
static purchaseSubscription(newSubscriptionID, currentSubscriptionID) {
if (Platform.OS === 'ios') {
const purchaseResult = KinvoBilling.purchaseSubscriptionIOS(newSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.purchaseSubscriptionANDROID(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionANDROID = async (newSubscriptionID, currentSubscriptionID) => {
const hasCurrentSubscription = currentSubscriptionID !== null;
if (hasCurrentSubscription) {
const purchaseResult = KinvoBilling.updateSubscription(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.buySubscription(newSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionIOS = async (subscriptionID) => {
await KinvoBilling.getSubscriptions();
const purchaseResult = await KinvoBilling.buySubscription(subscriptionID);
return purchaseResult;
}
@cbfranca
```
静态purchaseSubscriptionIOS =异步(subscriptionID)=> {
等待KinvoBilling.getSubscriptions();
尝试{
const buyResult =等待KinvoBilling.buySubscription(subscriptionID);
} catch(err){
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async(purchase)=> {
// dooboolab =>在此处检查呼叫。
this.setState({收据:purchase.transactionReceipt},()=> this.goToNext());
subscription.remove();
}
}
返回purchaseResult;
}
``
检查上面的代码。 我认为您需要重构代码以适应其生命周期。
@hyochan不适合我。
我的测试场景是:
另一个疑问:我是否也必须在订阅中使用finishTransaction()?
我也看到了这个错误。 我想我知道一种复制它的方法。
^ 2.4.1
https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz
iOS,在真实设备上的TestFlight中进行测试时。
我注意到,当在我的应用程序中调用任何RNIap函数时,iOS会要求我输入以前的iTunes / App Store用户的密码(此后我已注销并通过iOS设置替换了该密码)。 我在网上某个地方读到,这是一个时不时地困扰iPhone用户的问题:有时使用一个iTunes帐户购买了一个应用程序,然后将手机切换到了一个新的iTunes帐户,但是该应用程序继续要求输入密码。旧的iTunes帐户。
我试图删除我的应用程序(和TestFlight),并使用新的App Store用户重新安装,但无济于事。 我可以摆脱这种行为的唯一方法是擦拭设备。 完成此操作后,我将无法重现此错误。
{
code: E_UNKNOWN,
column: 1565,
domain: NSURLErrorDomain,
framesToPop: 1,
line: 20,
nativeStackIOS: [...],
sourceURL: ...,
userInfo: {
_kCFStreamErrorCodeKey: -4,
_kCFStreamErrorDomainKey: 4,
NSErrorFailingURLKey: None,
NSErrorFailingURLStringKey: https://p100-sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppBuy,
NSLocalizedDescription: Cannot connect to iTunes Store,
NSUnderlyingError: {
code: "-1005",
domain: "kCFErrorDomainCFNetwork",
message: "underlying error",
nativeStackIOS: [...],
userInfo:{"NSErrorPeerAddressKey":null,"_kCFStreamErrorCodeKey":-4,"_kCFStreamErrorDomainKey":4}
}
}
}
希望这对某人有帮助!
@hyochan
在尝试了许多事情之后,我仍然遇到相同的问题,甚至更多。 在下面的代码中,RNIap.buySubscription(sku)返回未定义。 拜托,有人解决了吗?
```
静态purchaseSubscriptionIOS =异步(subscriptionID)=> {
等待KinvoBilling.getSubscriptions();
try {
const purchaseResult = await RNIap.buySubscription(subscriptionID);
return createResponse(true, purchaseResult);
} catch (error) {
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
// dooboolab => check the call here.
console.tron.log('--- ERROR ----');
console.tron.log(error);
console.tron.log('--- PURCHASE ----');
console.tron.log(purchase);
const result = purchase;
subscription.remove();
console.tron.log(result);
if (result) {
return createResponse(true, result);
}
return createResponse(false, result);
});
}
};
```
:+1:我们遇到的问题很好。 目前,大约有10%的用户正在使用这种方法。 我们将尝试添加此侦听器,但我认为最终这不是一个很好的解决方案。 @hyochan在抛出异常的情况下,我们是否可以通过任何方式获取更多详细信息,或者这是StoreKit API的标准响应? 在每种错误情况下,即使购买成功,该消息似乎仍为“无法连接到iTunes Store”。
我们在3.4.6中有一个非常相似的问题:第一次购买尝试失败,并导致E_UNKOWN
,重试成功。 但是,对我们来说,这发生在buyProduct
而不是buySubscription
。 @hyochan这可能仍然是相同的根本原因吗?
你好! 致电RNIap.requestSubscription()后,我遇到同样的问题,但未得到确定的结果,但付款成功,信用卡已收费。
该用户摆脱困境的唯一方法是恢复购买。
有没有人解决这个问题? 我正在使用3.5.9版
最有用的评论
:+1:我们遇到的问题很好。 目前,大约有10%的用户正在使用这种方法。 我们将尝试添加此侦听器,但我认为最终这不是一个很好的解决方案。 @hyochan在抛出异常的情况下,我们是否可以通过任何方式获取更多详细信息,或者这是StoreKit API的标准响应? 在每种错误情况下,即使购买成功,该消息似乎仍为“无法连接到iTunes Store”。