iOS開發之遠程推送

来源:http://www.cnblogs.com/shouce/archive/2016/04/06/5357739.html
-Advertisement-
Play Games

說到遠程推送,應該用的也挺多的,今天就基於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文件就可以給我們的設備發送通知了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在介紹block迴圈引用前我們先瞭解一下typeof。 typeof是什麼??? typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意類型。 它返回值是一個字元串,該字元串說明運算數的類型。 一、對於數字類型的操作數而言,typeof返回的值是number。比如說:typeof(1), ...
  • TabHost是Android中自帶的選項卡控制項,效果圖如下: 主佈局文件 核心代碼: 兩個子頁面很簡單,兩個Activity以及對應佈局。 ...
  • import java.util.Random; import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKey ...
  • 之前有兩篇文章關於推送證書配置的,特別是對於新手很有用,可以去看看. http://www.cnblogs.com/wolfhous/p/5344871.html http://www.cnblogs.com/wolfhous/p/5344853.html 開始集成極光推送 1,官網下載sdk以及d ...
  • 沒羽@阿裡移動安全,更多安全類技術乾貨,請訪問阿裡聚安全博客 這是Android mediaserver的提權漏洞,利用CVE-2014-7920和CVE-2014-7921實現提權,從0許可權提到media許可權,其中CVE-2014-7921影響Android 4.0.3及以後的版本,CVE-201 ...
  • 申請加急網址:https://developer.apple.com/appstore/contact/appreviewteam/index.html 補充:加急審核說明是可以寫中文的 提交加急審核需要理由,一般涉及到銀行信息,或者崩潰打不開這種的比較容易通過。反正蘋果很苛刻,一般不給處理。如果處 ...
  • 效果 想必大家對 iPhone 的指紋解鎖功能已經相當的熟悉了。來看看效果吧! Local Authentication 概述 Local Authentication 框架提供了按照指定的安全策略請求用戶授權(本地授權)的工具。例如, 通過 Touch ID 請求用戶授權。 LAContext L ...
  • 一,效果圖。 二,工程圖。 三,代碼。 ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a ni ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...