iOS開發錯誤之Attempting to badge the application icon but haven't received permiss

(1)原因

一切都是iOS8搗的鬼。您如果把模擬器換成iOS7.1或者更早的,就不會有這個問題。而現在在iOS8中要實現badge、alert和sound等都需要用戶同意才能,因爲這些都算做Notification“通知”,爲了防止有些應用動不動給用戶發送“通知”騷擾用戶,所以在iOS8時,要“通知”必須要用戶同意才行。

(2)解決思路:我們判斷一下,如果系統版本大於等於8.0的話,我們就在用戶打開應用的時候彈出一個框框提示說我們要發送通知給你,你同意不?如果用戶同意,那麼我們就可以了。而如果系統版本小於8.0的話,因爲默認是可以的,所以我們不需要做任何事情。

那麼問題來了:怎麼彈個框框給用戶,並且用戶同意讓我們發通知呢?

——首先這個是在應用程序第一次被打開加載完畢的時候就要彈出這個框,安裝過APP的人都不會陌生吧。所以,需要在AppDelegate.m的didFinishLaunching方法中寫。

——其次,我們判斷系統版本,用if語句,獲取系統版本,把NSString轉換成float可以比較,這些都沒問題。

——最終,核心是if裏面的三句話。大體意思是,我們先定義一個“通知設置”,然後把這個“通知設置”註冊到“用戶通知設置”裏面,而註冊到“用戶通知設置”裏面的那些“通知設置”,都是用框框彈出來讓用戶決定是否接受這種通知的。

——這個“通知設置”,主要是定義“通知類型”。我們本例中只是badge,但是還有alert和sound都屬於通知類型,所以我們“多此一舉”,把所有的通知類型都囊括進來,這樣,我們就不需要以後一個一個的去設置alert和sound了。


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  float sysVersion=[[UIDevice currentDevice]systemVersion].floatValue;
  if (sysVersion>=8.0) {
    UIUserNotificationType type=UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
    UIUserNotificationSettings *setting=[UIUserNotificationSettings settingsForTypes:type categories:nil];
    [[UIApplication sharedApplication]registerUserNotificationSettings:setting];
  }
  // Override point for customization after application launch.
  return YES;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章