发布
社区首页 >问答首页 >如何通过编程打开和关闭背景

如何通过编程打开和关闭背景
EN

Stack Overflow用户
提问于 2015-01-18 16:30:32
回答 2查看 1.6K关注 0票数 0

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

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

另一种选择是使用较大的值调用setMinimumBackgroundFetchInterval,但这是一个相当难看的攻击,我不知道这个值会有多大。

还有其他选择吗?

EN

回答 2

Stack Overflow用户

发布于 2015-01-18 16:56:10

我不知道这会有什么用,但它应该成功的。

如您所知,要使用背景提取,您需要两件事:

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

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

在应用程序委托类中,添加以下方法:

代码语言:javascript
代码运行次数:0
复制
- (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];
}

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

您需要尝试这种方法,并查看是否为application:performFetchWithCompletionHandler:委托方法调用了application:performFetchWithCompletionHandler:方法。如果是这样的话,这将是可行的。如果不是,那就以苹果为耻。

票数 4
EN

Stack Overflow用户

发布于 2015-01-18 16:48:52

这不是一个答案,但它想指出一些东西。您应该知道,您为setMinimumBackgroundFetchInterval指定的值纯粹是咨询性的。苹果根据用户使用它的频率来决定让你的应用程序获取新内容的频率。这个此链接获得更多信息。

Apple提供了一种算法,根据您自己对该应用程序的使用情况,该算法定义了后台提取应该触发的频率。如果您经常使用它,那么它将尽可能频繁地获取,但是如果您每天使用类似于下午4点,那么背景提取应该在启动之前触发,所以您的数据在启动时会被更新。

此外,如果用户从未使用您的应用程序,它可能无法获取背景内容,在这种情况下,您将不得不更新时,您的应用程序启动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28012056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档