iOS-通知相關

  • 傳智播客 課件整理

推送通知

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

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

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

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

  • n推送通知的作用

可以讓不在前臺運行的app,告知用戶app內部發生了什么事情

  • 推送通知的呈現效果

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


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

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


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

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

4.呈現推送通知的同時,還可以更新app圖標的數字
呈現推送通知的同時,還可以更新app圖標的數字 .png

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

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

  • 推送通知的呈現效果設置

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


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

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

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

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

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

  • 推送通知的使用細節

1.發出推送通知時,如果當前程序正運行在前臺,那么推送通知就不會被呈現出來
2.點擊推送通知后,默認會自動打開發出推送通知的app
3.不管app打開還是關閉,推送通知都能如期發出

本地推送通知

  • 什么是本地推送通知

顧名思義,就是不需要聯網就能發出的推送通知(不需要服務器的支持)

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

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

如何發出本地推送通知

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

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

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

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

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

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

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

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

遠程推送通知

  • 什么是遠程推送通知

顧名思義,就是從遠程服務器推送給客戶端的通知(需要聯網)
遠程推送服務,又稱為APNs(Apple Push Notification Services)
為什么需要遠程推送通知?
傳統獲取數據的局限性
只要用戶關閉了app,就無法跟app的服務器溝通,無法從服務器上獲得最新的數據內容
遠程推送通知可以解決以上問題
不管用戶打開還是關閉app,只要聯網了,都能接收到服務器推送的遠程通知

  • 遠程推送通知使用須知
  • 所有的蘋果設備,在聯網狀態下,都會與蘋果的服務器建立長連接
  • 什么是長連接
    只要聯網了,就一直建立連接
  • 長連接的作用
 -  時間校準
 -  系統升級
 -  查找我的iPhone
 -  .....
  • 長連接的好處
  • 數據傳輸速度快
  • 數據保持最新狀態

上兩張推送的原理圖

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

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

官方文檔的解釋

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

官方文檔05.png

證書配置

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

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

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

三.發布具有推送服務的app

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

證書配置01 – 創建AppID

  • n注意

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

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

證書配置02 – 為AppID創建APNs SSL證書

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

pAPNsDevelopmentiOS:真機調試用的證書
pAPNsProductioniOS:發布程序用的證書

證書配置-09.png

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

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

證書配置04 –安裝

  • 最終會得到3個文件

paps_development.cer:真機調試用的
paps_production.cer:發布程序用的
pnetease_news_iphone5_home.mobileprovision:描述文件

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

注冊遠程推送通知

  • 客戶端如果想接收APNs的遠程推送通知,必須先注冊(得到用戶的授權)
  • 一般在App啟動完畢后就馬上注冊
//這個方法在iOS8已經廢棄  
  - (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];
    }
  • 如果是第一次注冊,會彈出下邊的對話框
發送通知.png

注冊遠程推送通知

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

點擊遠程推送通知

n當用戶點擊遠程推送通知,會自動打開app,這里有2種情況
papp并沒有關閉,一直隱藏在后臺
ü讓app進入前臺,并會調用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo;
p
papp已經被關閉(進程已死)
ü啟動app,啟動完畢會調用AppDelegate的下面方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
2launchOptions參數通過UIApplicationLaunchOptionsRemoteNotificationKey取出服務器返回的字典內容
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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