推送通知(本地推送)

一敦冬、簡介

注意:這里說的推送通知跟NSNotification有所區(qū)別
NSNotification是抽象的,不可見的
推送通知是可見的(能用肉眼看到)

iOS中提供了2種推送通知
本地推送通知(Local Notification)
遠(yuǎn)程推送通知(Remote Notification)

二啊胶、推送通知的作用

可以讓不在前臺(tái)運(yùn)行的app,告知用戶app內(nèi)部發(fā)生了什么事情
還可以在呈現(xiàn)推送通知的同時(shí)播放音效
鎖屏?xí)r也照樣呈現(xiàn)
呈現(xiàn)推送通知的同時(shí),還可以更新app圖標(biāo)的數(shù)字

三遗遵、推送通知的呈現(xiàn)效果總結(jié)

總結(jié)一下搬味,推送通知有5種不同的呈現(xiàn)效果

在屏幕頂部顯示一塊橫幅(顯示具體內(nèi)容)
在屏幕中間彈出一個(gè)UIAlertView(顯示具體內(nèi)容)
在鎖屏界面顯示一塊橫幅(鎖屏狀態(tài)下境氢,顯示具體內(nèi)容)
更新app圖標(biāo)的數(shù)字(說明新內(nèi)容的數(shù)量)
播放音效(提醒作用)

顯示橫幅還是UIAlertView,取決于用戶的設(shè)置

圖片 1.png

用戶也可以決定是否要開啟以下4個(gè)功能:
顯示App圖標(biāo)數(shù)字
播放音效
鎖屏顯示
顯示在“通知中心”

圖片 1.png

發(fā)出推送通知時(shí)碰纬,如果當(dāng)前程序正運(yùn)行在前臺(tái)产还,那么推送通知就不會(huì)被呈現(xiàn)出來
點(diǎn)擊推送通知后,默認(rèn)會(huì)自動(dòng)打開發(fā)出推送通知的app
不管app打開還是關(guān)閉嘀趟,推送通知都能如期發(fā)出

四脐区、本地推送通知

1 .什么是本地推送通知
顧名思義,就是不需要聯(lián)網(wǎng)就能發(fā)出的推送通知(不需要服務(wù)器的支持)

2 .本地推送通知的使用場景
常用來定時(shí)提醒用戶完成一些任務(wù)她按,比如
清理垃圾牛隅、記賬炕柔、買衣服、看電影媒佣、玩游戲

3 .如何發(fā)出本地推送通知
創(chuàng)建本地推送通知對(duì)象

UILocalNotification *ln = [[UILocalNotification alloc] init];

設(shè)置本地推送通知屬性

推送通知的觸發(fā)時(shí)間(何時(shí)發(fā)出推送通知)
@property(nonatomic,copy) NSDate *fireDate;
推送通知的具體內(nèi)容
@property(nonatomic,copy) NSString *alertBody;
在鎖屏?xí)r顯示的動(dòng)作標(biāo)題(完整標(biāo)題:“滑動(dòng)來” + alertAction)
@property(nonatomic,copy) NSString *alertAction;
音效文件名
@property(nonatomic,copy) NSString *soundName;
app圖標(biāo)數(shù)字
@property(nonatomic) NSInteger applicationIconBadgeNumber;
每隔多久重復(fù)發(fā)一次推送通知
@property(nonatomic) NSCalendarUnit repeatInterval;

點(diǎn)擊推送通知打開app時(shí)顯示的啟動(dòng)圖片
@property(nonatomic,copy) NSString *alertLaunchImage;

附加的額外信息
@property(nonatomic,copy) NSDictionary *userInfo;

時(shí)區(qū)
@property(nonatomic,copy) NSTimeZone *timeZone;
(一般設(shè)置為[NSTimeZone defaultTimeZone] 匕累,跟隨手機(jī)的時(shí)區(qū))

調(diào)度本地推送通知(調(diào)度完畢后,推送通知會(huì)在特地時(shí)間fireDate發(fā)出)

[[UIApplication sharedApplication] scheduleLocalNotification:ln];

獲得被調(diào)度(定制)的所有本地推送通知

@property(nonatomic,copy) NSArray *scheduledLocalNotifications;
(已經(jīng)發(fā)出且過期的推送通知就算調(diào)度結(jié)束默伍,會(huì)自動(dòng)從這個(gè)數(shù)組中移除)

取消調(diào)度本地推送通知

- (void)cancelLocalNotification:(UILocalNotification *)notification;
- (void)cancelAllLocalNotifications;

立即發(fā)出本地推送通知

- (void)presentLocalNotificationNow:(UILocalNotification *)notification;

4.點(diǎn)擊本地推送通知
當(dāng)用戶點(diǎn)擊本地推送通知欢嘿,會(huì)自動(dòng)打開app,這里有2種情況
app并沒有關(guān)閉也糊,一直隱藏在后臺(tái)
讓app進(jìn)入前臺(tái)炼蹦,并會(huì)調(diào)用AppDelegate的下面方法(并非重新啟動(dòng)app)

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;

app已經(jīng)被關(guān)閉(進(jìn)程已死)
啟動(dòng)app,啟動(dòng)完畢會(huì)調(diào)用AppDelegate的下面方法

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

launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對(duì)象
5.iOS 8.0的變化
在iOS 8.0中狸剃,如果要使用本地通知掐隐,需要得到用戶的許可
在didFinishLaunchingWithOptions方法中添加如下代碼:

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

[application registerUserNotificationSettings:settings];

五、iOS的本地推送刪除不了解決方法

最近在研究蘋果推送,當(dāng)測試本地推送的時(shí)候,發(fā)現(xiàn)一個(gè)問題,就是一旦你添加了一個(gè)本地推動(dòng)的通知,當(dāng)你修改代碼,刪除應(yīng)用,當(dāng)你再次運(yùn)行app,它還是會(huì)在橫幅上面彈出推送,尼瑪怎么搞都刪除不了,近乎崩潰了,開始以為是ios7的Bug,蘋果爹自ios7之后各種bug曾出不窮,不過最后冷靜思考了一下,有木有可能App本地的推送是設(shè)置系統(tǒng)里面,所以你在app刪除本地推送的代碼都沒辦法取消推送,于是終于給我找到了一個(gè) cancelAllLocalNotifications方法,尼瑪,蛋疼的本地推送終于不見了...狗皮膏藥般的惡魔終于不見了.

這個(gè)是產(chǎn)生本地推送的一個(gè)本地通知,一旦你運(yùn)行它,那么恭喜,你刪除app,修改代碼,再安裝,橫幅就一直尼瑪?shù)膹椦綇?..

 UILocalNotification *notification = [[UILocalNotification alloc] init];
    
    //設(shè)置10秒之后
    
    NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];
    
    if (notification != nil) {
        
        // 設(shè)置推送時(shí)間
        
        notification.fireDate = pushDate;
        
        // 設(shè)置時(shí)區(qū)
        
        notification.timeZone = [NSTimeZone defaultTimeZone];
        
        // 設(shè)置重復(fù)間隔
        
        notification.repeatInterval = kCFCalendarUnitDay;
        
        // 推送聲音
        
        notification.soundName = UILocalNotificationDefaultSoundName;
        
        // 推送內(nèi)容
        
        notification.alertBody = @"推送內(nèi)容";
        
        //顯示在icon上的紅色圈中的數(shù)子
        
        notification.applicationIconBadgeNumber = 1;
        
        //設(shè)置userinfo 方便在之后需要撤銷的時(shí)候使用
        
        NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"];
        
        notification.userInfo = info;  
        
        //添加推送到UIApplication       
        
        UIApplication *app = [UIApplication sharedApplication];  
        
        [app scheduleLocalNotification:notification];

怎么才能取消這種流氓行為呢钞馁?只需要3行代碼,世界瞬間清凈了...順帶刪除掉那個(gè)1的小紅點(diǎn)

UIApplication *app = [UIApplication sharedApplication];
app.applicationIconBadgeNumber = 0;
[app cancelAllLocalNotifications];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虑省,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僧凰,更是在濱河造成了極大的恐慌探颈,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件训措,死亡現(xiàn)場離奇詭異膝擂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隙弛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門架馋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人全闷,你說我怎么就攤上這事叉寂。” “怎么了总珠?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵屏鳍,是天一觀的道長。 經(jīng)常有香客問我局服,道長钓瞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任淫奔,我火速辦了婚禮山涡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己鸭丛,他們只是感情好竞穷,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳞溉,像睡著了一般瘾带。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熟菲,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天看政,我揣著相機(jī)與錄音,去河邊找鬼抄罕。 笑死允蚣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贞绵。 我是一名探鬼主播厉萝,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼恍飘,長吁一口氣:“原來是場噩夢啊……” “哼榨崩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起章母,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤母蛛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乳怎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彩郊,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年蚪缀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秫逝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡询枚,死狀恐怖违帆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情金蜀,我是刑警寧澤刷后,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站渊抄,受9級(jí)特大地震影響尝胆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜护桦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一含衔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦抱慌、人聲如沸逊桦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽强经。三九已至,卻和暖如春寺渗,著一層夾襖步出監(jiān)牢的瞬間匿情,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工信殊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炬称,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓涡拘,卻偏偏與公主長得像玲躯,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳄乏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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