gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:51:31 30 4
gpt4 key购买 nike

在WWDC 2013关于处理应用商店收据的演讲中,建议对于iOS应用,应尽快调用收据验证码。甚至在 application:didFinishLaunchingWithOptions: 之前 - 即在 main() 函数中。我想它的工作方式如下:

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

@autoreleasepool {
validateReceiptMethod(); // <---- HERE
int retVal = UIApplicationMain(argc, argv, nil, nil);
return retVal;
}
}

想法是 UIApplicationMain() 方法启动您的应用程序并调用 application:didFinishLaunchingWithOptions:。如果将 validateReceiptMethod() 放在 UIApplciationMain() 之后,它将永远不会运行。

无论如何,这很好用。但是没有收据怎么办?然后你需要调用 SKReceiptRefreshRequest 从应用商店获取一个新的,这很好。但是,如果您在 UIApplciationMain() 之前运行此代码,它也会在您的任何 UI 显示之前运行。那么在向用户显示 Apple ID 登录对话框方面会发生什么情况呢?甚至可以从 main() 方法调用 SKReceiptRefreshRequest 吗?

最佳答案

So what would happen in terms of showing the user the apple ID login dialog?

Store Kit 警报出现在不属于您的应用程序的窗口中,因此可以在您的应用程序未处于事件状态时显示 - 甚至在它启动之前。但这并不是真正相关的。

Is it even possible to call SKReceiptRefreshRequest from the main() method?

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

编辑:由于在输入 UIApplicationMain() 之前没有有效收据,您无法做任何事情,我不明白为什么 Apple 建议此时检查。这在 OS X 上有意义,因为应用程序应该终止,但在 iOS 上没有意义,因为应用程序应该继续运行并且忽略无效收据是可以接受的。您可以提前检查,将状态存储在全局变量中,然后再响应;但为什么不只在您准备好回应时才检查。

关于ios - 是否可以从 main() 调用 SKReceiptRefreshRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204113/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com