【问题标题】:SKReceiptRefreshRequest not working the second time it is called after a cancelSKReceiptRefreshRequest 在取消后第二次调用时不起作用
【发布时间】:2015-07-18 19:38:22
【问题描述】:

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

会弹出一个窗口,询问 App Store 凭据。如果我键入凭据,则应用程序会加载收据,我对其进行验证,然后应用程序运行正常。

如果我取消该凭据窗口,问题就开始了。

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

当用户输入 OK 时,我第二次触发 SKReceiptRefreshRequest。再次弹出一个凭据窗口,我输入有效的凭据,但没有任何反应。 2、3分钟后,会弹出一个窗口说“无法连接到App Store”。

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

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

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");
  }
}

【问题讨论】:

    标签: ios iphone app-store storekit


    【解决方案1】:

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

    此外,从任务栏中终止应用程序将无助于使凭据框再次出现。

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

    【讨论】:

    • 这太可怕了。你不知道这个错误是否已修复?
    • 我最后一次检查问题仍然存在。苹果很少修复这样的错误。他们使用他们的资源来修复给他们带来负面新闻的错误,并最终从报告的 1 万亿个错误中修复一个或另一个。在意识到我已经填写了大约 250 个错误报告并且没有一个被修复之后,我很久以前就停止为他们报告错误了。
    猜你喜欢
    • 2018-06-15
    • 2016-03-30
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多