我开发了一款免费但提供应用内购买的游戏。这在测试中完美无缺,但由于游戏已经发布(首次发布),尝试购买任何IAP都会导致崩溃。我使用Ray Wenderlich IAP tutorial作为此代码的基础。
在模拟器上运行时,尝试获取产品列表时会遇到 - didFailWithError
处理程序,错误代码为2
。我甚至无法用模拟器测试IAP。
在手机上运行实际生产应用程序(来自商店)时,崩溃日志会说明以下内容:
0 CoreFoundation 0x2e9cfe8b 0x2e8fb000 + 872075
1 libobjc.A.dylib 0x38ccd6c7 objc_exception_throw + 38
2 CoreFoundation 0x2e9cfdcd 0x2e8fb000 + 871885
3 StoreKit 0x310e69d9 0x310e4000 + 10713
4 60 Seconds 0x000b77df -[IAPHelper buyProduct:] (IAPHelper.m:53)
5 60 Seconds 0x000b7091 -[UpgradeViewController Buy5000Squares] (UpgradeViewController.m:199)
6 UIKit 0x3118a55f 0x3114a000 + 263519
所以我知道它正确地接收了产品列表,并且当对ITC进行双重检查时,名称是正确的(事实上我知道它们是因为我总是使用商店发送的内容填充我的内部产品代码)
所以真正的问题是发生了什么?为什么它会崩溃,为什么我的模拟器甚至不让我试着测试呢?
一些有用的代码
-(void)Buy5000Squares
{
if (![SKPaymentQueue canMakePayments])
{
// show alert box
return;
}
[[SecondsIAPHelper sharedInstance] buyProduct:squares5000Product];
}
- (void)buyProduct:(SKProduct *)product {
NSLog(@"Buying %@...", product.productIdentifier);
SKPayment * payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
修改
事实证明,根据这个question / answer XCode 5阻止在模拟器中测试应用内购买(我在XCode 5的GM上开发了这个,所以很惊讶就是这种情况)但它至少提供了解释那部分。仍然不确定为什么它不能在我的设备上工作
答案 0 :(得分:1)
事实证明这个问题是因为我没有在iTunes连接中正确签署我的IAP合同/银行/税务信息。我之前只创建了付费应用,因此没有设置此信息。
一旦我正确签名,它就会在12-24小时后开始工作