IOS之推送通知(本地推送和遠程推送)

推送通知和NSNotification是有區(qū)別的:

NSNotification:是看不到的

推送通知:是可以看到的

IOS中提供了兩種推送通知

本地推送通知:(Local Notification):手機應用本身的通知,比如:鬧鈴

遠程推送通知:(Remote Notification)從服務器發(fā)送過來的通知

推送通知的作用:讓不在前臺運行的App,告知用戶App內(nèi)部發(fā)生了什么事情.比如我們正在聊微信,突然界面上面出現(xiàn)了黑色半透明橫幅(QQ好友給你發(fā)送的消息)這就是一個推送通知.

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

1:在屏幕頂部顯示一塊橫幅(顯示具體內(nèi)容)

2:在屏幕中間彈出一個UIAlertView(顯示具體內(nèi)容)

3:還可以在呈現(xiàn)推送通知的同時播放音效(提醒作用)

4:屏幕鎖屏時也照樣呈現(xiàn)(顯示具體內(nèi)容)

5:呈現(xiàn)推送通知的同時,還可以更新App圖標右上角的數(shù)字(說明新內(nèi)容的數(shù)量)

6:用戶接收的推送通知,都會展示在通知中心(手指從屏幕頂部往下拉的窗口)(顯示具體的內(nèi)容)

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

StartFragment

1:發(fā)出推送通知時,如果當前程序正運行在前臺,那么推送通知就不會被呈現(xiàn)出來

2:點擊推送通知后,默認會自動打開發(fā)出推送通知的app

3:不管app打開還是關閉,推送通知都能如期發(fā)出

什么是本地推送通知:

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

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

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

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

步驟:

1:注冊通知類型(IOS8以后)

2:創(chuàng)建本地推送通知對象

3:定制一個通知

import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

  • (void)viewDidLoad {

    [super viewDidLoad];

    //1 :IOS8以后需要注冊通知類型,包含哪些(聲音,圖標文字,)信息,

    /*

    UIUserNotificationTypeNone = 0

    UIUserNotificationTypeBadge = 1 << 0 包含圖標文字(左上角的數(shù)字)0001

    UIUserNotificationTypeSound = 1 << 1 聲音 ----------------->0010

    UIUserNotificationTypeAlert = 1 << 2 主題內(nèi)容--------------->0100

    目前是:0111,這個值是數(shù)值,下面的|||之間的內(nèi)容相當于數(shù)值

    */

    // |:位移運算符

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

[[UIApplication sharedApplication]registerUserNotificationSettings:seting];    

}

  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    //告訴它有一個本地通知

    //2:創(chuàng)建一個本地推送通知對象

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

    /*

    // timer-based scheduling 特定的時間發(fā)出通知

    @property(nonatomic,copy) NSDate *fireDate;觸發(fā)時間

    @property(nonatomic,copy) NSTimeZone *timeZone;時區(qū)

    @property(nonatomic) NSCalendarUnit repeatInterval;重復間隔

    @property(nonatomic,copy) NSCalendar *repeatCalendar;重復間隔

    @property(nonatomic,copy) CLRegion *region NS_AVAILABLE_IOS(8_0);區(qū)域

    @property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0);決定區(qū)域的一個BOOL值

    // alerts警告

    @property(nonatomic,copy) NSString *alertBody; 提醒的主題

    @property(nonatomic) BOOL hasAction; NO不顯示滑動解鎖按鈕 反之顯示

    @property(nonatomic,copy) NSString *alertAction; 滑動解鎖的文字

    @property(nonatomic,copy) NSString *alertLaunchImage; 點擊通知橫幅的時候啟動程序的啟動 圖片

    @property(nonatomic,copy) NSString *alertTitle 提示的標題文字NS_AVAILABLE_IOS(8_2);

    // sound

    @property(nonatomic,copy) NSString *soundName; 伴隨的聲音,默認的是UILocalNotificationDefaultSoundName

    // badge

    @property(nonatomic) NSInteger applicationIconBadgeNumber;圖標右上角的數(shù)字

    // user info

    @property(nonatomic,copy) NSDictionary *userInfo;用戶指定的攜帶參數(shù),轉(zhuǎn)換成鍵值對放在字典里面

    @property (nonatomic, copy) NSString *category NS_AVAILABLE_IOS(8_0);分類

    */

//給這些屬性賦值才能讓通知有特定的內(nèi)容

local.alertBody=@"女神:在嗎?";

//特定的時間讓顯示出來(從現(xiàn)在5秒后顯示出來)

local.fireDate=[NSDate dateWithTimeIntervalSinceNow:5];

//滑動解鎖的文字(在推送通知信息的下面一小行字)

local.alertAction =@"約";

//有聲音給聲音,沒聲音用默認的

local.soundName=@"UILocalNotificationDefaultSoundName";

//設置圖標右上角數(shù)字

local.applicationIconBadgeNumber=19;

//用戶信息

local.userInfo=@{@"name":@"女神",@"content":@"在不",@"time":@"20180101"};

//3:定制一個通知 



[[UIApplication sharedApplication]scheduleLocalNotification:local];

}

@end

什么是遠程推送?

遠程:從遠程服務器推送給客戶端的通知(需要聯(lián)網(wǎng))

從服務器發(fā)送了一個通知,接收到通知以后做的和本地通知類似的事情,這個通知只不過是從遠方的服務器傳過來的,

要做的這個遠程推送通知是由遠程推送服務,又稱為APNs(Apple Push Notification Services:蘋果推送通知服務),蘋果給我們提供了這個服務就可以做遠程推送服務了.

為什么要用蘋果的服務器?-->我們都知道,程序在活著的時候是可以跟自己的服務器進行交互的(程序活著可以執(zhí)行代碼),但只要用戶關閉了app,就無法跟app的服務器溝通,無法從服務器上獲得最新的數(shù)據(jù)內(nèi)容.我們在使用QQ的時候,即使沒有登錄QQ也能收到信息,這就是用遠程推送通知做的.不管登陸還是沒有登陸QQ,都可以接收到,但前提是必須要聯(lián)網(wǎng).

遠程推送通知使用須知:所有的蘋果設備在聯(lián)網(wǎng)狀態(tài)下,都會與蘋果的設備建立長連接(只要建立連接,想發(fā)送數(shù)據(jù),隨時都可以發(fā)送, 始終保持連接),蘋果有一個服務器集群,跟所有的蘋果設備建立長連接

長連接的作用:時間校準,系統(tǒng)升級,查找我的iPhone,

長連接的好處:數(shù)據(jù)保持最新狀態(tài),數(shù)據(jù)傳輸快(以前的連接需要根據(jù)協(xié)議握幾次手,蘋果的直接就是已經(jīng)連接了).

只要和評估偶的設備保持長連接就享受蘋果的APNs服務,舉個例子:

比如說我AgentLXJ現(xiàn)在有一部IPhone手機,手機里面有很多應用比如QQ,QQ有服務器吧,我的手機現(xiàn)在聯(lián)網(wǎng)并且QQ軟件要打開,陌陌的服務器就可以和我交互,我想傳遞消息,或者我接收到了消息,陌陌服務器金額以直接的告訴我.如果退出了QQ(不是卸載),但我的手機還在聯(lián)網(wǎng),這時QQ就不能給我推送消息,這時候蘋果的服務就可以,只要我的手機在聯(lián)網(wǎng)狀態(tài)下(蘋果建立的就是長連接),蘋果要給我推送消息要是知道是哪個設備,怎么區(qū)分是哪一臺設備呢?我們的手機都有自己的唯一標識,有了設備的唯一標識就知道推送給哪一臺設備,但是還有一個問題,我的手機上不可能只有QQ這么一個軟件,比如還有微信,陌陌等軟件,所以蘋果還要知道軟件的BundleID(應用程序的唯一標識),有了設備和程序的唯一標識,就知道了推送給哪個設備的哪個應用程序.現(xiàn)在又有了一個問題,蘋果不知道要推送什么消息內(nèi)容.這里說明一個概念:消息體(來源:是誰發(fā)給我的,比如是:小媳婦.消息內(nèi)容:比如給我說的是:吃飯了么?),蘋果不知道這個消息體,但這個消息QQ知道,我的小媳婦發(fā)的這個消息體先到QQ服務器(告訴QQ我要給他發(fā)送一條消息),QQ服務器先看看被接受的人(我)在線沒有,在線了直接發(fā)過去就完了,如果我不在線,這時蘋果服務器可以發(fā)送,所以要發(fā)給蘋果服務器,但是發(fā)給蘋果服務器是有要求的1:交99美元成為開發(fā)者才能享受此服務.2:消息體 3目標的DeviceToken,QQ的服務器沒有資格保存每一個設備的唯一標識和BundleID,蘋果想了一個辦法,叫做DeviceToken(APPID(應用位置標識)和UUID(設備唯一標識)).告訴我這三點蘋果就可以幫我們做事情,怎么解析DeviceToken蘋果知道,所以QQ有一個數(shù)據(jù)庫,一旦有人注冊或者是登陸(因為手機和蘋果是長連接,一旦登陸或注冊之前就會發(fā)送設備ID和軟件ID,并在蘋果服務器獲得DeviceToken)QQ數(shù)據(jù)庫就會存用戶的信息,比如ID,名字,性別,DeviceToken(假如我的DeviceToken經(jīng)蘋果的加密生成的是ApentLXJ)等等信息,DeviceToken在每次登陸的時候保存,因為用戶有可能換手機,一旦換手機用戶的UUID就換了,這時需要重新生成一個DeviceToken,然后把最新的Devicetoken保存到服務器中,小媳婦我發(fā)消息的時候就去找蘋果,看是否符合上面你的三條(交過錢了,有消息體,有目標的DeviceToken:ApentLXJ)),一看都符合就發(fā)給我了

補充的:一個手機有多少個應用程序就有多少個DeviceToken,

如果QQ同時推送給多臺設備?比如我的QQ手機上登了,IPAD上也登了,這時候取決于QQ服務器的發(fā)給蘋果的APNS的DeviceToken,發(fā)一個就發(fā)給一臺設備,兩個DeviceToken,就發(fā)給兩臺設備.

如果我換了安卓的時候登陸陌陌,這時候就是谷歌來推送通知,谷歌也有一大推服務器來搞.

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

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