說到遠端推送,應該用的也挺多的,今天就基於SEA的雲推送服務,做一個推送的小demo,來了解一下iOS中的遠端推送是怎麼一回事兒,首先你得有蘋果的開發者賬號,好鹹蛋也差不多了,主要內容走起。
一、準備階段
1.在蘋果開發官網上申請推送證照之前需要一個名字叫做certSigningRequest檔案。該檔案在MAC系統中生成,用於在Apple網站上申請推送證照檔案,下面是利用鑰匙串生成該檔案的步驟:
(1).開啟Mac下的鑰匙串-》鑰匙串訪問-》證照助理-》從證照頒發機構請求證照,如下圖所示:
(2).經過上一步會出現下面的對話方塊,郵箱和名稱隨便填寫,然後選擇儲存到磁碟,就可以在本地生成一個CertificateSigningRequest.certSigningRequest檔案。如下圖:
2.去蘋果開發者的網站上申請推送證照,步驟如下:
(1)、用開發者賬號登陸後,進入Member Center,入下圖所示:
(2)、進入member Center後點選下面截圖的連結:
(3)、註冊一個支援推送的AppId,在identifiers下面的App IDs選項中點選新增按鈕,新增一個新的AppIDs,入下圖:
(4)、填寫你的AppId的名字
(5)、繫結你應用的Bundle ID
(6)、選中Push Notifications,使本AppID支援訊息推送:
3、用上面的AppID申請推送證照
(1)、點選證照,選中開發模式,然後單選推送服務
(2)、選中我們剛才建立的AppID,如下:
(3)、上傳我們剛才在本地用鑰匙串建立的檔案:
(4)、接下來就可以下載並使用我們的推送證照了
4、用我們的AppID建立一個Provisioning Profiles檔案,如下:
5.由上面的證照,生成php用的pem檔案過程如下:
(1).由鑰匙串開啟上面我們生成的CSR檔案,單擊右鍵匯出p12檔案,如下圖:
(2).設定訪問密碼:
(3)、在終端下切換到存有剛才我們匯出的p12資料夾下,進行命令列生成pem檔案,命令列如下,合併的時候會讓輸入密碼,密碼就是我們上面設定的密碼:
1 2 3 |
1 openssl pkcs12 -clcerts -nokeys -out a.pem -in aps_test_cer.p12 2 openssl pkcs12 -nocerts -out b.pem -in aps_test_key.p12 3 cat a.pem b.pem > end.pem |
6、將生成的end.pem檔案上傳到SAE上的雲推送服務上即可,我們在SAE上可以通過檔案的id進行訪問:
二、伺服器端程式碼編寫:
SAE上雲推送所用到的PHP程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
php $cert_id =你的證照序號; $device_token = 你的deviceToken; $message = "hello world"; //這個是簡單的例子,更復雜的訊息格式請檢視蘋果官方文件 $body = array( 'aps' => array( 'alert' => $message) ); $apns = new SaeAPNS(); //push訊息到SAE推送伺服器 $result = $apns->push( $cert_id , $body , $device_token ); if( $result & is_array($result) ){ echo '傳送成功'; var_dump( $result ); } else { echo '傳送失敗'; var_dump($apns->errno(), $apns->errmsg()); } //檢視訊息傳送的彙總資訊,返回值包括當天傳送成功的訊息數,以及因各類原因傳送失敗的訊息數。 $result = $apns->getInfo($cert_id); if ($result === false) { echo "getInfo失敗"; var_dump($apns->errno(), $apns->errmsg()); } else { echo "getInfo成功"; var_dump($result); } ?> |
三、客戶端程式碼如下:
1.在Appdelegate中註冊推送:
1 2 3 4 5 6 7 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. //註冊遠端通知 [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; [application registerForRemoteNotifications]; return YES; } |
2.獲取裝置令牌的回撥方法
1 2 3 4 5 6 7 |
//註冊遠端推送後獲取裝置令牌 -(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"%@",deviceToken); } |
3.註冊錯誤回撥的方法:
1 2 3 4 |
-(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"%@",[error localizedDescription]); } |
4.在Build Settings中的Code Signing中中我們的推送證照和描述檔案
到這兒,呼叫伺服器上的php檔案就可以給我們的裝置傳送通知了。
打賞支援我寫出更多好文章,謝謝!
打賞作者
打賞支援我寫出更多好文章,謝謝!