iphone - 应用内购买在生产应用中失败

标签 iphone ios objective-c in-app-purchase storekit

我开发了一款免费游戏,但提供应用内购买。这在测试时工作得很好,但自从游戏发布(第一个初始版本)以来,尝试购买任何 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 上开发了这个,对于这种情况感到非常惊讶),但它至少提供了该部分的解释。但仍然不确定为什么它不能在我的设备上运行

最佳答案

事实证明,问题是因为我没有在 iTunes connect 中正确签署我的 IAP 契约(Contract)/银行/税务信息。我之前只创建过付费应用程序,因此没有设置此信息。

一旦我正确签署了这些内容,它就会在 12-24 小时后开始工作

关于iphone - 应用内购买在生产应用中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19280509/

相关文章:

Javascript 方向更改不适用于 iPad 上的 PhoneGap

iphone - 为原始数据类型堆栈编写方法时使用 'id' 吗?

ios - 如何创建 UIBarButton 以使用 Swift 调用 UITapGestureRecognizer 函数?

ios - 为什么会出现错误“参与者的无效matchOutcome”?

ios - 导入 ChatKit(即私有(private)框架)或以某种方式使用 CKDBMessage

iphone - dispatch_once 调用导致崩溃

ios - self vs "generic typet"扩展时的 T 差异

objective-c - 为什么是 "(UIButton *)sender"而不是 "UIButton *sender"?

objective-c - 我应该在调度 block 中使用 "weakSelf"吗?

ios - 在 UITableView 中单击的事件