iOS推送(一):本地推送

以iOS8.0和iOS10.0兩個(gè)版本來創(chuàng)建一個(gè)本地推送:

- (void)localPush{
  // iOS8.0下本地推送的創(chuàng)建方式
   if ([UIDevice currentDevice].systemVersion.floatValue < 10.0) {
     UILocalNotification *localNotification = [[UILocalNotification alloc] init];
     localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0];
     localNotification.alertBody = @"這是一條本地推送乎芳,這是推送主體肩袍!"; 
     localNotification.soundName = UILocalNotificationDefaultSoundName;
     localNotification.applicationIconBadgeNumber += 1; 
     [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
     // iOS10.0 
   }else {
  // 給推送一個(gè)標(biāo)識符
  NSString *identifier = @"localPush.identifier"; 
  // 推送內(nèi)容
  UNMutableNotificationContent *content = [UNMutableNotificationContent new];
  content.body = @"這是iOS10的本地推送疚鲤,這是推送主體誊涯!";
  content.badge = @1; 
   // 推送觸發(fā)器 
   // UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:YES];
   NSDateComponents *components = [NSDateComponents new]; components.second = 5.0f; 
   UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES]; 
 // 推送請求
   UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger]; 
 // 把推送請求添加到推送中心
  [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
       NSLog(@"%@", [error localizedDescription]);
   }];
}}

推送創(chuàng)建完畢后迹蛤,那么我們便要考慮收到推送后會執(zhí)行什么樣的操作奇颠,這里主要介紹處理接收到推送的地方败去。首先我們要先注冊推送通知。8.0和10.0注冊推送還是很不一樣的烈拒。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 8.0系統(tǒng)注冊推送
     if ([[UIDevice currentDevice].systemVersion floatValue] < 10.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
  // iOS10.0注冊推送
  }else{
    [UNUserNotificationCenter currentNotificationCenter].delegate = self; 
    [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {
   if (error != nil) {
       NSLog(@"%@", [error localizedDescription]);
   }
 }]; 
       [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
       NSLog(@"%@", settings);
   }];
 } 
   // 如果是點(diǎn)擊推送進(jìn)入的App圆裕,那么lauchOptions會有一個(gè)UIApplicationLaunchOptionsLocalNotificationKey字段,如果這個(gè)字段不為空荆几,代表是點(diǎn)擊推送進(jìn)入吓妆,并且可以獲得推送的內(nèi)容。注意這個(gè)key在iOS10以后也有值吨铸,不要和userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:這個(gè)方法重復(fù)了行拢。所以要判斷一下版本是否小于10.0。
   if (([[UIDevice currentDevice].systemVersion floatValue] < 10.0) && launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
   // ......在點(diǎn)擊推送進(jìn)入App后會執(zhí)行的代碼诞吱。
   } 
  return YES;
}

iOS10以后舟奠,如果程序被銷毀后(即程序退出后),收到推送房维,點(diǎn)擊推送進(jìn)入app沼瘫,會調(diào)用該方法;在該方法里可以執(zhí)行需要執(zhí)行的代碼咙俩,注意兩點(diǎn):

一.要調(diào)用一下completionHandler()耿戚;
二.要在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

中設(shè)置一下代理:
[UNUserNotificationCenter currentNotificationCenter].delegate = self;

否則該代理方法不會執(zhí)行。

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
 //......程序退出時(shí)收到推送執(zhí)行的操作
 completionHandler();
}

iOS8.0以后暴浦,如果程序在前臺溅话,收到推送會調(diào)用該方法:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ 
  //......程序在前臺時(shí)收到推送執(zhí)行的操作
}

iOS10.0以后晓锻,如果程序在前臺歌焦,收到推送會調(diào)用該方法:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
     //......程序在前臺時(shí)收到推送執(zhí)行的操作 
    completionHandler(UNNotificationPresentationOptionSound |  UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市砚哆,隨后出現(xiàn)的幾起案子独撇,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纷铣,死亡現(xiàn)場離奇詭異卵史,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搜立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門以躯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啄踊,你說我怎么就攤上這事忧设。” “怎么了颠通?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵址晕,是天一觀的道長。 經(jīng)常有香客問我顿锰,道長谨垃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任硼控,我火速辦了婚禮刘陶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牢撼。我一直安慰自己易核,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布浪默。 她就那樣靜靜地躺著牡直,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纳决。 梳的紋絲不亂的頭發(fā)上碰逸,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音阔加,去河邊找鬼饵史。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胜榔,可吹牛的內(nèi)容都是我干的胳喷。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼夭织,長吁一口氣:“原來是場噩夢啊……” “哼吭露!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尊惰,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤讲竿,失蹤者是張志新(化名)和其女友劉穎泥兰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题禀,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞋诗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迈嘹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削彬。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秀仲,靈堂內(nèi)的尸體忽然破棺而出吃警,到底是詐尸還是另有隱情,我是刑警寧澤啄育,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布酌心,位于F島的核電站,受9級特大地震影響挑豌,放射性物質(zhì)發(fā)生泄漏安券。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一氓英、第九天 我趴在偏房一處隱蔽的房頂上張望侯勉。 院中可真熱鬧,春花似錦铝阐、人聲如沸址貌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽练对。三九已至,卻和暖如春吹害,著一層夾襖步出監(jiān)牢的瞬間螟凭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工它呀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留螺男,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓纵穿,卻偏偏與公主長得像下隧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子谓媒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容