是在iOS中唤醒暂停的应用程序的一种方式,无需用户或服务器干预

前端之家收集整理的这篇文章主要介绍了是在iOS中唤醒暂停的应用程序的一种方式,无需用户或服务器干预前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法唤醒iOS应用程序,而不使用“重要更改位置服务”?

我需要唤醒我的应用程序,无需服务器或用户干预
有些事情类似于闹钟,当你醒来的时候你会得到一个警报弹出窗口.

UILocalNotification – 不会工作,因为它需要用户和切断的干预.

静音推送通知 – 无法发送本地通知作为静音推送通知.这些只能由服务器发送.这意味着它需要服务器干预

背景获取 – 不会工作,因为没有保证触发时间

我错过了什么吗?

解决方法

编辑:您已经调整了问题,以明确说明“无需用户或服务器干预”.

不,据我所知,设计iOS未提供明确的方式在将来确定的时间唤醒您的应用程序.您可以在后台继续长时间运行的任务,机会地获取更新的内容,提醒用户如果需要,请重新打开您的应用程序,如果需要,请提前使用无提示推送通知.

以下是上述三个选项的一些提示

UILocalNotification

最简单的方法是在将来安排一些UILocalNotifications,但为了唤醒你需要与通知进行交互的应用程序.这可能不是你想要的.

静音推送通知

iOS 7之后的另一个选择是内容可用或静默推送通知.您为这种通知设置了一个特定的有效载荷,如果您的应用程序具有正确的UIBackgroundMode值设置,它将默认地传递到您的应用程序:

有效载荷看起来像这样:

{
    "aps" : {
        "content-available" : 1
    },"content-id" : 42
}

并且您将通过特定的委托方法在您的应用程序委托中收到它:

- (void)         application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification userInfo is %@",userInfo);

    NSNumber *contentID = userInfo[@"content-id"];
    // Do something with the content ID
    completionHandler(UIBackgroundFetchResultNewData);
}

然后,可以使用此机会下载内容或更新应用程序,有关此方法的更多信息,请查看UIBackgroundModes和background execution documentation.

Objc.io的Multi-Tasking文章也是这个方法的一个很好的开始.

背景获取

如果您从Apple阅读了background modes文档,可以使用UIBackgroudnModes的值获取您的应用程序被机会地唤醒,并有时间下载或更新它的数据.

苹果的文档就是提到它的用例:

Apps that need to check for new content periodically can ask the system to wake them up so that they can initiate a fetch operation for that content. To support this mode,enable the Background fetch option from the Background modes section of the Capabilities tab in your Xcode project.

原文链接:https://www.f2er.com/iOS/329931.html

猜你在找的iOS相关文章