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