ios 本地通知看這一篇文章就夠了

在做本地通知之前一定要關(guān)心的一點,App是通過哪種途徑啟動的陕赃?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}
說明:當應(yīng)用程序啟動時執(zhí)行,應(yīng)用程序啟動入口颁股。只在應(yīng)用程序啟動時執(zhí)行一次么库。application參數(shù)用來獲取應(yīng)用程序的狀態(tài)、變量等甘有,值得注意的是字典參數(shù):(NSDictionary *)launchOptions诉儒,該參數(shù)存儲程序啟動的原因。
1.若用戶直接啟動亏掀,lauchOptions內(nèi)無數(shù)據(jù);
2.若由其他應(yīng)用程序通過openURL:啟動忱反,則UIApplicationLaunchOptionsURLKey對應(yīng)的對象為啟動URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應(yīng)啟動的源應(yīng)用程序的bundle ID (NSString);
3.若由本地通知啟動滤愕,則UIApplicationLaunchOptionsLocalNotificationKey對應(yīng)的是為啟動應(yīng)用程序的的本地通知對象(UILocalNotification)温算;
4.若由遠程通知啟動,則UIApplicationLaunchOptionsRemoteNotificationKey對應(yīng)的是啟動應(yīng)用程序的的遠程通知信息userInfo(NSDictionary)间影;

了解完APP的啟動方式之后注竿,我們來擼一下代碼吧!!

    FirstViewController *first = [[FirstViewController alloc] init];
    self.window.rootViewController = first;
    self.first = first;

    // *注冊本地通知, ios8之后必須要注冊*
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }
    if (launchOptions == nil) {
        // 直接點擊app圖標啟動的程序
        first.labelState.text = @"直接點擊app圖標啟動的程序";
    }
    NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
    if(url) {
        // 由其他應(yīng)用程序通過openURL啟動的程序
        NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
        if(bundleId) {
            
        }
    }
    UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if(localNotify) {
        // 點擊本地通知啟動的程序, 在這里你可以做應(yīng)用的跳轉(zhuǎn)巩割,
//        first.labelState.text = @"點擊本地通知啟動的程序";
        for (NSString *str in [launchOptions allKeys]) {
            first.labelState.text =  [NSString stringWithFormat:@"%@=%@=%@", first.labelState.text, str, [launchOptions objectForKey:str]];
        }
//        NSLog(@"%@", launchOptions);
    }
    NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if(userInfo) {
        // 點擊遠程通知啟動的程序
        first.labelState.text = @"點擊遠程通知啟動的程序";
    }

清楚了APP的啟動方式后裙顽,那如何創(chuàng)建一個本地通知呢,我們來看一下吧宣谈,廢話九就少說一點愈犹,我們還是直接擼代碼。

    // 創(chuàng)建一個通知
    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    //設(shè)置本地通知的觸發(fā)時間(如果要立即觸發(fā)蒲祈,無需設(shè)置)甘萧,這里設(shè)置為20妙后
    //    localNotification.fireDate = [NSDate date];
    //設(shè)置本地通知的時區(qū)
    localNotification.timeZone = [NSTimeZone defaultTimeZone];
    //設(shè)置通知的內(nèi)容
    localNotification.alertBody = @"內(nèi)容";
    //設(shè)置通知動作按鈕的標題
    //    localNotification.alertAction = @"查看”;
    //設(shè)置提醒的聲音,可以自己添加聲音文件梆掸,這里設(shè)置為默認提示聲
    localNotification.soundName = UILocalNotificationDefaultSoundName;
    //設(shè)置通知的相關(guān)信息扬卷,這個很重要,可以添加一些標記性內(nèi)容酸钦,方便以后區(qū)分和獲取通知的信息
    //    NSDictionary *infoDic = [NSDictionary dictionaryWithObjectsAndKeys:@"tongzhi",@"id",@"11",@"time",@"aa",@"affair.aid", nil];
    //    localNotification.userInfo = infoDic;
    
    // 通知重復(fù)提示的單位怪得,可以是天、周卑硫、月徒恋,如果提示間隔設(shè)置了,比如:設(shè)置為 kCFCalendarUnitDay 欢伏,那么每天的這個時間你都會收到這個通知入挣。
    localNotification.repeatInterval = 0;
    NSLog(@"%@", localNotification);
    // 本地通知打印的格式  <UIConcreteLocalNotification: 0x17e23650>{fire date = (null), time zone = Asia/Shanghai (GMT+8) offset 28800, repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = 2016年10月31日 星期一 中國標準時間上午11:16:31, user info = (null)}
   //在規(guī)定的日期觸發(fā)通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    
    // 立即觸發(fā)一個通知, 會彈出一個alert
    //        [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];

獲取和刪除本地的通知:

    /**
     * 獲取本地通知
     * 注意:已經(jīng)發(fā)出且過期的通知會從數(shù)組里自動移除硝拧。比如說你現(xiàn)在發(fā)出一個通知径筏,沒有延遲,你打印一下本地的全部的通知會發(fā)現(xiàn)障陶,并沒有這個通知滋恬,那是因為這個通知已經(jīng)發(fā)出過了,就系統(tǒng)自動刪除了抱究。如果是一個重復(fù)的通知恢氯,比如說,每天都會定時發(fā)出的通知鼓寺,你就能從數(shù)組中獲取的到勋拟。總之一句話妈候。過期的通知會自動從數(shù)組中移除敢靡。
     *    1. 獲取本地全部的通知
     *    2. 獲取本地的特定的通知
     */
    // 1.獲取全部的通知
    NSArray *localNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
    NSLog(@"全部的通知 = %@", localNotifications);
    // 2.獲取特定的通知,userInfo中有你想要的數(shù)據(jù)
    for (UILocalNotification *notify in localNotifications) {
        if ([[notify.userInfo objectForKey:@"id"] isEqualToString:@"通知的名字"]) {
            //取消一個特定的通知
            [[UIApplication sharedApplication] cancelLocalNotification:notify];
            break;
        }
    }

剛才我們說了APP的啟動方式州丹,創(chuàng)建和獲取本地通知醋安,那么當應(yīng)用受到本地通知怎么處理呢?系統(tǒng)為我們提供的有方法墓毒,一起來看一下吧吓揪。

 /**
 * 當用戶點擊本地通知進入app的時候調(diào)用(app當時并沒有被關(guān)閉)
 * 若app已關(guān)閉不會被調(diào)用此方法
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    // 判斷應(yīng)用程序當前的運行狀態(tài),如果是激活狀態(tài)所计,則進行提醒柠辞,否則不提醒
    if (application.applicationState == UIApplicationStateActive) {
        self.first.labelTitle.text = @"應(yīng)用在前臺";
    } else if (application.applicationState == UIApplicationStateBackground) {
        self.first.labelTitle.text = @"應(yīng)用在后臺";
    } else { // 應(yīng)用在沒有被殺死是,點擊本地通知主胧,將執(zhí)行這個方法
        // 在這里你可以做頁面的跳轉(zhuǎn)
        self.first.labelTitle.text = @"用戶點擊本地通知進入app叭首,并且app當時沒有關(guān)閉";
    }
}

那么到現(xiàn)在為止本地通知差不多已經(jīng)說完了,大家如果想看遠程推送的東西踪栋,可以私信我焙格,我一定會在第一時間給大家回復(fù)的。????????????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夷都,一起剝皮案震驚了整個濱河市眷唉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌囤官,老刑警劉巖冬阳,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異党饮,居然都是意外死亡肝陪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門刑顺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氯窍,“玉大人,你說我怎么就攤上這事捏检≤衤浚” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵贯城,是天一觀的道長熊楼。 經(jīng)常有香客問我,道長能犯,這世上最難降的妖魔是什么鲫骗? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮踩晶,結(jié)果婚禮上执泰,老公的妹妹穿的比我還像新娘。我一直安慰自己渡蜻,他們只是感情好术吝,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布计济。 她就那樣靜靜地躺著,像睡著了一般排苍。 火紅的嫁衣襯著肌膚如雪沦寂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天淘衙,我揣著相機與錄音传藏,去河邊找鬼。 笑死彤守,一個胖子當著我的面吹牛毯侦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播具垫,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼侈离,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筝蚕?” 一聲冷哼從身側(cè)響起霍狰,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饰及,沒想到半個月后蔗坯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡燎含,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年宾濒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屏箍。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡绘梦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赴魁,到底是詐尸還是另有隱情卸奉,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布颖御,位于F島的核電站榄棵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏潘拱。R本人自食惡果不足惜疹鳄,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芦岂。 院中可真熱鬧瘪弓,春花似錦、人聲如沸禽最。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呛占,卻和暖如春宁赤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栓票。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留愕够,地道東北人走贪。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像惑芭,于是被迫代替她去往敵國和親坠狡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,277評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理遂跟,服務(wù)發(fā)現(xiàn)逃沿,斷路器,智...
    卡卡羅2017閱讀 134,695評論 18 139
  • 應(yīng)用程序必須進行適當配置幻锁,才可以接受本地或遠程通知凯亮。配置過程在iOS和OS X略有不同,但基本原理是相同的哄尔。在啟動...
    shenzhenboy閱讀 1,390評論 1 2
  • 一個人獨自生活假消,會干成什么呢? 她很有可能岭接,什么都干不成(不然為什么說人是社交動物呢)富拗。 這是我血淚的生活教訓(xùn)。當...
    阿斯閱讀 354評論 0 1