說到遠程推送,應該用的也挺多的,今天就基於SEA的雲推送服務,做一個推送的小demo,來瞭解一下iOS中的遠程推送是怎麼一回事兒,首先你得有蘋果的開發者賬號,好鹹蛋也差不多了,主要內容走起。 一、準備階段 1.在蘋果開發官網上申請推送證書之前需要一個名字叫做certSigningRequest文件。 ...
說到遠程推送,應該用的也挺多的,今天就基於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 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 <?php 2 3 $cert_id =你的證書序號; 4 $device_token = 你的deviceToken; 5 $message = "hello world"; 6 7 //這個是簡單的例子,更複雜的消息格式請查看蘋果官方文檔 8 $body = array( 9 'aps' => array( 'alert' => $message) 10 ); 11 $apns = new SaeAPNS(); 12 //push消息到SAE推送伺服器 13 $result = $apns->push( $cert_id , $body , $device_token ); 14 15 if( $result && is_array($result) ){ 16 echo '發送成功'; 17 var_dump( $result ); 18 } else { 19 echo '發送失敗'; 20 var_dump($apns->errno(), $apns->errmsg()); 21 } 22 23 //查看消息發送的彙總信息,返回值包括當天發送成功的消息數,以及因各類原因發送失敗的消息數。 24 $result = $apns->getInfo($cert_id); 25 if ($result === false) { 26 echo "getInfo失敗"; 27 var_dump($apns->errno(), $apns->errmsg()); 28 } else { 29 echo "getInfo成功"; 30 var_dump($result); 31 } 32 33 ?>
三、客戶端代碼如下:
1.在Appdelegate中註冊推送:
- (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 -(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 4 { 5 6 NSLog(@"%@",deviceToken); 7 }
3.註冊錯誤回調的方法:
-(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"%@",[error localizedDescription]); }
4.在Build Settings中的Code Signing中中我們的推送證書和描述文件
到這兒,調用伺服器上的php文件就可以給我們的設備發送通知了。