日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ios推送通知

發(fā)布時(shí)間:2024/9/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios推送通知 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

iOS上簡(jiǎn)單推送通知(Push Notification)的實(shí)現(xiàn)

? ? 根據(jù)這篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12),結(jié)合自己的實(shí)踐,寫下一點(diǎn)筆記,僅供參考:)

? ? 由于篇幅較長(zhǎng),我列出簡(jiǎn)單的目錄,如下

1) 理解Apple推送通知的機(jī)制

2) 創(chuàng)建App ID

3) 創(chuàng)建CSR文件

4) 創(chuàng)建Provisioning Profile文件

5) Xcode工程中取得Device Token

6) 創(chuàng)建.pem文件

7) 編寫PHP服務(wù)器代碼,發(fā)送通知

1、理解Apple推送通知的機(jī)制


從上面的流程圖中,可以看到一個(gè)能接收推送通知的App,需要3個(gè)東西:

  • ?App ID(唯一標(biāo)識(shí)一個(gè)App程序)
  • ?Provisioning Profile(App程序的發(fā)布需要它,所以推送通知只能在真機(jī)上測(cè)試)
  • ?Device Token(設(shè)備標(biāo)識(shí),這個(gè)是推送通知功能中特有的)

而能推送通知的服務(wù)器端則要2個(gè)東西:

  • SSL Certificate
  • ?Private Key

(由于我對(duì)信息加密不清楚,所以這里不解釋)


值得注意的是APNS(ApplePush Notification Service) Server,完成發(fā)送Device Token和通知內(nèi)容的功能,而且這2個(gè)動(dòng)作都是被動(dòng)的,即第一個(gè)動(dòng)作是由App發(fā)起的,第二個(gè)則是推送通知的服務(wù)器發(fā)起的。

對(duì)我而言,理解就這么多了。下面我按照參考文章進(jìn)行實(shí)驗(yàn)。

?

2、創(chuàng)建App ID


點(diǎn)擊“New App ID”按鈕后,如下


Description的內(nèi)容可以任意,Bundle Identifier (App ID Suffix)必須和創(chuàng)建App工程時(shí)的Bundle Identifier,如下


點(diǎn)擊“Submit”后,點(diǎn)擊左側(cè)導(dǎo)航中的“App IDs”,找到剛才新創(chuàng)建的App ID,如下


點(diǎn)擊“Configure”后,如下


勾選“Enable for Apple Push Notification service”,然后點(diǎn)擊紅色的“Configure”按鈕,這里暫時(shí)只針對(duì)Development取得證書。彈出一個(gè)對(duì)話框,如下


點(diǎn)擊“Continue”后,要我們上傳一個(gè)CSR文件,如下


下面使用鑰匙串訪問(KeychainAccess)應(yīng)用程序創(chuàng)建上面需要的CSR文件(.certSigningRequest文件)

?

3、創(chuàng)建CSR文件

Keychain Access位于/Applications/Utilities目錄中,打開它如下


然后彈出窗口如下。


UserEmail Address隨意寫就可以,Common Name也是一樣,注意勾選“Save to disks”,然后點(diǎn)擊“Continue”。很快就生成好了所需文件,去找到它。


回到下面的網(wǎng)頁(yè)中,上傳剛才用KeychainAccess產(chǎn)生的HelloRemoteNotification.certSigningRequest文件。


很快需要的證書就OK了,如下


點(diǎn)擊“Continue”,然后點(diǎn)擊“Done”。


發(fā)現(xiàn)上面的Status是Enabled,而且多了“Download”按鈕,點(diǎn)擊它,下載了一個(gè)名為“aps_development.cer”的文件。雙擊打開它,


找到上圖中“Keys”欄中名為“HelloRemoteNotification”的private key(注意是private key,而不是public key),右擊它,選擇“Export “HelloRemoteNotification”…”,這樣會(huì)導(dǎo)出一個(gè).p12文件(需要輸入密碼),如下(目前共有3個(gè)文件)


下面開始用剛才產(chǎn)生的.p12文件,創(chuàng)建Profile provision文件

?

4、創(chuàng)建ProvisioningProfile文件


在上圖中,點(diǎn)擊“New Profile”按鈕后,如下


填寫“Profile Name”;勾選“Certificate”;“App ID”選擇正確的、之前我們創(chuàng)建的ID,即PushNotification;最后關(guān)聯(lián)需要測(cè)試真機(jī)設(shè)備。點(diǎn)擊“Submit”,如下


可以看到多了一個(gè)Provisioning Profile文件,點(diǎn)擊“Download”按鈕下載它,這時(shí)我們一共產(chǎn)生4個(gè)文件,如下


雙擊“PushNotification.mobileprovision”文件,或把它拖入到Xcode中。


在Xcode中,找到Code Signing項(xiàng),如上圖,將Debug一項(xiàng)配置成剛才拖入Provisioning Profile對(duì)應(yīng)的iPhone Developer。

?

5、Xcode工程中取得Device Token


在application:didFinishLaunchingWithOptions:方法里,注冊(cè)使用遠(yuǎn)程通知。


添加2個(gè)方法,application: didRegisterForRemoteNotificationsWithDeviceToken:和application:didFailToRegisterForRemoteNotificationsWithError:,用于取得Device Token和打印錯(cuò)誤。運(yùn)行我們建的HelloRemoteNotification工程,如果以上步驟都正確,應(yīng)該打印出Device Token,如下


也可能出錯(cuò)如下


?

6、創(chuàng)建.pem文件

  • ?將已有的.cer文件轉(zhuǎn)成.pem文件
  • 將已有的.p12文件轉(zhuǎn)成.pem文件(需要輸入密碼)
  • 最后將上面2個(gè).pem文件合并成1個(gè).pem文件(需要輸入新密碼)


aps_development.cer->HelloRemoteNotification.pem(下面改名為HelloRemoteNotificationCert.pem)

HelloRemoteNotification.p12-> HelloRemoteNotificationKey.pem


HelloRemoteNotification.pem +HelloRemoteNotificationKey.pem合并成ck2.pem

?

7、編寫PHP服務(wù)器代碼,發(fā)送通知

[php]?view plaincopy
  • <?php??
  • ??
  • //?Put?your?device?token?here?(without?spaces):??
  • $deviceToken?=?'<Xcode控制臺(tái)輸出的Device?Token>';??
  • ??
  • //?Put?your?private?key's?passphrase?here:??
  • $passphrase?=?'<最后輸入的密碼>';??
  • ??
  • //?Put?your?alert?message?here:??
  • $message?=?'My?first?push?notification!';??
  • ??
  • ??
  • ??
  • $ctx?=?stream_context_create();??
  • stream_context_set_option($ctx,?'ssl',?'local_cert',?'ck2.pem');??
  • stream_context_set_option($ctx,?'ssl',?'passphrase',?$passphrase);??
  • ??
  • //?Open?a?connection?to?the?APNS?server??
  • $fp?=?stream_socket_client(??
  • ????'ssl://gateway.sandbox.push.apple.com:2195',?$err,??
  • ????$errstr,?60,?STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,?$ctx);??
  • ??
  • if?(!$fp)??
  • ????exit("Failed?to?connect:?$err?$errstr"?.?PHP_EOL);??
  • ??
  • echo?'Connected?to?APNS'?.?PHP_EOL;??
  • ??
  • //?Create?the?payload?body??
  • $body['aps']?=?array(??
  • ????'alert'?=>?$message,??
  • ????'sound'?=>?'default'??
  • ????);??
  • ??
  • //?Encode?the?payload?as?JSON??
  • $payload?=?json_encode($body);??
  • ??
  • //?Build?the?binary?notification??
  • $msg?=?chr(0)?.?pack('n',?32)?.?pack('H*',?$deviceToken)?.?pack('n',?strlen($payload))?.?$payload;??
  • ??
  • //?Send?it?to?the?server??
  • $result?=?fwrite($fp,?$msg,?strlen($msg));??
  • ??
  • if?(!$result)??
  • ????echo?'Message?not?delivered'?.?PHP_EOL;??
  • else??
  • ????echo?'Message?successfully?delivered'?.?PHP_EOL;??
  • ??
  • //?Close?the?connection?to?the?server??
  • fclose($fp);??
  • 注意:修改下面兩行代碼

    [php]?view plaincopy
  • $deviceToken?=?'<Xcode控制臺(tái)輸出的Device?Token>';??
  • ??
  • //?Put?your?private?key's?passphrase?here:??
  • $passphrase?=?'<最后輸入的密碼>';??
  • ......??
  • ......??
  • stream_context_set_option($ctx,?'ssl',?'local_cert',?'ck2.pem');??
  • 運(yùn)行上面的php腳本,如下

    可以看到iPad上面收到的推送通知,如下,表示實(shí)踐成功!

    ?

    參考資料:

    1、http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

    總結(jié)

    以上是生活随笔為你收集整理的ios推送通知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。