推送

制作推送證書

iOS工程開發(fā)指引中對(duì)推送流程的概括如下


服務(wù)端的Provider通過(guò)APNs將信息推送給Client App經(jīng)過(guò)兩步:

1 Provider -> APNs//需要蘋果機(jī)構(gòu)頒發(fā)的證書

2 APNs -> Client//需要DeviceToken標(biāo)志App

制作證書之前中捆,介紹一下iOS的設(shè)計(jì)理念: 基于閉環(huán)和安全的思考羊苟,蘋果公司要求使用APNs服務(wù)的開發(fā)者阴汇,提供開發(fā)時(shí)的Mac設(shè)備、App的ID和運(yùn)行App的手機(jī),通過(guò)對(duì)三者的聯(lián)合檢查,基本上能保證確認(rèn)App的唯一性,保證對(duì)AppStore的管理的安全性和可靠性饶唤。

首先蓝翰,我們?cè)?a target="_blank">蘋果開發(fā)者中心光绕,注冊(cè)自己的App的唯一ID:


繼續(xù)直至Done.

然后制作和AppID相綁定的CER證書


點(diǎn)擊continue:


點(diǎn)擊continue,能夠看到需要?jiǎng)?chuàng)建CSR證書畜份,下面有詳細(xì)創(chuàng)建步驟诞帐,這一步可以綁定開發(fā)設(shè)備Mac。英文很簡(jiǎn)單爆雹,和創(chuàng)建發(fā)布證書時(shí)在「鑰匙串訪問(wèn)」中的操作一樣停蕉。


在「鑰匙串訪問(wèn)」中能得到CSR文件

上傳CSR文件


直至Done,下載CER文件:

在「鑰匙串訪問(wèn)」我的證書中顶别,能看到安裝后的結(jié)果:


可以將證書導(dǎo)出谷徙,單獨(dú)存放。以后別人需要驯绎,方便直接發(fā)送完慧。

打開AppID的PushNotification功能


現(xiàn)在,證書已經(jīng)制作好了

在工程中使用證書

確認(rèn)Target的Identify和Signing:


iOS10中剩失,改進(jìn)了推送的代理方法屈尼,增加了3DTouch效果。下面以iOS10的新方法在AppDelegate添加接受通知的代碼:


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

if(@available(iOS10.0, *)) { [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert) completionHandler:^(BOOLgranted,NSError* _Nullable error) {NSLog(@"%@", error); }]; UNNotificationCategory* generalCategory = [UNNotificationCategory categoryWithIdentifier:@"GENERAL"actions:@[] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];// Create the custom actions for expired timer notifications.UNNotificationAction* snoozeAction = [UNNotificationAction actionWithIdentifier:@"SNOOZE_ACTION"title:@"Snooze"options:UNNotificationActionOptionAuthenticationRequired]; UNNotificationAction* stopAction = [UNNotificationAction actionWithIdentifier:@"STOP_ACTION"title:@"Stop"options:UNNotificationActionOptionDestructive]; UNNotificationAction* forAction = [UNNotificationAction actionWithIdentifier:@"FOR_ACTION"title:@"forAction"options:UNNotificationActionOptionForeground];// Create the category with the custom actions.UNNotificationCategory* expiredCategory = [UNNotificationCategory categoryWithIdentifier:@"TIMER_EXPIRED"actions:@[snoozeAction, stopAction,forAction] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];// Register the notification categories.UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; [center setDelegate:self]; [center setNotificationCategories:[NSSetsetWithObjects:generalCategory, expiredCategory,nil]]; [[UIApplicationsharedApplication] registerForRemoteNotifications]; }else{ }returnYES;}

#pragma mark - UNUserNotificationCenterDelegate- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void(^)(UNNotificationPresentationOptions options))completionHandler{NSLog(@"%s", __func__);}- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler{NSLog(@"%s", __func__);}- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)pToken {//保存deviceTokenNSLog(@"regisger success:%@",pToken);}iOS的遠(yuǎn)程推送需要在真機(jī)上調(diào)試拴孤,如果注冊(cè)成功脾歧,就能在didRegisterForRemoteNotificationsWithDeviceToken方法中獲取APNs返回的DeviceToken,在打印欄可以看到演熟。

使用SmartPush調(diào)試

使用SmartPush可以在電腦上方便的模擬APNs推送鞭执。運(yùn)行程序,選擇我們生成的證書和填上打印欄獲得的DeviceToken芒粹,就能在我們的App中看到APNs推送來(lái)的帶有3DTouch功能的通知兄纺。


{

? ? "aps" : {? ? ? ? ? ? ? ? ? // 必須有? ? ?

?? "alert" : {"body":"主體內(nèi)容","title":"標(biāo)題","subtitle":"子標(biāo)題"},

? ? ? ? "body"? : "string",//消息體

? ? ? ? "badge" : 1,//app的icon右上角的推送數(shù)字 在這里設(shè)置

? ? ? ? "sound" : "default"? ??可以為空,為空就是默認(rèn)的聲音

},

? ? "NotiId"? : 20150821,? ? // 自定義key值

}

-----------------------------------------------------------------------------------------------------------------------

支持后臺(tái)推送語(yǔ)音播報(bào)


推送消息

{"aps":{"alert":"This is some fancy message.","content-available":1}}

? ? //后臺(tái)語(yǔ)音播報(bào)

? ? [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

? ? [[AVAudioSession sharedInstance] setActive:YES error:nil];



-(void)applicationWillResignActive:(UIApplication*)application

{

? ? //結(jié)束接受遠(yuǎn)程控制

? ? [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

}

//后臺(tái)語(yǔ)音播報(bào)

- (void)applicationDidEnterBackground:(UIApplication*)application {

? ? UIApplication*? app = [UIApplication sharedApplication];

? ? __block? ? UIBackgroundTaskIdentifier bgTask;

? ? bgTask = [appbeginBackgroundTaskWithExpirationHandler:^{

? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{

? ? ? ? ? ? if(bgTask !=UIBackgroundTaskInvalid)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? bgTask =UIBackgroundTaskInvalid;

? ? ? ? ? ? }

? ? ? ? });

? ? }];

? ? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{

? ? ? ? ? ? if(bgTask !=UIBackgroundTaskInvalid)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? bgTask =UIBackgroundTaskInvalid;

? ? ? ? ? ? }

? ? ? ? });

? ? });

}







1.推送的大小限制

遠(yuǎn)程通知負(fù)載的大小根據(jù)服務(wù)器使用的API不同而不同化漆。當(dāng)使用HTTP/2 provider API時(shí)估脆,負(fù)載最大為4kB;當(dāng)使用legacy binary interface時(shí)座云,負(fù)載最大為2kB疙赠。當(dāng)負(fù)載大小超過(guò)規(guī)定的負(fù)載大小時(shí),APNs會(huì)拒絕發(fā)送此通知朦拖。

2.推送設(shè)計(jì)原理圖


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圃阳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子璧帝,更是在濱河造成了極大的恐慌捍岳,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祟同,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)理疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門晕城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人窖贤,你說(shuō)我怎么就攤上這事砖顷。” “怎么了赃梧?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵滤蝠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我授嘀,道長(zhǎng)物咳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任蹄皱,我火速辦了婚禮览闰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巷折。我一直安慰自己压鉴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布锻拘。 她就那樣靜靜地躺著油吭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪署拟。 梳的紋絲不亂的頭發(fā)上婉宰,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音芯丧,去河邊找鬼芍阎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缨恒,可吹牛的內(nèi)容都是我干的谴咸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼骗露,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岭佳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起萧锉,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤珊随,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叶洞,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲫凶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衩辟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螟炫。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖艺晴,靈堂內(nèi)的尸體忽然破棺而出昼钻,到底是詐尸還是另有隱情,我是刑警寧澤封寞,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布然评,位于F島的核電站,受9級(jí)特大地震影響狈究,放射性物質(zhì)發(fā)生泄漏碗淌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一抖锥、第九天 我趴在偏房一處隱蔽的房頂上張望贯莺。 院中可真熱鬧,春花似錦宁改、人聲如沸缕探。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爹耗。三九已至,卻和暖如春谜喊,著一層夾襖步出監(jiān)牢的瞬間潭兽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工斗遏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留山卦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓诵次,卻偏偏與公主長(zhǎng)得像账蓉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逾一,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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