SKReceiptRefreshRequest在取消后第二次调用时不工作

时间:2015-05-08 01:47:10

标签: ios iphone app-store storekit

我的应用程序启动并检查收据。因为它是沙盒,所以应用程序第一次从xcode运行时,它需要向应用商店询问收据。所以我使用SKReceiptRefreshRequest来请求它。

弹出一个窗口,询问应用商店凭据。如果我输入凭据,那么应用程序会加载收据,我会对其进行验证,并且应用运行正常。

如果取消该凭据窗口,问题就会出现。

然后我遇到了第一个问题。此时应用程序没有收据,因此我无法验证该副本是否为盗版。该怎么办?我尝试了以下方法:当用户尝试使用应用程序时,我没有禁用应用程序,而是显示一个窗口,说明"无法验证应用程序,输入OK以立即验证"。

当用户输入OK时,我会再次触发SKReceiptRefreshRequest。弹出凭证窗口,我输入有效凭证,没有任何反应。在2或3分钟的虚无之后,会弹出一个窗口,说“#34;无法连接到App Store"。

奇怪的是,在此失败期间,request:didFailWithError:委托的requestDidFinish:SKReceiptRefreshRequest方法都不会被调用。收据检索失败而没有触发任何委托方法,是的,委托被分配。

收据检索的代码是传统的,即

SKReceiptRefreshRequest *refreshReceiptRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
refreshReceiptRequest.delegate = self;
[refreshReceiptRequest start];

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
  NSLog(@"ERROR");
}

- (void)requestDidFinish:(SKRequest *)request {
  if([request isKindOfClass:[SKReceiptRefreshRequest class]])
  {
    NSLog(@"App Receipt exists after refresh");
  } else {
    NSLog(@"Receipt request done but there is no receipt");
  }
}

1 个答案:

答案 0 :(得分:1)

显然这是SKReceiptRefreshRequest的错误。如果用户取消第一个凭证框,则应用程序将无法再次检索收据,至少不能在沙箱模式下检索。因为这不适用于沙盒模式,所以当Apple审核您的应用并且您的应用将被拒绝时,您无法进行测试,这也无效。

此外,从任务栏中删除应用程序无助于第二次显示凭据框。

唯一的解决方案是提示提醒,告知用户从商店再次删除和下载您的应用,并在应用询问苹果ID /密码时不取消凭据框。