gpt4 book ai didi

ios - 如何以编程方式打开和关闭后台获取

转载 作者:行者123 更新时间:2023-11-28 18:31:38 25 4
gpt4 key购买 nike

我有一个 iOS 应用程序,它使用后台提取在后台定期下载新数据。一段时间后,如果用户在试用期后没有购买完全访问权限,我希望能够关闭此功能。我该怎么做?

选项是在调用 performFetchWithCompletionHandler 时不做任何事情。问题是,我必须调用 completionHandler 并报告是否有任何新数据可用。如果我返回 UIBackgroundFetchResultNoData,iOS 可能会在一段时间后决定停止调用 performFetchWithCompletionHandler。我也可以返回 UIBackgroundFetchResultNewData,但正如 Apple 所说,“声明内容可用但随后不下载任何内容”的应用不太可能获得执行时间。

另一种选择是用一个很大的值调用 setMinimumBackgroundFetchInterval,但这是一个相当丑陋的 hack,我不知道这个值可以有多大。

还有其他选择吗?

最佳答案

我不确定这是否有效,但它应该有效。

如您所知,要使用后台抓取,您需要两件事:

  1. 实现 UIApplicationDelegate 方法 application:performFetchWithCompletionHandler:
  2. fetch 后台模式添加到 Info.plist

当然,选项 2 不能在运行时更改。但是,您可以使用一个技巧以编程方式指示委托(delegate)方法是否已实现。

在您的应用委托(delegate)类中,添加以下方法:

- (BOOL)respondsToSelector:(SEL)aSelector {
if (aSelector == @selector(application:performFetchWithCompletionHandler:)) {
// return YES if in trial mode or user has full access.
// return NO otherwise
}

return [super respondsToSelector:aSelector];
}

假设是因为委托(delegate)方法是可选的,如果启用了 fetch 模式,iOS 框架不会盲目地调用委托(delegate)方法。希望 iOS 框架首先检查委托(delegate)是否首先响应委托(delegate)方法。

您需要尝试此操作并查看是否为 application:performFetchWithCompletionHandler: 委托(delegate)方法调用了 respondsToSelector: 方法。如果是,那么这将起作用。如果不是,那就是 Apple 的耻辱。

关于ios - 如何以编程方式打开和关闭后台获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28012056/

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