我有一个iOS应用程序,它使用后台提取来定期在后台下载新数据。过了一段时间,如果用户在试用期后没有购买完全访问权限,我希望能够关闭此功能。我该怎么做?
选项是在调用performFetchWithCompletionHandler
时根本不做任何事情。问题是,我必须调用completionHandler并报告是否有任何新数据可用。如果我返回UIBackgroundFetchResultNoData
,iOS可能会在一段时间后决定停止调用performFetchWithCompletionHandler
。我也可以返回UIBackgroundFetchResultNewData
,但正如Apple声明的那样,“声称内容可用但随后不下载任何内容”的应用程序不太可能获得执行时间。
另一种选择是使用较大的值调用setMinimumBackgroundFetchInterval
,但这是一个相当丑陋的黑客,我不知道这个值有多大。
还有其他选择吗?
答案 0 :(得分:4)
我不知道这会有效,但它应该有效。
如您所知,要使用后台提取,您需要做两件事:
UIApplicationDelegate
方法application:performFetchWithCompletionHandler:
fetch
后台模式添加到Info.plist
。当然,选项2在运行时无法更改。但是,您可以使用技巧以编程方式指示是否已实现委托方法。
在您的app委托类中,添加以下方法:
- (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];
}
假设由于委托方法是可选的,因此如果启用fetch
模式,iOS框架不会盲目地调用委托方法。希望iOS框架首先检查代理是否首先响应委托方法。
您需要尝试此操作,看看是否为respondsToSelector:
委托方法调用了application:performFetchWithCompletionHandler:
方法。如果是,那么这将有效。如果没有,那么对Apple感到羞耻。
答案 1 :(得分:1)
这不是答案,但它想指出一些问题。您应该知道,您为setMinimumBackgroundFetchInterval
指定的值纯粹是建议性的。 Apple会根据用户使用频率的频率来确定让您的应用获取新内容的频率。这个this link了解更多信息。
Apple提供了一种算法,根据您自己对应用的使用情况,定义后台提取应触发的频率。如果你经常使用它,那么它会尽可能频繁地获取,但如果你每天下午4点使用,那么后台提取应该在之前触发,所以你的数据在你启动时会更新。
此外,如果用户从不使用您的应用,则可能无法获取后台内容,在这种情况下,您必须在应用启动时进行更新。