2011-01-06 133 views
1

遇到特定于iOS 4.0的SKProductsRequest的问题。有问题的代码:调用[SKProductsRequest start]在iOS 4.0上挂起

- (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开始]被调用时,该productsRequest:didReceiveResponse:委托方法永远不会调用;此外,整个应用程序挂起,并完全没有响应输入。很明显,这对我们的iOS 4.0用户来说是一个巨大的问题,因为它不仅打破了付款,而且使应用程序完全无法使用。

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

有没有人经历过这个?对这里可能发生的事情有任何想法/想法,以及我们如何能够解决这个问题?

+0

注意:事实证明,这是我们实现的类别的一个问题,它会覆盖NSString方法,并导致它在由低级别应用内SDK调用时在无限循环中运行。所以,SDK没有一个通用的问题。获得的教训:不要覆盖核心可可方法! – figelwump 2011-02-22 19:45:44

回答

0

你有没有尝试在你的委托中实现-request:didFailWithError:并且看看是否被调用?

+0

是的,我正在实施-request:didFailWithError:以及;它没有被调用。 – figelwump 2011-01-07 05:32:41

0

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

一切工作正常,我没有做任何修改的IAP代码,但它打破了。

终于发现问题了。如果您自行拒绝该应用,则您制作的产品ID将失效。我们通过重新提交应用并创建新ID来解决这个问题。之后所有事情都再次开始工作。