創(chuàng)建App ID
要實(shí)現(xiàn)遠(yuǎn)程推送的功能,需要我們創(chuàng)建AppID,推送證書配置等相關(guān)操作,我們首先登陸https://developer.apple.com 進(jìn)入開發(fā)者中心


點(diǎn)擊+號(hào)添加之后需要我們輸入Name和Boundle ID,那么我們自己設(shè)定 但是boundle ID 就要和我們的工程的boundle identifier要是一樣的


然后需要我們?cè)贏pp Serviers里面勾線Push Notification選項(xiàng)->continue->submit->done此時(shí)我們的APPID就創(chuàng)建成功了

創(chuàng)建推送證書和描述文件
由于只是測(cè)試我們選擇Developement

->

->App ID就是我們上面創(chuàng)建的App ID->點(diǎn)擊continue->continue

在Generate your certificate.頁面會(huì)提示我們上傳一個(gè)CSR文件,那么怎么去生成一個(gè)CSR文件呢?

這個(gè)時(shí)候我們就需要我們的鑰匙串了,打開鑰匙串

接下來 電子郵件地址必填 我們也可以隨便填 保存到桌面上,完成

然后我們點(diǎn)擊choose file..上傳CSR文件->continue->DownLoad下載到桌面上
接下來我們創(chuàng)建描述文件 點(diǎn)擊+創(chuàng)建

選擇開發(fā)環(huán)境->continue

選擇我們的App ID ->continue

->

->

->我們不知道具體是哪一個(gè)的話 可以選擇全部

->

->Continue然后DownLoad
到這里我們的證書和描述文件都已經(jīng)創(chuàng)建好了 我們雙擊我們的證書,在鑰匙串里面可以查看證書信息,雙擊描述文件 加到Xcode里面Build Settings->Provisioning Podfile 選擇我們的證書,code single identifier 選擇我們的開發(fā)證書

->

推送的實(shí)現(xiàn)
一個(gè)應(yīng)用程序要想實(shí)現(xiàn)推送的話 就需要注冊(cè)推送通知 遠(yuǎn)程推送 在iOS8之前和之后的注冊(cè)方式不一樣 所以要做系統(tǒng)版本適配 根據(jù)不同的iOS版本 執(zhí)行不同的注冊(cè)代碼
在APPDelegate里
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//條件編譯 // 條件編譯指令:根據(jù)判斷條件,編譯不同區(qū)塊的代碼
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_
//1 配置遠(yuǎn)程推送收到消息后的狀態(tài):有腳標(biāo) 有聲音 有彈框
UIUserNotificationSettings *set = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
//2 將配置添加進(jìn)遠(yuǎn)程托送的設(shè)置中
[[UIApplication sharedApplication]registerUserNotificationSettings:set];
//3 注冊(cè)遠(yuǎn)程推送
[[UIApplication sharedApplication]registerForRemoteNotifications];
#else
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
#endif
return YES;
}
這個(gè)時(shí)候運(yùn)行我們的程序會(huì)看到如下提示信息

此時(shí)用戶點(diǎn)擊允許之后 應(yīng)用程序會(huì)向蘋果APNS注冊(cè),獲取令牌,令牌唯一標(biāo)識(shí)當(dāng)前的設(shè)備
//遠(yuǎn)程推送注冊(cè)成功后 會(huì)執(zhí)行這個(gè)方法 通過改代理將APNS提供的DeviceToken傳進(jìn)APP 進(jìn)而由APP轉(zhuǎn)發(fā)給推送服務(wù)器
//從蘋果APNS獲取Token成功
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSLog(@"遠(yuǎn)程推送能力注冊(cè)成功,deviceToken:%@",deviceToken);
}
//注冊(cè)失?。ǐ@取Token)的話會(huì)執(zhí)行的方法(設(shè)備不具備推送能力)
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
NSLog(@"遠(yuǎn)程推送注冊(cè)失敗 原因是:%@",error);
}
//當(dāng)程序收到遠(yuǎn)程推送消息后 執(zhí)行該方法 在這個(gè)方法中接收遠(yuǎn)程推送進(jìn)來的內(nèi)容(死亡)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"推送內(nèi)容是:%@",userInfo);
}
獲取到蘋果的Token之后 我們需要把token上傳我們的服務(wù)器 因?yàn)檫@樣 我們的服務(wù)器才能告訴蘋果APNS需要給那些設(shè)備發(fā)送推送消息,下面是一張截屏 但此時(shí)是2016年,我們把token傳遞給服務(wù)器的時(shí)候是需要去掉<>和空格 這些不再啰嗦

騰訊信鴿第三方的推送服務(wù)
下面我們來探討一下 使用騰訊第三方的信鴿進(jìn)行推送是怎么實(shí)現(xiàn)的

->點(diǎn)接入應(yīng)用->點(diǎn)應(yīng)用配置,我們會(huì)看到應(yīng)用配置里面有我們應(yīng)用的各種信息 ,而且需要我們上傳開發(fā)證書

點(diǎn)擊上傳我們看到需要的是一個(gè)pem格式的證書 那么我們?cè)趺传@取pem格式的證書呢?這時(shí)候我們的好朋友鑰匙串又粉墨登場(chǎng)了

->

->

此時(shí)我們就獲得了一個(gè).p12的文件 我們把.p12轉(zhuǎn)化成pem格式文件的話 需要用到終端我們切換到桌面上 在終端輸入:openssl pkcs12 -in Certificates.p12 -out Certificates.pem -nodes 并且將桌面上p12的名字進(jìn)行替換 然后回車,這個(gè)時(shí)候需要我們輸入一個(gè)密碼 這個(gè)密碼就是我們進(jìn)行導(dǎo)出p12文件是的密碼 然后在回車 此時(shí).pem的文件就已經(jīng)生成好了 我們?cè)谛砒澋呐渲闷脚_(tái)里面點(diǎn)擊上傳就可以了 上傳成功的話 會(huì)顯示

開發(fā)證書驗(yàn)證通過后 在配置平臺(tái)會(huì)顯示驗(yàn)證通過
我們需要在AppDelegate進(jìn)入信鴿的頭文件
#import "XGPush.h"
注冊(cè)信鴿
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//初始化信鴿
[XGPush startApp:2200189030 appKey:@"I958DSYJ18GA"];
return YES;
}
此時(shí)還沒完,我們需要在信鴿配置平臺(tái)添加一臺(tái)設(shè)備,通過以下方法 我們能過的一個(gè)設(shè)備的Token
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
[XGPush registerDevice:deviceToken];//信鴿獲取Token
NSLog(@"遠(yuǎn)程推送能力注冊(cè)成功,deviceToken:%@",deviceToken);
}

接下來我們就可以進(jìn)行推送了 我們點(diǎn)->創(chuàng)建通知(信鴿配置平臺(tái)上),推送環(huán)境我們選開發(fā)環(huán)境就行了 其他的自己設(shè)定

點(diǎn)擊-> 確認(rèn)推送之后就可以進(jìn)行推送了 ,此時(shí)測(cè)試機(jī)可以收到信息,但是用戶點(diǎn)擊了信息之后如何處理呢?需要執(zhí)行-(void)application:(UIApplication *)application didReceiveRemoteNotification:方法 userInfo里面就是我們推送的信息
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"推送內(nèi)容是:%@",userInfo);
}