我的应用程序启动并检查收据。因为它是沙盒,所以应用程序第一次从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");
}
}
答案 0 :(得分:1)
显然这是SKReceiptRefreshRequest
的错误。如果用户取消第一个凭证框,则应用程序将无法再次检索收据,至少不能在沙箱模式下检索。因为这不适用于沙盒模式,所以当Apple审核您的应用并且您的应用将被拒绝时,您无法进行测试,这也无效。
此外,从任务栏中删除应用程序无助于第二次显示凭据框。
唯一的解决方案是提示提醒,告知用户从商店再次删除和下载您的应用,并在应用询问苹果ID /密码时不取消凭据框。