【问题标题】:Invoking [SKProductsRequest start] hangs on iOS 4.0调用 [SKProductsRequest start] 在 iOS 4.0 上挂起
【发布时间】:2011-02-18 16:49:08
【问题描述】:

遇到特定于 iOS 4.0 的 SKProductsRequest 问题。有问题的代码:

- (void)requestProductData
{
    NSSet *productIdentifiers = [NSSet setWithObjects:kLimitedDaysUpgradeProductId, kUnlimitedUpgradeProductId, nil];

    self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];

    self.productsRequest.delegate = self;

    [self.productsRequest start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
     NSLog(@"didReceiveResponse");
}

当调用 [SKProductsRequest start] 时, productsRequest:didReceiveResponse: 委托方法永远不会被调用;此外,整个应用程序挂起并且对输入完全没有响应。显然,这对我们的 iOS 4.0 用户来说是个大问题,因为它不仅会破坏支付,还会让应用完全无法使用。

需要注意的其他一些事项:这只发生在 iOS 4.0 上; iOS 4.2、3.x 都很好。另外:如果委托未在 SKProductsRequest 上设置(即注释掉“self.productsRequest.delegate = self;”行),应用程序不会挂起(但当然在这种情况下我们无法获取产品信息)。此外,从 productsRequest:didReceiveResponse: 回调中剥离的所有内容仍然会重现问题(该方法实际上从未被调用)。最后,如果 productIdentifiers NSSet 对象初始化为空集,则不会发生挂起。

有其他人经历过吗?关于这里可能发生的事情以及我们如何解决这个问题的任何想法/想法?

【问题讨论】:

  • 注意:这原来是我们实现的一个类别的问题,它覆盖了一个 NSString 方法并导致它在被较低级别的应用内 SDK 调用时在无限循环中运行。因此,这里没有与 SDK 相关的一般问题。经验教训:不要覆盖核心 Cocoa 方法!

标签: iphone ios4 in-app-purchase


【解决方案1】:

您是否尝试过在您的委托中实现 –request:didFailWithError: 并查看它是否被调用?

【讨论】:

  • 是的,我正在实施 -request:didFailWithError: 以及;它没有被调用。
【解决方案2】:

我今天遇到了类似的问题。在我发出 SKProductRequest 后,对任何委托方法都没有响应。

一切正常,我没有对 IAP 代码进行任何更改,但它坏了。

终于找到问题了。如果您自行拒绝该应用程序,则您制作的产品 ID 将失效。我们通过重新提交应用程序并创建新 ID 解决了这个问题。之后一切又开始工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2012-11-04
    相关资源
    最近更新 更多