ios - SKReceiptRefreshRequest 在取消后第二次调用时不起作用
<p><p>我的应用启动并检查收据。因为是沙盒,app第一次从Xcode运行,需要向App Store索取回执。所以我使用 <code>SKReceiptRefreshRequest</code> 来请求它。</p>
<p>弹出一个窗口,要求提供 App Store 凭据。如果我输入凭据,应用会加载收据,我会对其进行验证,然后应用会正常运行。</p>
<p>如果我取消该凭据窗口,问题就会出现。</p>
<p>然后我遇到了第一个问题。此时应用程序没有收据,所以我无法验证副本是否是盗版。该怎么办?我尝试了以下方法:当用户尝试使用该应用程序时,我没有禁用该应用程序,而是显示一个窗口,显示“无法验证该应用程序,现在输入 OK 进行验证”。</p>
<p>当用户键入 OK 时,我第二次触发 <code>SKReceiptRefreshRequest</code>。再次弹出一个凭据窗口,我输入有效的凭据但没有任何反应。 2 或 3 分钟后,一个窗口弹出说“无法连接到 App Store”。</p>
<p>奇怪的是,在此失败期间,<code>SKReceiptRefreshRequest</code> 委托(delegate)的<code>request:didFailWithError:</code> 或<code>requestDidFinish:</code> 方法均未被调用。收据检索失败但未触发任何委托(delegate)方法,是的,委托(delegate)已分配。</p>
<p>收据检索的代码是传统的,即</p>
<pre><code>SKReceiptRefreshRequest *refreshReceiptRequest = [ initWithReceiptProperties:nil];
refreshReceiptRequest.delegate = self;
;
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
NSLog(@"ERROR");
}
- (void)requestDidFinish:(SKRequest *)request {
if(])
{
NSLog(@"App Receipt exists after refresh");
} else {
NSLog(@"Receipt request done but there is no receipt");
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>显然这是 <code>SKReceiptRefreshRequest</code> 的错误。如果用户取消了第一个凭据框,应用程序将无法再次检索收据,至少在沙盒模式下是这样。因为这在沙盒模式下不起作用,所以您无法测试,并且当 Apple 审查您的应用并且您的应用将被拒绝时,这也不起作用。</p>
<p>此外,从任务栏中关闭该应用程序也无助于使凭据框再次出现。</p>
<p>唯一的解决方案是发出警告,告诉用户从商店中删除并重新下载您的应用程序,并且在应用程序要求输入 Apple ID/密码时不要取消凭据框。</p></p>
<p style="font-size: 20px;">关于ios - SKReceiptRefreshRequest 在取消后第二次调用时不起作用,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/30114489/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/30114489/
</a>
</p>
页:
[1]