-
筆記查看全部
-
第四部我們需要將我們的devicetoken上傳給服務(wù)器,接下來使我們的服務(wù)器像蘋果設(shè)備推送push。演示過程。
我們已經(jīng)拿到了一個(gè)tokenstr并把它應(yīng)該傳給我們的服務(wù)器,但這里我們并沒有搭建自己的服務(wù)器,我們將模擬服務(wù)器的方式在本地創(chuàng)建一個(gè)服務(wù)器推送的環(huán)境,也就是說我們會(huì)使用一個(gè)第三方的工具去推送push,push如果要工作的話有幾個(gè)事項(xiàng)需要注意,我們之前已經(jīng)生成了服務(wù)器使用的push證書,但是我們的客戶端APP的開發(fā)證書,也就是provising profile,要生成一個(gè)特定的調(diào)試證書,這個(gè)證書的id要跟bundle identifer保持一致。下面我們?nèi)√O果的開發(fā)者網(wǎng)站去生成一個(gè)帶id的開發(fā)證書
查看全部 -
生成相應(yīng)的證書和APPid
證書是做什么用的呢,就是后面我們給蘋果的APNS發(fā)送推送的時(shí)候,需要告訴蘋果我們到底是誰,這個(gè)是作為一個(gè)身份認(rèn)證的作用。生成相應(yīng)的證書和APPid之后。我會(huì)在我的電腦上去模擬一個(gè)push的測(cè)試環(huán)境,那么我們需要將證書導(dǎo)入出來。接下來我們需要在我們的工程中 完成push的注冊(cè)。完成注冊(cè)之后,我們才可以在我們的電腦上面搭建的測(cè)試環(huán)境向我們的手機(jī)去推送push,接下來我們回到我們的工程去完成push的注冊(cè)流程。我們一般將push的注冊(cè)代碼寫在APPdelegate,因?yàn)樗枰趩?dòng)的時(shí)候就完成注冊(cè),因?yàn)檫@個(gè)是一個(gè)非常優(yōu)先的過程,因?yàn)榭赡茉谀銏?zhí)行其他業(yè)務(wù)模塊之前我們就需要啟用這個(gè)push的功能,所以注冊(cè)的流程必須要盡快的啟動(dòng),我們一般把他的調(diào)用放在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions?
這樣一個(gè)回調(diào)里面。我們建立一個(gè)函數(shù)調(diào)用,取名為registerAPN,在啟動(dòng)的回調(diào)里面,我們就調(diào)用這個(gè)APP
關(guān)于怎么去注冊(cè)APNS的話在不同的系統(tǒng)版本下面行為表現(xiàn)并不一樣,主要是以ios7ios8為分界線,先用ios8的注冊(cè)的方式作為講解。后面我們會(huì)有專門的課程教大家怎么去設(shè)置push這樣一個(gè)交互的流程。
ios8環(huán)境下面如果要注冊(cè)APN的話,我們先需要生成一個(gè)notification的一個(gè)setting,也就是說像用戶詢問push的權(quán)限。
UIUserNotificationSettings* setting =?
[UIUserNotificationSettings settingsForTypes:
? ? ? ? ? (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? categories:nil]
settingsForTypes就是我們需要申請(qǐng)的一個(gè)push的一個(gè)權(quán)限的類型。接下來是像我們的用戶申請(qǐng)權(quán)限,我們調(diào)用對(duì)應(yīng)的api
[[UIApplication shareApplication]registerUserNotificationSettings:setting]在我們調(diào)用這行api之后我們會(huì)收到一個(gè)registerficationSettings的一個(gè)回調(diào),如果用戶點(diǎn)了允許我們的push權(quán)限我們就會(huì)收到這個(gè)回調(diào)。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings?
到這里的時(shí)候就表示用戶已經(jīng)允許了我們的push權(quán)限的申請(qǐng)。那么接下來的話就是獲取token,之前我們的流程圖當(dāng)中也講解到了這一步。我們調(diào)用相應(yīng)的api來獲取這樣一個(gè)token。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings?
{
[application?registerForRemoteNotifications];
}調(diào)用這行api之后,我們就會(huì)像蘋果的APNS服務(wù)器去申請(qǐng)一個(gè)APP的token,也就是我們的devicetoken,那我們看一下的devicetoken的回調(diào)是怎么樣的。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
這個(gè)回調(diào)表示我們拿到了正確的devicetoken,需要轉(zhuǎn)化成服務(wù)器識(shí)別的string,并把它傳遞給我們的服務(wù)器,進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。我們需要調(diào)試一下來看一下tokenstr到底是一個(gè)什么樣的格式,因?yàn)樘O果的push不支持模擬器調(diào)試的,所以我們需要啟動(dòng)設(shè)備去調(diào)試。
48 申請(qǐng)權(quán)限 在真機(jī)點(diǎn)擊好
60像服務(wù)器申請(qǐng)token
67拿到tokenstr
打印一下看一下具體的內(nèi)容。
去掉空格和尖括號(hào),將tokenstr傳給我們的服務(wù)器。因?yàn)槲覀儾]有搭建真正的服務(wù)器,我們就不去詳細(xì)的闡述了。我們的目標(biāo)是在本地建立一個(gè)測(cè)試環(huán)境,推薦一個(gè)APP可以將蘋果的設(shè)備搭建成一個(gè)push服務(wù)器去向蘋果的APNS服務(wù)器去推送push,
查看全部 -
pu sh工作原理
iOS的pu sh通道是一個(gè)獨(dú)立的長(zhǎng)鏈接通道,這個(gè)通道是由iOS系統(tǒng)獨(dú)立維護(hù)的。也就是說我們每一個(gè)手機(jī)系統(tǒng)在他開機(jī)之后就會(huì)有一個(gè)后臺(tái)悄悄的長(zhǎng)鏈接連 ?向蘋果的服務(wù)器也就是說我們看到的APNS服務(wù)器。APNS當(dāng)收到新的pu sh通知的時(shí)候它就會(huì)把通知推給我們的設(shè)備。這里一個(gè)大致的工作原理是這樣一個(gè)流程。我們的手機(jī)系統(tǒng)在啟動(dòng)之后或者說打開某一個(gè)app之后生成一個(gè)獨(dú)立的唯一的token并把這個(gè)token上傳給我們自己的服務(wù)器,我們自己的服務(wù)器有了這個(gè)token之后就可以向自己的設(shè)備推送通知了,但是呢這個(gè)token這個(gè)通知并不能直接推送給我們的設(shè)備而是要推送給蘋果的服務(wù)器,我們之前提到了pu sh的通道是由蘋果去維護(hù)的是一個(gè)唯一的一個(gè)通道,所以我們的服務(wù)器需要拿著這個(gè)token并告訴蘋果服務(wù)器我們推送哪一條通知。也就是這樣,我們的server會(huì)把token加上pu sh的內(nèi)容一起推給蘋果的服務(wù)器,蘋果的服務(wù)器在收到這個(gè)服務(wù)器的pu sh之后會(huì)把這個(gè)pu sh再根據(jù)這個(gè)token定位到我們的設(shè)備。也就是把我們的push推給我們的設(shè)備。推給我們的設(shè)備之后,我們的設(shè)備拿到這個(gè)token之后,他就能夠知道這個(gè)token是屬于我們?cè)O(shè)備上的哪一個(gè)app,這樣就可以把這個(gè)通知推送到具體某一個(gè)app當(dāng)中。這樣一個(gè)流程大概就是pu sh的一個(gè)工作原理
查看全部 -
payload長(zhǎng)度 ios7:256B,ios8:2k,ios9:4k查看全部
-
后臺(tái)模式開啟180秒查看全部
-
settings—同意之后回調(diào)里注冊(cè)—監(jiān)聽查看全部
-
IOS8 2kb IOS94kb查看全部
-
IOS6 7payload字符限制256字節(jié)查看全部
-
后臺(tái)運(yùn)行模式,iOS7之前是10分鐘,iOS7之后是3分鐘查看全部
-
voip 喚醒a(bǔ)pp,給出30秒的時(shí)間執(zhí)行任務(wù)查看全部
-
很好查看全部
-
iOS的鏈接通道是一個(gè)獨(dú)立的長(zhǎng)鏈接通道查看全部
-
您的demo可以分享出來嗎查看全部
-
Push工作原理查看全部
-
后臺(tái)任務(wù),查看全部
-
靜默push查看全部
舉報(bào)