iOS-通知相關

  • 傳智播客 課件整理

推送通知

  • 注意:這里說的推送通知跟NSNotification有所區(qū)別

1.NSNotification是抽象的鹅搪,不可見的
2.推送通知是可見的(能用肉眼看到)

  • iOS中提供了2種推送通知

1.本地推送通知(LocalNotification)
2.遠程推送通知(RemoteNotification)

  • n推送通知的作用

可以讓不在前臺運行的app站绪,告知用戶app內(nèi)部發(fā)生了什么事情

  • 推送通知的呈現(xiàn)效果

1.在屏幕頂部顯示一塊橫幅


在屏幕頂部顯示一塊橫幅.png

2.在屏幕中間彈出一個UIAlertView


在屏幕中間彈出一個UIAlertView .png

還可以在呈現(xiàn)推送通知的同時播放音效
3.鎖屏時也照樣呈現(xiàn)
鎖屏時也照樣呈現(xiàn) .png

4.呈現(xiàn)推送通知的同時,還可以更新app圖標的數(shù)字
呈現(xiàn)推送通知的同時丽柿,還可以更新app圖標的數(shù)字 .png

5.用戶接收的推送通知恢准,都會展示在“通知中心”
用戶接收的推送通知,都會展示在“通知中心”.png
  • 推送通知的呈現(xiàn)效果總結

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

  • 推送通知的呈現(xiàn)效果設置

顯示橫幅還是UIAlertView顷歌,取決于用戶的設置


顯示橫幅還是UIAlertView,取決于用戶的設置 1.png

顯示橫幅還是UIAlertView幔睬,取決于用戶的設置 2.png

顯示橫幅還是UIAlertView眯漩,取決于用戶的設置 3.png

顯示橫幅還是UIAlertView,取決于用戶的設置 4.png
  • 推送通知的呈現(xiàn)效果設置

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

  • 推送通知的使用細節(jié)

1.發(fā)出推送通知時麻顶,如果當前程序正運行在前臺赦抖,那么推送通知就不會被呈現(xiàn)出來
2.點擊推送通知后,默認會自動打開發(fā)出推送通知的app
3.不管app打開還是關閉辅肾,推送通知都能如期發(fā)出

本地推送通知

  • 什么是本地推送通知

顧名思義队萤,就是不需要聯(lián)網(wǎng)就能發(fā)出的推送通知(不需要服務器的支持)

  • 本地推送通知的使用場景

常用來定時提醒用戶完成一些任務,比如
清理垃圾矫钓、記賬要尔、買衣服、看電影新娜、玩游戲

如何發(fā)出本地推送通知

  • 創(chuàng)建本地推送通知對象
UILocalNotification*ln= [[UILocalNotificationalloc] init];

n設置本地推送通知屬性
p推送通知的觸發(fā)時間(何時發(fā)出推送通知)
@property(nonatomic,copy) NSDate*fireDate;
p推送通知的具體內(nèi)容
@property(nonatomic,copy) NSString*alertBody;
p在鎖屏時顯示的動作標題(完整標題:“滑動來”+ alertAction)
@property(nonatomic,copy) NSString*alertAction;
p音效文件名
@property(nonatomic,copy) NSString*soundName;
papp圖標數(shù)字
@property(nonatomic) NSIntegerapplicationIconBadgeNumber;
  • 如何發(fā)出本地推送通知
n調(diào)度本地推送通知(調(diào)度完畢后赵辕,推送通知會在特地時間fireDate發(fā)出)
[[UIApplicationsharedApplication] scheduleLocalNotification:ln];

n獲得被調(diào)度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray*scheduledLocalNotifications;
(已經(jīng)發(fā)出且過期的推送通知就算調(diào)度結束,會自動從這個數(shù)組中移除)

n取消調(diào)度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification*)notification;
- (void)cancelAllLocalNotifications;

n立即發(fā)出本地推送通知
- (void)presentLocalNotificationNow:(UILocalNotification*)notification;
  • 本地推送通知的其他屬性
n每隔多久重復發(fā)一次推送通知
@property(nonatomic) NSCalendarUnitrepeatInterval;

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

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

n時區(qū)
@property(nonatomic,copy) NSTimeZone*timeZone;
(一般設置為[NSTimeZonedefaultTimeZone]概龄,跟隨手機的時區(qū))
  • 點擊本地推送通知
n當用戶點擊本地推送通知还惠,會自動打開app,這里有2種情況
papp并沒有關閉私杜,一直隱藏在后臺
ü讓app進入前臺蚕键,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification;
p
papp已經(jīng)被關閉(進程已死)
ü啟動app救欧,啟動完畢會調(diào)用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
2launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對象

遠程推送通知

  • 什么是遠程推送通知

顧名思義,就是從遠程服務器推送給客戶端的通知(需要聯(lián)網(wǎng))
遠程推送服務锣光,又稱為APNs(Apple Push Notification Services)
為什么需要遠程推送通知笆怠?
傳統(tǒng)獲取數(shù)據(jù)的局限性
只要用戶關閉了app,就無法跟app的服務器溝通嫉晶,無法從服務器上獲得最新的數(shù)據(jù)內(nèi)容
遠程推送通知可以解決以上問題
不管用戶打開還是關閉app骑疆,只要聯(lián)網(wǎng)了,都能接收到服務器推送的遠程通知

  • 遠程推送通知使用須知
  • 所有的蘋果設備替废,在聯(lián)網(wǎng)狀態(tài)下箍铭,都會與蘋果的服務器建立長連接
  • 什么是長連接
    只要聯(lián)網(wǎng)了,就一直建立連接
  • 長連接的作用
 -  時間校準
 -  系統(tǒng)升級
 -  查找我的iPhone
 -  .....
  • 長連接的好處
  • 數(shù)據(jù)傳輸速度快
  • 數(shù)據(jù)保持最新狀態(tài)

上兩張推送的原理圖

D43C70DA-2431-4D8F-A43A-81B2D71D739F.png

AD95B25B-4C13-4A4F-B9B8-53B5C98A05CF.png
  • 針對第二張圖這里有個疑問椎镣,如果我們在同一個設備上用不同的賬號登錄QQ诈火,推送怎么識別不同的賬號?
  • 本教程來自傳智播客状答,感謝傳智播客的詳細資料

官方文檔的解釋

官方文檔01.png
官方文檔02.png
  • n遠程推送的內(nèi)容格式(服務器推送給客戶端的內(nèi)容格式---JSON)
官方文檔03.png
  • 獲得deviceToken的過程
官方文檔04.png

官方文檔05.png

證書配置

一.開發(fā)iOS程序的推送功能,iOS端需要做的事
1.請求蘋果獲得deviceToken
2.得到蘋果返回的deviceToken
3.發(fā)送deviceToken給公司的服務器
4.監(jiān)聽用戶對通知的點擊

二.調(diào)試iOS的遠程推送功能,必備條件:
1.真機
2.調(diào)試推送需要的證書文件

1 aps_development.cer: 某臺電腦就能調(diào)試某個app的推送服務
2 ios_development.cer:讓電腦具備真機調(diào)試的能力(調(diào)試設備)
3 iphone5_qq.mobileprovision:某臺電腦就能利用某臺設備調(diào)試某個程序

三.發(fā)布具有推送服務的app

1 aps_production.cer:如果發(fā)布的程序中包含了推送服務,就必須安裝這個證書
2 ios_distribution.cer : 讓電腦具備發(fā)布程序的能力
3 qq.mobileprovision : 某臺電腦就能發(fā)布某個程序

證書配置01 – 創(chuàng)建AppID

  • n注意

p遠程推送只能在真機上測試冷守!因此先要保證真機調(diào)試的環(huán)境沒有問題!
p
n遠程推送的第一步是要創(chuàng)建App ID
p目的是說明哪個App需要使用推送服務
p為遠程推送服務創(chuàng)建的AppID一定要是全稱惊科,不能帶有*

證書配置-01.png
證書配置-02.png

證書配置02 – 為AppID創(chuàng)建APNs SSL證書

  • 真機調(diào)試用的APNs SSL證書:要在哪臺電腦上調(diào)試具有推送服務的App
證書配置-03.png
證書配置-04.png
證書配置-05.png
  • n發(fā)布程序用的APNs SSL證書:要在哪臺電腦上發(fā)布具有推送服務的App
證書配置-06.png
證書配置-07.png
證書配置-08.png
  • n最終得到2個APNs SSL證書

pAPNsDevelopmentiOS:真機調(diào)試用的證書
pAPNsProductioniOS:發(fā)布程序用的證書

證書配置-09.png

證書配置03 – 生成描述文件

  • n描述文件的作用是用來描述
    p哪臺設備要在哪臺電腦上調(diào)試哪個程序
證書配置-10.png
證書配置-11.png
證書配置-12.png

證書配置04 –安裝

  • 最終會得到3個文件

paps_development.cer:真機調(diào)試用的
paps_production.cer:發(fā)布程序用的
pnetease_news_iphone5_home.mobileprovision:描述文件

  • 建議:先安裝cer文件拍摇,再安裝mobileprovision文件
證書配置-13.png

注冊遠程推送通知

  • 客戶端如果想接收APNs的遠程推送通知,必須先注冊(得到用戶的授權)
  • 一般在App啟動完畢后就馬上注冊
//這個方法在iOS8已經(jīng)廢棄  
  - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
 //注冊遠程通知
      UIRemoteNotificationTypetype= UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge| UIRemoteNotificationTypeSound;
   [application registerForRemoteNotificationTypes:type];
   returnYES;
} 
```

```
//使用下面的代碼
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:userSettings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    } else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    }
  • 如果是第一次注冊馆截,會彈出下邊的對話框
發(fā)送通知.png

注冊遠程推送通知

n注冊成功后會調(diào)用AppDelegate的下面方法充活,得到設備的deviceToken
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
   NSLog(@"%@", deviceToken);
}

點擊遠程推送通知

n當用戶點擊遠程推送通知,會自動打開app蜡娶,這里有2種情況
papp并沒有關閉混卵,一直隱藏在后臺
ü讓app進入前臺,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo;
p
papp已經(jīng)被關閉(進程已死)
ü啟動app窖张,啟動完畢會調(diào)用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
2launchOptions參數(shù)通過UIApplicationLaunchOptionsRemoteNotificationKey取出服務器返回的字典內(nèi)容
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幕随,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宿接,更是在濱河造成了極大的恐慌赘淮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睦霎,死亡現(xiàn)場離奇詭異拥知,居然都是意外死亡,警方通過查閱死者的電腦和手機碎赢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速梗,“玉大人肮塞,你說我怎么就攤上這事襟齿。” “怎么了枕赵?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵猜欺,是天一觀的道長。 經(jīng)常有香客問我拷窜,道長开皿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任篮昧,我火速辦了婚禮赋荆,結果婚禮上,老公的妹妹穿的比我還像新娘懊昨。我一直安慰自己窄潭,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布酵颁。 她就那樣靜靜地躺著嫉你,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躏惋。 梳的紋絲不亂的頭發(fā)上幽污,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音簿姨,去河邊找鬼距误。 笑死,一個胖子當著我的面吹牛款熬,可吹牛的內(nèi)容都是我干的深寥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贤牛,長吁一口氣:“原來是場噩夢啊……” “哼惋鹅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起殉簸,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闰集,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后般卑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體武鲁,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年蝠检,在試婚紗的時候發(fā)現(xiàn)自己被綠了沐鼠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饲梭,靈堂內(nèi)的尸體忽然破棺而出乘盖,到底是詐尸還是另有隱情,我是刑警寧澤憔涉,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布订框,位于F島的核電站,受9級特大地震影響兜叨,放射性物質(zhì)發(fā)生泄漏穿扳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一国旷、第九天 我趴在偏房一處隱蔽的房頂上張望矛物。 院中可真熱鬧,春花似錦议街、人聲如沸泽谨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧雹。三九已至,卻和暖如春涂身,著一層夾襖步出監(jiān)牢的瞬間雄卷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工蛤售, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丁鹉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓悴能,卻偏偏與公主長得像揣钦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漠酿,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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

  • 極光推送: 1.JPush當前版本是1.8.2冯凹,其SDK的開發(fā)除了正常的功能完善和擴展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,719評論 10 16
  • 推送通知注意:這里說的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的炒嘲,不可見的...
    醉葉惜秋閱讀 1,515評論 0 3
  • 推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的宇姚,不可...
    iOS開發(fā)攻城獅閱讀 4,222評論 1 13
  • 一、推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的夫凸,不...
    Mg明明就是你閱讀 1,251評論 0 17
  • 什么是推送通知? APP退到后臺,或者關閉時;應用推送一條消息告訴用戶某件事情,應用通過點擊通知進入到應用相應的頁...
    tiger2016閱讀 561評論 0 1