iOS 后台场景

一、四种常见模式

1、后台播放音频内容,例 酷我音乐。

2、基于位置的信息给用户,并要求使用标准定位服务 , 例 快的、乐动力

3、该应用程序提供的VoIP服务,   例 QQ语音聊天

4、该应用需要从网络上的定期的新内容   例 天气预报

5、应用程序使用远程通知     例  所有推送的APP

6、该应用程序进程使用NewsstandKit框架,新闻杂志

7、该应用程序定期提供数据的附件进行通信  例 不详

8、应用程序使用CoreBluetooth框架蓝牙配件在后台进行沟通  例不详

9、应用程序使用CoreBluetooth框架,外围模式蓝牙配件通信   例不详


1、Background Audio,这是后台的音频,这个很早之前便有,也是iOS设备中用得最多的后台应用,调用这个接口可以实现后台的音乐播放。
 

2、Location Services,这是后台的定位,系统会拥有统一页面进行管理。 


3、VoIP,后台语音服务,类似Skype通话应用需要调用,可进行后台的语音通话。 

4、Newsstand,报刊杂志后台自动下载更新,其能够自动实时更新。 
6、 Remote Notification,这是本次较大的一个改进接口,以往聊天类应用接受推送后点进去需要再收一次信息,这情况在QQ、微信等应用上最为明显。不过拥 有了这个接口后,这情况将不复存在,以后推送将能够直接启动后台任务。值得注意的是remote notification支持silent notification(静默推送),这样dropbox这类同步应用可以在后台以最节能的模式实时静默同步了,类似布卡漫画这种也可以推送正在追的漫 画的新章节并在后台静默下载,待到下载好再给用户发送一个本地推送,用户点开即看无需再联网 

7、Background Transfer Service,后台上传下载。iOS最接近传统多任务的后台接口,可供任意类型的app调用,无时间限制。应用场景包括后台上传和下载数据,这使得游戏 后台更新数据包,后台上传视频等等都成为可能,但是正如其名字,它只能用于处理上传下载这种传输类的任务,类似后台剪切板监控这种它就无能为力了。 

二、配置 
第一步,开启后台模式,选中定位,选择project –> capabilities–>Backgorund Modes –> Location updates

第二步,在info.list 文件中添加如下配置:

允许 http 请求 ,ios 9 之后需要添加,便于向服务器发送请求

NSAppTransportSecurity 

NSAllowsArbitraryLoads 


添加定位权限,ios8之后需要添加,否则无法定位

NSLocationWhenInUseUsageDescription 
YES 
NSLocationAlwaysUsageDescription 
YES

三、iOS程序进入后台后十分钟之内就会被系统kill掉,怎么解决呢? 
解决: 利用苹果给出的三种类型的程序可以保持在后台运行:音频播放类,位置更新类,另外一个记不太清楚了,我利用了苹果给出的音频播放类的这个“特权”来满足我程序上的要求 
1、步骤一:在Info.plist中,添加”Required background modes”键,value为:App plays audio

步骤二:

  • (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    NSError *setCategoryErr = nil; 
    NSError *activationErr = nil; 
    [[AVAudioSession sharedInstance] 
    setCategory: AVAudioSessionCategoryPlayback 
    error: &setCategoryErr]; 
    [[AVAudioSession sharedInstance] 
    setActive: YES 
    error: &activationErr]; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
    }

步骤三:将以下代码添加到appDelegate文件中的- (void)applicationDidEnterBackground:(UIApplication *)application函数,也可添加到在具体类中注册的应用进入后台后的通知方法

  • (void)applicationDidEnterBackground:(UIApplication *)application{

    UIApplication* app = [UIApplication sharedApplication]; 
    __block UIBackgroundTaskIdentifier bgTask; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    if (bgTask != UIBackgroundTaskInvalid) 

    bgTask = UIBackgroundTaskInvalid; 

    }); 
    }]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    if (bgTask != UIBackgroundTaskInvalid) 

    bgTask = UIBackgroundTaskInvalid; 

    }); 
    }); 
    }


猜你喜欢

转载自blog.csdn.net/weixin_40873814/article/details/78971333
今日推荐