iOSTips彙總

iOS開發小技巧彙總

《iOS開發的一些奇巧淫技》:做者分享了一些 iOS 開發中涉及的小技巧。segmentfault

IOS8,用戶許可的變更:

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 爲新鍵,而後輸入告知用戶請求許可的字符串。例如:「顯示附近的物品項須要獲取您的位置。」對象

圖片描述

圖片描述

IOS8,修復通知註冊

在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)
}

與以前相比多了一個回調,下面是這幾步的簡要解釋:開發

  1. 首先建立一個UIUserNotificationSettings,一個定義了App顯示通知類型的設置對象,其中也包括定義操做的類目(categories)。
  2. 調用-registerUserNotificationSettings:,傳入設置對象。這會向用戶請求許可。
  3. 當用戶給予迴應,新的delegate方法-application:didRegisterUserNotificationSettings:被調用。這裏傳入的notificationSettings與第二步傳入的那個對象不必定相同。這個只描述獲得了用戶許可的權限。查看types就能夠驗證用戶許可了那些權限。
  4. 若是成功得到用戶許可,如今能夠調用-registerForRemoteNotifications。注意這個方法再也不接受參數了。如今設置信息已經被設置對象捕獲,這裏只要請求接受遠程通知。
  5. 此後依然能像往常同樣經過相同的回調來獲取設備令牌(device token)。

IOS8,友好的二次許可請求

若是用戶在詢問首次出現時拒絕許可,那麼之後就再也不彈出詢問。若是用戶拒絕了一個必要的許可,常見的情形是在App中顯示錯誤頁面,或是告訴用戶如何到 設置隱私 中開啓相應許可的提示。上述作法多少顯得有些笨拙,也有很多App所以獲得了差評。

IOSTips:AlertView彈出到系統設置

相關文章
相關標籤/搜索