iOS8下的遠端推送

2022-08-11 11:06:11 字數 2752 閱讀 9383

昨天做了一下遠端推送,今天寫下來,分享給需要的人。參考了很多篇文章,或許是ios8的改動,沒有一篇可以完整的看下來,所以打算自己寫一篇。

後台我也寫了,用的是sae,php**,很簡單,呼叫sae封裝好的乙個類就可以向apns發推送資訊。

首先,來說一下蘋果的推送機制。顧名思義,推送,是指伺服器向客戶端傳送訊息,那麼在ios中,應用是被後台掛起的,並不能一直連線網路,那麼伺服器怎麼才能把訊息傳送到客戶端呢?這就用到推送,蘋果的推送機制,是只能由apns傳送推送通知,所以你自己的後台伺服器想給客戶端推送通知,得把要推送的內容傳送給apns。

1

//ios8

23 uiusernotificationsettings * s =[uiusernotificationsettings settingsfortypes:uiusernotificationtypesound | uiusernotificationtypealert |uiusernotificationtypebadge categories:nil];45

6若註冊成功,則會**乙個方法,**如下

2

相對應的,肯定也有乙個註冊失敗的**。裡面寫錯誤處理的**就可以,這裡就不舉例了。

2在這個方法裡面,處理我們接收到的訊息即可。

前端的任務就這麼多,別忘了把device_token交給你的服務端。

服務端的**本來不用我們寫,但是遇到不會寫的,讓他們去看蘋果的官方文件就行。要是還看不懂,就找乙個現成的**研究一下。

程式猿攻城獅都是萬能的,不僅會修電腦,還要會寫後台。那麼,我們就來看看後台是怎麼實現的。

首先,按照上面流程來說,服務端獲取到device_token後,使用證書向apns傳送推送請求,那麼問題來了。挖掘機技術哪家強?

推送證書**來?

需要乙個開發者賬號。沒錯,和我們真機除錯的證書一樣,至少需要99刀。有了賬號,我們就可以申請乙個證書。下面,跟著一步一步看,比較麻煩。

1.需要在macos上生成乙個certificatesigningrequest.certsigningrequest檔案。開啟應用程式中的「鑰匙串訪問」,從選單中選擇「證書助理」-》「從證書頒發機構請求證書」

然後儲存在本地就行。這樣我們就獲取了乙個證書請求檔案。

這樣,在鑰匙串中找到這個推送證書,前面的名字是一樣的,後面是你起的bundle名。接著,就是把cer證書轉化成pem檔案,供後台使用。右鍵點選這個證書,選擇「匯出」,放到本地。會得到乙個字尾為p12的檔案。然後開啟macos下的命令列程式,執行以下幾條命令,其中會讓你輸入密碼,是不可見的,輸入完回車就行,螢幕上是看不到輸入的字元的,會輸入好幾次密碼,所以建議每次密碼都輸一樣的。

openssl pkcs12 -clcerts -nokeys -out 檔名a.pem -in 蘋果證書.p12

openssl pkcs12 -nocerts -out 檔名b.pem -in 蘋果證書.p12

最後把用證書拆出來的兩個檔案合到一起:cat 檔名a.pem 檔名b.pem > lltpush.pem

最終的這個lltpush.pem是我們需要的,給後台用。

開頭說到,後台是搭建在sae雲端的,推送**都不用些,只要呼叫sae封裝好的乙個類就可以。那麼,想要用sae,自己去註冊乙個應用,然後進入到應用首頁,得配置一下證書才能使用推送。這個很簡單,看一下sae的推送說明文件就ok。

到這個設定頁面,把證書上傳上去,密碼寫你在命令列合成時候填的密碼。記住你的證書序號,因為寫推送的時候,要選擇用哪個證書發推送。

sae就不多介紹了,自己看下文件。現在就開始寫**了,新建乙個php頁面出來。看以下的**。

1

<?php23

$cert_id = 1686;

4$device_token = $_request['device_token'];

5$message = $_request['message'];67

//這個是簡單的例子,更複雜的訊息格式請檢視蘋果官方文件

8$body = array

(9 'aps' => array( 'alert' => $message , 'badge' => 1, 'sound' => 'in.***')

10);

11$apns = new

saeapns();

12//

push訊息到sae推送伺服器

13$result = $apns->push( $cert_id , $body , $device_token

);14

15if( $result && is_array($result

) ) else

24 ?>

這個介面呢,需要兩個引數,乙個是裝置的device_token,還有就是你要推送的訊息內容。然後呼叫sae的方法就可以。傳送成功返回json串。複雜的**就不說了。

這只是個測試demo,真正的推送是後台判斷的。不是我們去調介面。

就到這裡吧。  

ios如何實現本地推送,相容ios8

如果要相容ios8在ios中實現本地推送,關鍵是要注意 ios8在實現本地推送時需要通過如下語句進行註冊。在notificationhelper.m檔案中實現方法如下 import notificationhelper.h implementation notificationhelper stat...

iOS8關於推送方面的問題

因為之前一直沒有做過利用推送聊天,然後最近專案中也出現了推送相關的問題,最主要的是要利用推送來幫助實現im。先說一下所謂的推送機制,我個人理解,所謂的推送無非就是說,每個機器是有自己固定的機器碼的,也就是devicetoken,不管你軟體換了幾個賬號,你的devicetoken是不變的,之所以換了號...

iOS 8推送註冊方式改變的問題

ios 8發布之後,不過有的開發者也注意到了在ios 8上推送通知的註冊方式有所變化,報錯提示為 1 registerforremotenotificationtypes is not supportedinios 8.0 and later.之後國外有開發者在使用了新的解決方案註冊成功後發現在ip...