【问题标题】:iOS 7, check for update in the backgroundiOS 7,在后台检查更新
【发布时间】:2014-07-24 20:28:43
【问题描述】:

我正在开发我的第一个 iOS 应用程序,我需要该应用程序每 4 小时验证一次数据库中是否有新数据。如果响应是肯定的,我希望应用程序为用户创建通知,并且我希望它在后台工作。为此我做了一些研究,我发现,要检查新的更新和推送通知,我们可以使用 iOS 7 中引入的多任务 API(后台获取、远程通知或后台传输服务),但这是否意味着我们必须工作在侧服务器?对我来说,我想在本地完成所有工作,我的意思是应用程序发送请求以检查新更新并为用户创建通知以及所有这些,在后台工作。请帮忙。

谢谢。

【问题讨论】:

  • 只需使用后台获取方法,在该方法中,您可以调用新数据并创建 UILocalNotification,您将推送给用户,但缺点是没有指定的时间限制,之后后台获取方法被调用。您也不能为其提供固定的时间限制。该后台方法可能会在几分钟、几小时或几天内被调用。
  • 不是真的,因为当您选择加入后台刷新时,您会提示操作系统如何/何时调用它。我同意它不能完全设置
  • 仅仅提示操作系统,我们不能创建应用程序或产品并等待操作系统的响应或回复。也感谢您的同意。非常感谢!!!

标签: ios objective-c ios7 push-notification


【解决方案1】:

使用后台获取 => 一切都可以在客户端完成 您可以检查更新,如果有计划的本地通知

例如

  1. 选择在 plist 中进行后台刷新。

    UIBackgroundModes = fetch
    
  2. 告诉操作系统什么时候启动你

    [application setMinimumBackgroundFetchInterval:4*60*60];
    
  3. 在 IOS 启动您的应用程序时做任何您想做的事情:

    //make api call
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response,
                                               NSData *data,
                                               NSError *connectionError) {
                                BOOL hasUpdate =  ...check the response...
                                    if(hasUpdate) {
                                            UILocalNotification *theNotification = [[UILocalNotification alloc] init];
                                            theNotification.alertBody = @"test"
                                            theNotification.soundName = UILocalNotificationDefaultSoundName;
    
                                            [[UIApplication sharedApplication] presentLocalNotificationNow:theNotification];
                                    }
                               }
                            }];
    

注意: ""如果您从多任务 UI 中终止一个应用程序,系统将永远不会再次自动启动该应用程序。这里的逻辑是,如果用户杀死了你的应用程序,他们可能希望它保持死亡状态。""


- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler

【讨论】:

  • 谢谢@Daij-Djan 的回答,请最后一个问题,如果用户杀死应用程序,后台获取仍然有效吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多