《iOS開發的一些奇巧淫技》:做者分享了一些 iOS 開發中涉及的小技巧。segmentfault
iOS 8引入請求用戶位置的兩個新權限:一個僅當App運行時接收更新,另外一個能夠在App未運行的時候接收更新。app
之前,開始監視位置的時候,iOS會自動向用戶尋求App權限。這一點在iOS 8中有所改變,你須要在開始更新位置以前明確地顯式請求用戶許可。spa
爲此,若是當前許可狀態不明,你須要調用 CLLocationManager 的requestWhenInUseAuthorization或requestAlwaysAuthorization方法。code
cself.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) { [self.locationManager requestWhenInUseAuthorization]; } [self.locationManager startUpdatingLocation];
最後一步:在App的 info.plist 中添加 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription 爲新鍵,而後輸入告知用戶請求許可的字符串。例如:「顯示附近的物品項須要獲取您的位置。」對象
在iOS 8中,用戶通知許可有變更,主要是爲了支持 可操做通知 。老版本的相關API在iOS 8中無效,不宜使用。blog
如今,通知許可共分爲兩 層 ,你的App必須先請求許可 顯示 特定類型的通知,而成功獲得用戶許可後,你須要請求許可接收 遠程 通知。token
以前的作法是在-application:didFinishLaunchingWithOptions:內調用-registerForRemoteNotificationTypes:來接收delegate回調檢查狀態。若是在iOS 8中這麼寫,你會發現根本沒有調用delegate方法。圖片
這是因爲你須要先請求第一層用戶通知許可。如下是 appDelegate 中的一個簡單示例:ip
c- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; // 2 [application registerUserNotificationSettings:settings]; return YES } - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { // 3 if (notificationSettings.types != UIUserNotificationTypeNone) { // 4 [application registerForRemoteNotifications]; } } // 5 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // ... (no changes needed) } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { // ... (no changes needed) }
與以前相比多了一個回調,下面是這幾步的簡要解釋:開發
若是用戶在詢問首次出現時拒絕許可,那麼之後就再也不彈出詢問。若是用戶拒絕了一個必要的許可,常見的情形是在App中顯示錯誤頁面,或是告訴用戶如何到 設置隱私 中開啓相應許可的提示。上述作法多少顯得有些笨拙,也有很多App所以獲得了差評。