性久久久久久,性色av浪潮av色欲av,国产日韩精品在线观看,亚洲色成人网一二三区

歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
電話圖標(biāo) 余先生:13699882642

網(wǎng)站百科

為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴

iOS 遠(yuǎn)程消息推送 APNS推送原理

發(fā)表日期:2017-06 文章編輯:小燈 瀏覽次數(shù):2099

前言:現(xiàn)在第三方推送也很多 ,比如極光,融云,信鴿,其原理也是相同利用APNS推送機(jī)制 ,前段公司讓做自己的推送,1.避免device token被第三方泄露,保護(hù)手機(jī)設(shè)備信息,2.第三方部分開(kāi)始收費(fèi),一些免費(fèi)的以后誰(shuí)又知道呢 ,不如自己創(chuàng)建,除了后臺(tái)麻煩點(diǎn),需要數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)token相關(guān)字段(后臺(tái)配置部分在最后更新添加),前端實(shí)現(xiàn)起來(lái)并不復(fù)雜 。 對(duì)于iOS8.0以后,原生推送實(shí)時(shí)性很好,也解決了第三方SDK占用存儲(chǔ)顧慮,何樂(lè)不為呢!這篇文章將很詳細(xì)的講解它 只要按照一步一步來(lái)很容易實(shí)現(xiàn) 。先從推送機(jī)制開(kāi)始

1.APNS的推送機(jī)制

首先我們看一下蘋(píng)果官方給出的對(duì)iOS推送機(jī)制的解釋。如下圖

Provider就是我們自己程序的后臺(tái)服務(wù)器,APNS是Apple Push Notification Service的縮寫(xiě),也就是蘋(píng)果的推送服務(wù)器。

上圖可以分為三個(gè)階段:

第一階段:應(yīng)用程序的服務(wù)器端把要發(fā)送的消息、目的iPhone的標(biāo)識(shí)打包,發(fā)給APNS。

第二階段:APNS在自身的已注冊(cè)Push服務(wù)的iPhone列表中,查找有相應(yīng)標(biāo)識(shí)的iPhone,并把消息發(fā)送到iPhone。

第三階段:iPhone把發(fā)來(lái)的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知。

APNS推送通知的詳細(xì)工作流程

下面這張圖是說(shuō)明APNS推送通知的詳細(xì)工作流程:

根據(jù)圖片我們可以概括一下:

1、應(yīng)用程序注冊(cè)APNS消息推送。

2、ios從APNS Server獲取devicetoken,應(yīng)用程序接收device token。

3、應(yīng)用程序?qū)evice token發(fā)送給程序的PUSH服務(wù)端程序。

4、服務(wù)端程序向APNS服務(wù)發(fā)送消息。

5、APNS服務(wù)將消息發(fā)送給iPhone應(yīng)用程序。

準(zhǔn)備工作

首先要有一臺(tái)蘋(píng)果的設(shè)備,模擬器是不支持推送的,所以你需要一臺(tái)iphone,ipod touch或者ipad。

我們的客戶端與蘋(píng)果服務(wù)器之間和我們自己的服務(wù)器與蘋(píng)果服務(wù)器之間都需要證書(shū)來(lái)進(jìn)行鏈接。下面我們來(lái)開(kāi)始進(jìn)入證書(shū)的制作過(guò)程。

2.注冊(cè)證書(shū)

首先蘋(píng)果證書(shū)主要分為上線證書(shū)和測(cè)試證書(shū),相信都有所了解 在此不再累贅了 ,接下來(lái)就開(kāi)始制作吧

一 CSR文件

首先我們要有生成一個(gè)Certificate Signing Request(也就是CSR)的請(qǐng)求文件。

在應(yīng)用程序里的使用工具中找到鑰匙串訪問(wèn)。

Snip20160728_10.png

填上你的郵箱和常用名 或者是公司關(guān)聯(lián)賬號(hào),常用名要記一下,一會(huì)

會(huì)用到。

Snip20160728_13.png

然后選擇保存到磁盤(pán),繼續(xù)

Snip20160728_15.png

這時(shí)桌面上會(huì)有一個(gè)CertificateSigningRequest.certSigningRequest的請(qǐng)求文件,也就是我們說(shuō)的CSR文件。在我們生成CSR文件的同時(shí),會(huì)在鑰匙串訪問(wèn)中生成一對(duì)秘鑰,名稱為剛才我們填寫(xiě)的常用名

二 下載開(kāi)發(fā)證書(shū)和發(fā)布證書(shū)

到https://developer.apple.com/devcenter/ios/index.action登錄后,在右側(cè)的ios Developer Program里點(diǎn)擊iOS Provisioning Portal。

進(jìn)入下一級(jí)頁(yè)面后在左側(cè)選擇Certificates

點(diǎn)擊紅色的部分生成一個(gè)開(kāi)發(fā)證書(shū)

點(diǎn)擊選擇文件,選擇剛才我們生成到桌面的CSR請(qǐng)求文件。

注意,如果你在后面測(cè)試的時(shí)候出現(xiàn)了問(wèn)題,請(qǐng)檢查一下這里,這里的CSR請(qǐng)求文件必須是我們剛才生成的那個(gè)

選擇完成后點(diǎn)擊Submit提交

提交完成后返回頁(yè)面。頁(yè)面會(huì)是這樣的,然后我們刷新一下頁(yè)面

刷新后會(huì)出現(xiàn)一個(gè)下載按鈕,我們點(diǎn)擊下載?,F(xiàn)在我們的開(kāi)發(fā)證書(shū)已經(jīng)配置并下載好了,發(fā)布證書(shū)的配置過(guò)程和開(kāi)發(fā)證書(shū)是一致的,不再贅述。下載完后雙擊,會(huì)跳到鑰匙串訪問(wèn)里。這就是我們之后要進(jìn)行測(cè)的證書(shū)

三 配置AppID,配置并下載SSL證書(shū)

點(diǎn)擊左側(cè)的App IDs,找到我們要做推送功能的程序的id(如果沒(méi)有的話要先New一個(gè)。注意:這里的App ID必須不能是通配的,通配的不可以做推送)

點(diǎn)擊Configure

進(jìn)入后默認(rèn)推送功能是關(guān)閉的,我們需要把推送功能打開(kāi)

選中打開(kāi)后,點(diǎn)擊右邊灰色的Configure按鈕

這里的文件同樣的,還是選擇我們生成在桌面上的CSR請(qǐng)求文件

然后點(diǎn)擊繼續(xù)

出現(xiàn)了我們需要的SSL證書(shū),我們點(diǎn)擊下載后點(diǎn)擊Done完成。

Status狀態(tài)變成了綠色可用了。這里右邊的下載和上一步的下載是一樣的,如果在上一步中下載了證書(shū),便無(wú)需再次下載。此時(shí)我們有了一個(gè)名字叫aps_development.cer的SSL證書(shū),同樣,我們把他放在桌面。雙擊后會(huì)跳到鑰匙串訪問(wèn),出現(xiàn)我們的SSL推送證書(shū)

同樣的,發(fā)布的SSL證書(shū)的步驟也是一樣的。

四 下載Provisioning證書(shū)

在左側(cè)選擇Provisioning

配置好后點(diǎn)擊提交(注意App ID要與我們剛的程序?qū)?yīng))

之后變回出現(xiàn)下載按鈕,我們點(diǎn)擊下載。下載后雙擊,并將我們的設(shè)備上的描述文件更新一下(最好把之前的全部刪除,然后再安裝,防止出錯(cuò))。

五 從鑰匙串訪問(wèn)中導(dǎo)出秘鑰

打開(kāi)鑰匙串訪問(wèn),找到我們的專用秘鑰(專用秘鑰的名稱就是我們?cè)谧铋_(kāi)始生成CSR請(qǐng)求的時(shí)候填寫(xiě)的常用名)

右鍵選擇導(dǎo)出

導(dǎo)出的文件名我們叫做Push

在這里需要輸入一個(gè)密碼來(lái)對(duì)文件進(jìn)行加密。這里我們選擇abc123,當(dāng)然你也可以自己選擇是什么,但是這個(gè)密碼必須要銘記,切記!

然后輸入你電腦的密碼,點(diǎn)擊允許。

這樣我們就在桌面上生成了一個(gè)Push.p12文件。

到此為止,我們?cè)谧烂嫔弦还采闪巳齻€(gè)文件。一個(gè)是CSR請(qǐng)求文件,一個(gè)是aps_development .cer的SSL證書(shū)文件,還有一個(gè)剛才生成的Push.p12秘鑰文件。

現(xiàn)在我們的準(zhǔn)備工作已經(jīng)做完了。要開(kāi)始對(duì)生成的文件進(jìn)行處理了。原因上面已經(jīng)解釋過(guò),因?yàn)槲覀兊姆?wù)鏈接蘋(píng)果服務(wù)器也是需要證書(shū)的,但是我們直接生成的證書(shū)windows系統(tǒng)(我們一般的服務(wù)器都是win系統(tǒng)的)是不識(shí)別的,所以我們需要生成一個(gè)后綴為pem的帶證書(shū)帶秘鑰的文件。

六 處理證書(shū)

下面我們打開(kāi)終端(位置:應(yīng)用程序à實(shí)用工具à終端)。

cd到桌面,我們那三個(gè)文件所在的位置

1、把.cer的SSL證書(shū)轉(zhuǎn)換為.pem文件,執(zhí)行命令:

openssl x509 -inaps_development.cer-inform der -outPushChatCert.pem

在桌面上會(huì)生成一個(gè)PushChatCert.pem文件

2、把私鑰Push.p12文件轉(zhuǎn)化為.pem文件:

openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12

這里需要我們輸入密碼,這個(gè)密碼也就是我們導(dǎo)出p12文件時(shí)的密碼,也就是我們上面設(shè)置的abc123。然后,需要我們對(duì)生成的pem文件設(shè)置一個(gè)密語(yǔ),這里我們推薦還是用上面這個(gè)abcabc,防止混亂(當(dāng)然你也可以設(shè)置成別的更有意義的密語(yǔ)),這里的密語(yǔ)是要告訴我們服務(wù)器的。這樣,桌面上又會(huì)生成一個(gè)PushChatKey.pem文件

3、對(duì)生成的這兩個(gè)pem文件再生成一個(gè)pem文件,來(lái)把證書(shū)和私鑰整合到一個(gè)文件里:

catPushChatCert.pem PushChatKey.pem>ck.pem

生成ck.pem文件

這樣,我們的文件就制作完了。下面進(jìn)入測(cè)試階段

為了測(cè)試證書(shū)是否工作,執(zhí)行下面的命令

telnet gateway.sandbox.push.apple.com 2195

它將嘗試發(fā)送一個(gè)規(guī)則的,不加密的連接到APNS服務(wù)。如果你看到上面的反饋,那說(shuō)明你的MAC能夠到達(dá)APNS。按下Ctrl+C關(guān)閉連接。如果得到一個(gè)錯(cuò)誤信息,那么你需要確保你的防火墻允許2195端口。一般這里都不會(huì)出現(xiàn)什么問(wèn)題。

下面我們要使用我們生成的SSL證書(shū)和私鑰來(lái)設(shè)置一個(gè)安全的鏈接去鏈接蘋(píng)果服務(wù)器:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

執(zhí)行完這一句命令后需要我們輸入密語(yǔ)

Enter pass phrase for PushChatKey.pem:

我們輸入abcabc按回車(chē)

你會(huì)看到一個(gè)完整的輸出,讓你明白OpenSSL在后臺(tái)做什么。如果鏈接是成功的,你可以隨便輸入一個(gè)字符,按下回車(chē),服務(wù)器就會(huì)斷開(kāi)鏈接,如果建立連接時(shí)有問(wèn)題,OpenSSL會(huì)給你返回一個(gè)錯(cuò)誤信息。

當(dāng)你在最后的時(shí)候你看到這樣說(shuō)明你已經(jīng)成功了:

CONNECTED(00000003)

depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.NET/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C

verify error:num=20:unable to get local issuercertificate

verify return:0

Certificate chain

0s:/C=US/ST=California/L=Cupertino/O=Apple >Inc./OU=iTMSEngineering/CN=gateway.sandbox.push.apple.com

i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated byreference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C

1s:/C=US/O=Entrust, Inc./OU=www.entrust.Net/rpa is incorporated byreference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C

i:/O=Entrust.net/OU=www.entrust.net/CPS_2048incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.netCertification Authority (2048)

Server certificate

-----BEGIN CERTIFICATE-----

MIIFGzCCBAOgAwIBAgIETBz90jANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC

……省略……

fMGbLqkGn8YogdPqe5T1

-----END CERTIFICATE-----

subject=/C=US/ST=California/L=Cupertino/O=AppleInc./OU=iTMS Engineering/CN=gateway.sandbox.push.apple.com

issuer=/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C

No client certificate CA names sent

SSL handshake has read 2731 bytes and written 2165 bytes

New, TLSv1/SSLv3, Cipher is AES256-SHA

Server public key is 2048 bit

Secure Renegotiation IS supported

Compression: NONE

Expansion: NONE

SSL-Session:

Protocol : TLSv1

Cipher : AES256-SHA

Session-ID:

Session-ID-ctx:

Master-Key:C7A47EED5E1F5……省略……369D4

Key-Arg : None

Start Time:1361862882

Timeout : 300 (sec)

Verify return code: 0 (ok)

在這里提醒一下,也許你會(huì)看到像我這樣的提示:verify error:num=20:unable to get local issuercertificate

verify return:0

其實(shí)是沒(méi)問(wèn)題的。

七 項(xiàng)目測(cè)試

建立我們的推送的項(xiàng)目(注意BundleIdentifier必須和我們推送應(yīng)用的App id一致)

在AppDelegate里didFinishLaunchingWithOptions函數(shù)里寫(xiě)- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{//推送的形式:標(biāo)記,聲音,提示[[UIApplicationsharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert];returnYES;}- (void)application:(UIApplication*)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData*)pToken {NSLog(@"regisger success:%@",pToken);//注冊(cè)成功,將deviceToken保存到應(yīng)用服務(wù)器[數(shù)據(jù)庫(kù)](http://lib.csdn.net/base/14)中}- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{// 處理推送消息NSLog(@"userinfo:%@",userInfo);NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);}- (void)application:(UIApplication*)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError*)error {NSLog(@"Registfail%@",error); }

我們運(yùn)行程序的時(shí)候會(huì)有提示,說(shuō)我們的程序要發(fā)送推送通知

下面我們把PHP服務(wù)器代碼和生成的ck.pem文件放在統(tǒng)一文件夾下面(這里我們還是統(tǒng)一放在桌面上)。

用Xcode打開(kāi)(其他工具也可以)php服務(wù)器端的代碼,把deviceToken改成我們現(xiàn)在要進(jìn)行測(cè)試的iphone的deviceToken(獲得方法:首先運(yùn)行我們的程序,程序啟動(dòng)后打印的日志文件里可以看到。感謝 邊玩勺子把兒去 同學(xué)的提醒),密語(yǔ)改成我們之前設(shè)置的abc123。然后保存。

然后在終端運(yùn)行命令(如果剛才你關(guān)閉了終端的話,最好ls一下,看看當(dāng)前是不是在桌面),執(zhí)行命令:

php pushMe.php

然后回車(chē)(pushMe為服務(wù)器文件名稱)

如果出現(xiàn)這樣的提示說(shuō)明成功了,然后在iphone上,我們期待已久的推送消息終于來(lái)了。

IMG_2759.PNG

常見(jiàn)問(wèn)題:

1、在用證書(shū)和秘鑰鏈接服務(wù)器時(shí)出現(xiàn)提示:

Error opening client certificate private key filePushChatKey.pem20839:error:02001002:system library:fopen:No such file ordirectory:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:356:fopen('PushChatKey.pem','r')

20839:error:20074002:BIO

routines:FILE_CTRL:systemlib:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:358:

unable to load client certificate private key file

解決:

文件路徑不對(duì)。cd到生成的pem文件路徑下再進(jìn)行鏈接

2、前期測(cè)試沒(méi)有問(wèn)題,將ck.pem給服務(wù)器,通過(guò)服務(wù)器進(jìn)行推送時(shí)推送不成功,提示鏈接APNS失敗。

解決:一,看一下證書(shū)的名稱,密語(yǔ)是否正確;二,路徑是否正確;然后檢查一下庫(kù),OpenSSL和libssl;此外apache還要開(kāi)啟OpenSSL權(quán)限,確??梢栽L問(wèn)pem

3、APNS地址 (**一定記住切換地址,好多推送不成功就是地址不對(duì),pushMe.php中的代碼地址我已經(jīng)換成測(cè)試的了**)

測(cè)試地址gateway.sandbox.push.apple.com:2195

發(fā)布地址 gateway.push.apple.com:2195

測(cè)試的地址用的是沙盒,發(fā)布地址是不同的。發(fā)布軟件的時(shí)候記得改過(guò)來(lái)

4、要注意順序問(wèn)題,一定要按照這個(gè)順序來(lái):

生成鑰匙串請(qǐng)求 -->配置下載開(kāi)發(fā)證書(shū)--> 配置App ID ,配置、下載SSL證書(shū)-->Provisioning證書(shū)

實(shí)例代碼 和 pushMe.php

下載地址:github:https://github.com/one-tea/APNS_test.git

有什么問(wèn)題可以與我私信,如果喜歡歡迎關(guān)注,更好的東西共享給大家!

后臺(tái)的配置問(wèn)題

在這里說(shuō)下后臺(tái)配置,主要分兩類:

一.Java、PHP可以通用,上面pushMe.php也就是適用代碼;

二. 另一種有.net后臺(tái)的(比如我們公司),給后臺(tái)證書(shū)為.p12格式 制作方法:

在鑰匙中找到你安裝過(guò)的推送證書(shū),記不住就返回上面證書(shū)配置那塊看

Snip20160803_12.png

Snip20160803_13.png

導(dǎo)出為.p12,密鑰也為abc123好了, 這個(gè)秘鑰需要和.p12一起給后臺(tái)

至于后臺(tái)有寫(xiě)好的代碼 .net 項(xiàng)目中引PushSharp.Apple.dll,PushSharp.Core.dll(這兩個(gè)文件在網(wǎng)上搜一下,有源碼的)

文/海諾_ ( 作者)

原文鏈接:http://www.jianshu.com/p/032bfc949917

著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“ 作者”。


本頁(yè)內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過(guò)網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁(yè)中由涉嫌抄襲的內(nèi)容,請(qǐng)及時(shí)與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會(huì)在5工作日內(nèi)聯(lián)系您,一經(jīng)查實(shí),本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://caipiao93.cn/20481.html
相關(guān)開(kāi)發(fā)語(yǔ)言
 八年  行業(yè)經(jīng)驗(yàn)

多一份參考,總有益處

聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費(fèi)獲得網(wǎng)站建設(shè)方案及報(bào)價(jià)

咨詢相關(guān)問(wèn)題或預(yù)約面談,可以通過(guò)以下方式與我們聯(lián)系

業(yè)務(wù)熱線:余經(jīng)理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

  • QQ咨詢
  • 在線咨詢
  • 官方微信
  • 聯(lián)系電話
    座機(jī)0755-29185426
    手機(jī)13699882642
  • 預(yù)約上門(mén)
  • 返回頂部