創(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要是一樣的
然后需要我們在App Serviers里面勾線Push Notification選項(xiàng)->continue->submit->done此時(shí)我們的APPID就創(chuàng)建成功了
創(chuàng)建推送證書和描述文件
由于只是測試我們選擇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)推送的話 就需要注冊推送通知 遠(yuǎn)程推送 在iOS8之前和之后的注冊方式不一樣 所以要做系統(tǒng)版本適配 根據(jù)不同的iOS版本 執(zhí)行不同的注冊代碼
在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 注冊遠(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注冊色迂,獲取令牌,令牌唯一標(biāo)識(shí)當(dāng)前的設(shè)備
//遠(yuǎn)程推送注冊成功后 會(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)程推送能力注冊成功手销,deviceToken:%@",deviceToken);
}
//注冊失斝(獲取Token)的話會(huì)執(zhí)行的方法(設(shè)備不具備推送能力)
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
NSLog(@"遠(yuǎn)程推送注冊失敗 原因是:%@",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格式的證書 那么我們怎么獲取pem格式的證書呢兽埃?這時(shí)候我們的好朋友鑰匙串又粉墨登場了
->
->
此時(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)生成好了 我們在信鴿的配置平臺(tái)里面點(diǎn)擊上傳就可以了 上傳成功的話 會(huì)顯示
開發(fā)證書驗(yàn)證通過后 在配置平臺(tái)會(huì)顯示驗(yàn)證通過
我們需要在AppDelegate進(jìn)入信鴿的頭文件
#import "XGPush.h"
注冊信鴿
- (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)程推送能力注冊成功,deviceToken:%@",deviceToken);
}
接下來我們就可以進(jìn)行推送了 我們點(diǎn)->創(chuàng)建通知(信鴿配置平臺(tái)上)鄙陡,推送環(huán)境我們選開發(fā)環(huán)境就行了 其他的自己設(shè)定
點(diǎn)擊-> 確認(rèn)推送之后就可以進(jìn)行推送了 冕房,此時(shí)測試機(jī)可以收到信息,但是用戶點(diǎn)擊了信息之后如何處理呢趁矾?需要執(zhí)行-(void)application:(UIApplication *)application didReceiveRemoteNotification:方法 userInfo里面就是我們推送的信息
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"推送內(nèi)容是:%@",userInfo);
}