iOS開發之遠程推送

  說到遠程推送,應該用的也挺多的,今天就基於SEA的雲推送服務,作一個推送的小demo,來了解一下iOS中的遠程推送是怎麼一回事兒,首先你得有蘋果的開發者帳號,好鹹蛋也差很少了,主要內容走起。php

  1、準備階段服務器

    1.在蘋果開發官網上申請推送證書以前須要一個名字叫作certSigningRequest文件。該文件在MAC系統中生成,用於在Apple網站上申請推送證書文件,下面是利用鑰匙串生成該文件的步驟:app

      (1).打開Mac下的鑰匙串-》鑰匙串訪問-》證書助理-》從證書頒發機構請求證書,以下圖所示:ide

 

      (2).通過上一步會出現下面的對話框,郵箱和名稱隨便填寫,而後選擇保存到磁盤,就能夠在本地生成一個CertificateSigningRequest.certSigningRequest文件。以下圖:網站

 

    2.去蘋果開發者的網站上申請推送證書,步驟以下:ui

      (1)、用開發者帳號登錄後,進入Member Center,入下圖所示:spa

 

      (2)、進入member Center後點擊下面截圖的連接:命令行

      (3)、註冊一個支持推送的AppId,在identifiers下面的App IDs選項中點擊添加按鈕,添加一個新的AppIDs,入下圖:3d

      (4)、填寫你的AppId的名字code

      (5)、綁定你應用的Bundle ID

 

      (6)、選中Push Notifications,使本AppID支持消息推送:

 

 

    三、用上面的AppID申請推送證書

     (1)、點擊證書,選中開發模式,而後單選推送服務

 

      (2)、選中咱們剛纔建立的AppID,以下:

      (3)、上傳咱們剛纔在本地用鑰匙串建立的文件:

      (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

 

    六、將生成的end.pem文件上傳到SAE上的雲推送服務上便可,咱們在SAE上能夠經過文件的id進行訪問:

    

  2、服務器端代碼編寫:

    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 ?>

 

  3、客戶端代碼以下:

    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文件就能夠給咱們的設備發送通知了。

相關文章
相關標籤/搜索