iOS后台与服务器交互(支持锁屏)eg:后台定时上传当前位置

时间:2021-09-02 17:19:40

如果应用是多媒体播放,电子杂志,下载之类的就不多说了。http://www.zhihu.com/question/20114323

如果你的应用为了后台而实现多媒体播放很有可能被评估拒绝。

下面是我测试的两种方法

1.Background Fetch

步骤1:project editor选中 Capabilities tab设置 找到Background Modes选中Background fetch

iOS后台与服务器交互(支持锁屏)eg:后台定时上传当前位置

步骤2:在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代码

[application setMinimumBackgroundFetchInterval:60.0];//设置时间间隔,告知应用程序多久唤醒应用程序

步骤3:在应用程序委托中实现下列方法

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

2.Remote Notifications(静默推送)

服务器配置,类似远程推送,只不过改变一下字段,该推送不会在客户端有任何提示

PushNotificationPayload payLoad = PushNotificationPayload.fromJSON("{\"aps\":{\"content-available\":1}}" );  //在推送通知的payload设置content-available标志

服务端写个定时器,定时向客户端发送静默推送来唤醒应用程序

客户端:project editor选中 Capabilities tab设置 找到Background Modes选中Remote Notifications

当客户端收到带有content-available的推送通知时,这个方法被调用

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

//your code 在此处理,和服务器交互

}

最后网络请求需要使用NSURLSession代替NSURLConnection,项目中使用的第二种方法,成功。