第一步
需要在info.plist中添加兩個權(quán)限NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription。
第二步
在Background Models中勾選Location updates

513887BAF82D32D3B35A3784D2C54A89.jpg
第三步
這里我測試后臺持續(xù)時間是用APP角標(biāo)計數(shù)的,因為發(fā)現(xiàn)如果本地調(diào)試退到后臺和拔出線正常跑的時間結(jié)果不一樣,在UIBackgroundTaskIdentifier情況下,如果本地連線調(diào)試,也可以很久,但是拔出線設(shè)置角標(biāo)也就三分鐘。所以這里要用到applicationIconBadgeNumber,在iOS7中直接設(shè)置applicationIconBadgeNumber沒有問題,但是在iOS8之后設(shè)置applicationIconBadgeNumber,程序沒有反應(yīng),因為在iOS8之后想要設(shè)置applicationIconBadgeNumber,需要在didFinishLaunchingWithOptions進(jìn)行用戶授權(quán)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//注冊推送
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
}
}];
return YES;
}
第四步
s#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic ,strong) CLLocationManager *locationManager;
@property (nonatomic ,assign) NSInteger number;
- (IBAction)buttonClick:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
/** 蘋果_用戶位置更新后,會調(diào)用此函數(shù) */
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
self.number++;
[UIApplication sharedApplication].applicationIconBadgeNumber = self.number;
NSLog(@"success");
}
/** 蘋果_定位失敗后,會調(diào)用此函數(shù) */
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"error");
}
- (IBAction)buttonClick:(id)sender
{
self.number = 0;
[UIApplication sharedApplication].applicationIconBadgeNumber = self.number;
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.allowsBackgroundLocationUpdates = YES;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
[self.locationManager requestAlwaysAuthorization];
[self.locationManager startUpdatingLocation];
}
總結(jié):
- 比較費(fèi)電
- 審核人員會問你你想干啥(可以打電話或郵件交流,說明一下為什么需要后臺持續(xù)獲取位置)