Ios 是否可以从main()调用SKReceiptRefreshRequest?

Ios 是否可以从main()调用SKReceiptRefreshRequest?,ios,app-store,lifecycle,storekit,apple-id,Ios,App Store,Lifecycle,Storekit,Apple Id,在2013年WWDC关于处理应用商店收据的谈话中,建议对于iOS应用程序,应尽快调用收据验证代码。甚至在应用程序之前:使用选项完成启动:-即在main()函数中。我认为这将是如下的工作方式: int main(int argc, char *argv[]) { @autoreleasepool { validateReceiptMethod(); // <---- HERE int retVal = UIApplicationMain(argc,

在2013年WWDC关于处理应用商店收据的谈话中,建议对于iOS应用程序,应尽快调用收据验证代码。甚至在
应用程序之前:使用选项完成启动:
-即在
main()
函数中。我认为这将是如下的工作方式:

int main(int argc, char *argv[]) {

    @autoreleasepool {
        validateReceiptMethod(); // <---- HERE
        int retVal = UIApplicationMain(argc, argv, nil, nil);
        return retVal;
    }
}
intmain(intargc,char*argv[]){
@自动释放池{
validateReceiptMethod();//
那么,在向用户显示apple ID登录对话框方面会发生什么呢

应用程序不拥有的窗口中会显示存储工具包警报,因此在应用程序未处于活动状态时(甚至在启动之前)也会显示。但这并不真正相关

甚至可以从
main()
方法调用
SKReceiptRefreshRequest

如果您设置了自己的事件循环,然后在接收请求完成时停止它,这可能是可能的,但您不应该这样做。不要延迟启动应用程序,等待网络请求;它可能永远不会完成。如果接收无效,我建议输入
UIApplicationMain()
并在启动完成时请求另一个收据


编辑:因为在输入
UIApplicationMain()之前,您无法处理没有有效收据的问题
,我不明白苹果为什么建议在此时进行检查。这在OS X上是有意义的,因为应用程序应该终止,但在应用程序应该继续运行的iOS上是没有意义的,可以忽略无效收据。您可以提前检查,将状态存储在全局变量中,然后稍后响应;但为什么不只在以下情况下进行检查您已经准备好响应。

这是个好主意。
validateReceiptMethod()
可以根据发生的情况返回一个INT(例如,如果收据无效,则返回0;如果收据有效,则返回1;如果找不到收据,则返回1)。是否有一种简单的方法从main()传递该返回变量到
应用程序:使用选项完成启动:
,这样当调用该方法时,它将知道(无需再次验证收据)没有收据,因此它应该调用
SKReceiptRefreshRequest
并获取新的收据?