推送通知

什么是推送通知?

APP退到后臺(tái),或者關(guān)閉時(shí);應(yīng)用推送一條消息告訴用戶某件事情,應(yīng)用通過(guò)點(diǎn)擊通知進(jìn)入到應(yīng)用相應(yīng)的頁(yè)面.

推送通知應(yīng)用場(chǎng)景?

推送通知應(yīng)用場(chǎng)景很多比如:

(1)一些任務(wù)管理APP,會(huì)在任務(wù)時(shí)間即將到達(dá)時(shí),通知你做該任務(wù);

(2)健身App定時(shí)提醒你應(yīng)該健身了;

(3)買過(guò)電影火車票后,提前半小時(shí)告訴你,電影即將開場(chǎng),火車即將發(fā)車;

(4)當(dāng)你QQ或者微信收到消息時(shí),即使退到后臺(tái),或者關(guān)閉APP,也可以收到信息通知告訴我們;

(5)電商APP,推送一條消息通知我們有新品等等

(6)大文件,電影后臺(tái)下載時(shí),下載完成推送通知告知用戶,文件已經(jīng)下載完成.

推送通知的分類

本地通知:

通知發(fā)送方: 開發(fā)人員負(fù)責(zé)在APP內(nèi)發(fā)送

應(yīng)用場(chǎng)景: 確定知道未來(lái)某個(gè)時(shí)間點(diǎn)應(yīng)該提醒用戶什么

遠(yuǎn)程推送通知:

遠(yuǎn)程推送服務(wù),又稱為APNs(Apple Push Notification Services)

通知發(fā)送方: 服務(wù)器

應(yīng)用場(chǎng)景:

1. 不確定未來(lái)某個(gè)時(shí)間點(diǎn)應(yīng)該提醒用戶什么,臨時(shí)性的

2. 當(dāng)APP徹底退出時(shí)也想繼續(xù)讓用戶獲取一些最新消息

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

用戶接收的推送通知,都會(huì)在通知欄彈出,所有通知都匯總在“通知中心”

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

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

在鎖屏界面顯示一塊橫幅(鎖屏狀態(tài)下,顯示具體內(nèi)容)

更新app圖標(biāo)的數(shù)字(說(shuō)明新內(nèi)容的數(shù)量)

播放音效(提醒作用)

用戶也可以決定是否要開啟以下4個(gè)功能:

顯示App圖標(biāo)數(shù)字

播放音效

鎖屏顯示

顯示在“通知中心”


創(chuàng)建本地推送通知對(duì)象

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

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

推送通知的觸發(fā)時(shí)間(何時(shí)發(fā)出推送通知)

@property(nonatomic,strong) NSDate *fireDate;

推送通知的具體內(nèi)容

@property(nonatomic,strong) NSString *alertBody;

在鎖屏?xí)r顯示的動(dòng)作標(biāo)題(完整標(biāo)題:“滑動(dòng)來(lái)” + alertAction)

@property(nonatomic,strong) NSString *alertAction;

音效文件名

@property(nonatomic,strong) NSString *soundName;

app圖標(biāo)數(shù)字

@property(nonatomic,assign) NSInteger applicationIconBadgeNumber;

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

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

[[UIApplication sharedApplication] scheduleLocalNotification:ln];

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

@property(nonatomic,strong)NSArray*scheduledLocalNotifications;

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

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

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

- (void)cancelAllLocalNotifications;

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

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

本地推送通知的其他屬性

每隔多久重復(fù)發(fā)一次推送通知

@property(nonatomic,assign) NSCalendarUnit repeatInterval;

點(diǎn)擊推送通知打開app時(shí)顯示的啟動(dòng)圖片

@property(nonatomic,strong) NSString *alertLaunchImage;

附加的額外信息

@property(nonatomic,strong) NSDictionary *userInfo;

時(shí)區(qū)

@property(nonatomic,strong) NSTimeZone *timeZone;

(一般設(shè)置為[NSTimeZone defaultTimeZone] ,跟隨手機(jī)的時(shí)區(qū))

點(diǎn)擊本地推送通知

當(dāng)用戶點(diǎn)擊本地推送通知,會(huì)自動(dòng)打開app,這里有2種情況

app并沒(méi)有關(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ù)通過(guò)UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對(duì)象

iOS 8.0的變化

在iOS 8.0中,如果要使用本地通知,需要得到用戶的許可

在didFinishLaunchingWithOptions方法中添加如下代碼:

if(系統(tǒng)版本 >= 8.0) { // 注冊(cè)接收通知的類型?

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

?[application registerUserNotificationSettings:settings]; // 注冊(cè)允許接收遠(yuǎn)程推送通知

?[application registerForRemoteNotifications];?

} else { // 如果是iOS7.0,使用以下方法注冊(cè)

?[application registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];?

}

Swift代碼:

func registerAuthor() {

if #available(iOS 8.0, *) {

let type = UIUserNotificationType.Alert.rawValue | UIUserNotificationType.Badge.rawValue | UIUserNotificationType.Sound.rawValue

let sets = UIUserNotificationSettings(forTypes: UIUserNotificationType(rawValue: type), categories: nil)

UIApplication.sharedApplication().registerUserNotificationSettings(sets)

}

}


控制器:

// 1. 創(chuàng)建一個(gè)本地通知

let localNot = UILocalNotification()

// 1.1 設(shè)置通知的必選項(xiàng)

localNot.alertBody = "我是一個(gè)本地通知"

// 1.2 通知的發(fā)送時(shí)間

localNot.fireDate = NSDate(timeIntervalSinceNow: 2)

// 重復(fù)周期

//? ? ? ? localNot.repeatInterval = .Minute

// 設(shè)置鎖屏滑動(dòng)文字

localNot.hasAction = true

localNot.alertAction = "回復(fù)"

// 啟動(dòng)圖片(當(dāng)用戶點(diǎn)擊了本地通知, 啟動(dòng)我們APP 的時(shí)候, 帶的啟動(dòng)圖片)

// 如果是在ios9.0以前, 當(dāng)鎖屏界面, 出現(xiàn)一個(gè)通知, 用戶點(diǎn)擊了通知, 啟動(dòng)APP 的時(shí)候, 會(huì)自動(dòng)將我們?cè)O(shè)置的圖片, 當(dāng)做啟動(dòng)圖像 來(lái)顯示

// ios9.0, 這個(gè)屬性, 不太靈

// 如果這個(gè)圖片,找不到, 會(huì)使用系統(tǒng)默認(rèn)的啟動(dòng)圖片

localNot.alertLaunchImage = "xxx"

// 設(shè)置通知彈框的標(biāo)題

// 標(biāo)題, 這對(duì)于, 通知中心的通知有效

if #available(iOS 8.2, *) {

localNot.alertTitle = "通知標(biāo)題"

}

// 設(shè)置通知的聲音

localNot.soundName = "通知聲音文件.aac"

// 設(shè)置圖標(biāo)右上角的數(shù)字(0 代表不顯示)

localNot.applicationIconBadgeNumber = 1


// 2. 發(fā)送本地通知

// 應(yīng)用程序級(jí)別的操作

//? ? ? ? UIApplication.sharedApplication().presentLocalNotificationNow(localNot)

UIApplication.sharedApplication().scheduleLocalNotification(localNot)


// 取消所有計(jì)劃的通知

UIApplication.sharedApplication().cancelAllLocalNotifications()

遠(yuǎn)程推送

一.開發(fā)iOS程序的推送功能, iOS端需要做的事

1.請(qǐng)求蘋果獲得deviceToken

2.得到蘋果返回的deviceToken,發(fā)送deviceToken給公司的服務(wù)器

3. 監(jiān)聽用戶對(duì)通知的點(diǎn)擊

二.調(diào)試iOS的遠(yuǎn)程推送功能, 必備條件:

1.真機(jī)

2.調(diào)試推送需要的證書文件

1> aps_development.cer : 某臺(tái)電腦就能調(diào)試某個(gè)app的推送服務(wù)

2> iphone5_qq.mobileprovision : 某臺(tái)電腦就能利用某臺(tái)設(shè)備調(diào)試某個(gè)程序

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

1> aps_production.cer : 如果發(fā)布的程序中包含了推送服務(wù),就必須安裝這個(gè)證書

2> qq.mobileprovision? : 某臺(tái)電腦就能發(fā)布某個(gè)程序

遠(yuǎn)程推送應(yīng)用配置過(guò)程

1. 創(chuàng)建支持遠(yuǎn)程推送功能的App ID

2. 創(chuàng)建調(diào)試證書,并選中剛剛創(chuàng)建的App ID

3. 下載CER文件,并導(dǎo)入鑰匙串管理

4. 創(chuàng)建發(fā)布證書,并選中剛剛創(chuàng)建的App ID

5. 下載CER文件,并導(dǎo)入鑰匙串管理

6. 檢查App ID,確認(rèn)證書已經(jīng)指定

7. 生成描述文件

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

注意

遠(yuǎn)程推送只能在真機(jī)上測(cè)試!因此先要保證真機(jī)調(diào)試的環(huán)境沒(méi)有問(wèn)題!

遠(yuǎn)程推送的第一步是要?jiǎng)?chuàng)建App ID

目的是說(shuō)明哪個(gè)App需要使用推送服務(wù)

為遠(yuǎn)程推送服務(wù)創(chuàng)建的App ID一定要是全稱,不能帶有*

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

有生產(chǎn)證書和發(fā)布證書,生產(chǎn)證書用來(lái)調(diào)試,發(fā)布證書用來(lái)發(fā)布應(yīng)用,應(yīng)用上線之前必須配置好推送發(fā)布證書,發(fā)布應(yīng)用之后才能使用推送功能,如果上線的應(yīng)用推送證書沒(méi)有配置好,打包上線審核時(shí)蘋果會(huì)通過(guò)郵件的形式提醒開發(fā)者,否則應(yīng)用將沒(méi)有推送功能

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

證書配置04 – 安裝

最終會(huì)得到3個(gè)文件

aps_development.cer:真機(jī)調(diào)試用的

aps_production.cer:發(fā)布程序用的

netease_news_iphone5_home.mobileprovision:描述文件

建議:先安裝cer文件,再安裝mobileprovision文件

注冊(cè)遠(yuǎn)程推送通知

客戶端如果想接收APNs的遠(yuǎn)程推送通知,必須先注冊(cè)(得到用戶的授權(quán))

一般在App啟動(dòng)完畢后就馬上注冊(cè)

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

{

// 注冊(cè)遠(yuǎn)程通知

UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;

[application registerForRemoteNotificationTypes:type];

return YES; }

注冊(cè)成功后會(huì)調(diào)用AppDelegate的下面方法,得到設(shè)備的deviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

NSLog(@"%@", deviceToken); ? }

JPush

一套遠(yuǎn)程推送解決方案,支持android和iOS兩個(gè)平臺(tái)

它能夠快捷地為iOS App增加推送功能,減少集成APNs需要的工作量、開發(fā)復(fù)雜度

更多的信息,可以參考JPush官方網(wǎng)站:https://www.jpush.cn

集成iOS SDK的步驟可以參考

http://docs.jpush.cn/pages/viewpage.action?pageId=2621727

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

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

  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,761評(píng)論 10 16
  • 推送通知注意:這里說(shuō)的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的,不可見的...
    醉葉惜秋閱讀 1,535評(píng)論 0 3
  • 一、推送通知 注意:這里說(shuō)的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的,不...
    Mg明明就是你閱讀 1,256評(píng)論 0 17
  • 推送通知 1. 什么是推送通知? 2. 推送通知的應(yīng)用場(chǎng)景? 3. 推送通知的展現(xiàn)樣式? 4. 推送通知的分類 本...
    翻這個(gè)墻閱讀 593評(píng)論 1 0
  • 推送通知 推送通知的作用 推送通知的呈現(xiàn)效果 推送通知的呈現(xiàn)效果總結(jié) 總結(jié)一下,推送通知有5種不同的呈現(xiàn)效果 1....
    Hevin_Chen閱讀 471評(píng)論 0 0