productsRequest响应方法不是调用

16 iphone cocoa in-app-purchase

我正在应用程序购买实施我通过发送请求到苹果商店

- (void) requestProductData
{
 SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:
         [NSSet setWithObjects: featureAId,featureBId,nil]]; // add any other product here
 request.delegate = self;
 [request start];
}
Run Code Online (Sandbox Code Playgroud)

响应方法

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
 [purchasableObjects addObjectsFromArray:response.products];
}
Run Code Online (Sandbox Code Playgroud)

根本没有接到电话.只有在我试过的十次尝试中召唤出来的时候.

关于这个的任何想法..?提前致谢

Vla*_*mir 44

尝试实现- (void)request:(SKRequest *)request didFailWithError:(NSError *)error方法 - 可能在处理您的请求时出现一些错误.


hec*_*ctr 24

我面临同样的问题,但在我的情况下,原因是我使用自动引用计数,我忘了保留请求.

我的代码就像:

- (void) requestProductData
{
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]];
    request.delegate = self;
    [request start];
}
Run Code Online (Sandbox Code Playgroud)

但委托的产品请求:didReceiveResponse:从未被调用过.

修复将是:

@property (strong, nonatomic) SKProductsRequest *request;

- (void) requestProductData
{
    self.request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:ProductIdentifier]];
    self.request.delegate = self;
    [self.request start];
    // you can nil request property in request:didFailWithError: and requestDidFinish:
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎这已经被Apple修复了,因为一旦你在一个请求上调用`start`,它现在似乎保留了自己,因此将保持活着直到它最终失败或成功(至少iOS 8;尚未测试iOS 7) ). (2认同)

And*_*rin 7

我有同样的问题.我创建了一个帮助程序类来处理IAP并检查产品.我最终发现的是我创建的类的实例在响应返回之前被释放,因此委托方法永远不会被调用,因为它们不再存在.

我通过在类中使用@proprty(强,非原子)调用它来保留helper类的实例来解决我的问题...

如果您没有使用帮助程序类并将其编码到现有类中,那么上面的答案将通过保留您的SKProductRequest来起作用.