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

Ios SKReceiptRefreshRequest在取消后第二次调用时不工作,ios,iphone,app-store,storekit,Ios,Iphone,App Store,Storekit,我的应用程序启动并检查收据。因为它是沙盒,所以当应用程序第一次从xcode运行时,它需要向应用程序商店索要收据。所以我使用SKReceiptRefreshRequest来请求它 弹出一个窗口,询问应用商店凭据。如果我键入凭据,那么应用程序将加载收据,我对其进行验证,并且应用程序运行正常 如果我取消该凭证窗口,问题就会出现 那么我有第一个问题。目前该应用程序没有收据,因此我无法验证副本是否为盗版。怎么办?我尝试了以下方法:当用户尝试使用应用程序时,我没有禁用应用程序,而是显示一个窗口,上面写着“无

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

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

如果我取消该凭证窗口,问题就会出现

那么我有第一个问题。目前该应用程序没有收据,因此我无法验证副本是否为盗版。怎么办?我尝试了以下方法:当用户尝试使用应用程序时,我没有禁用应用程序,而是显示一个窗口,上面写着“无法验证应用程序,请键入OK立即验证”

当用户键入OK时,我再次触发
SKReceiptRefreshRequest
。再次弹出一个凭证窗口,我输入有效凭证,但什么也没发生。在2到3分钟的虚无之后,一个窗口弹出,说“无法连接到应用商店”

奇怪的是,在此故障期间,没有调用
request:didfailwitheror:
requestdidfish:
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");
  }
}

显然这是
SKReceiptRefreshRequest
的一个bug。如果用户取消第一个凭证框,应用程序将无法再次检索收据,至少在沙箱模式下是这样。因为这在沙盒模式下不起作用,所以你无法测试,而且当苹果审查你的应用程序时,这也不起作用,你的应用程序将被拒绝

此外,从任务栏中删除应用程序无助于使凭证框再次出现


唯一的解决方案是发出警报,告诉用户再次从应用商店中删除并下载你的应用程序,并且在应用程序请求苹果ID/密码时不要取消凭据框。

这太糟糕了。你不知道这个错误是否被修复了吗?上次我检查这个问题时,它仍然存在。苹果很少修复这样的错误。他们利用自己的资源来修复那些给他们造成负面影响的漏洞,最终修复了所报告的1万亿个漏洞中的一个或另一个。我很久以前就不再为他们报告错误了,因为我意识到我已经填写了大约250个错误报告,但没有一个得到修复。