本文章是由機器翻譯。

Microsoft Azure

科爾多瓦與微軟 Azure 的應用程式推送通知

Glenn Gailey

下載代碼示例

隨著行動裝置增殖和成為無處不在我們的日常生活的一部分,消費者期待有更多從他們的手機。而這是一次可以接受你的移動應用程式,只需連接到雲以獲得最新的股票報價或存儲使用者生成的資料,使用者現在希望您的應用程式,通知他們在事件發生時 — — 例如當他們的股票達到某一價格或當他們團隊的分數。今天,所有的本機設備平臺支援推送通知,使您可以與您使用者近即時交互。

我將展示利用微軟 Azure 平臺發送推式通知由使用 Apache 科爾多瓦的Visual Studio工具開發的應用程式的基本知識。我開始與現有的科爾多瓦樣例應用程式專案、 創建和配置所需的服務,然後修改應用程式註冊為推式通知,所有的Visual Studio。我將重點介紹將推式通知發送到 Android 的應用程式,但已完成的科爾多瓦應用程式示例支援 Android 和 iOS 平臺。我將展示如何使用 Android 模擬器,不是因為它是偉大的 (它不是),但因為它不支援推送通知。我推薦使用 Android 設備,而不是模擬程式,如果可以的話。(請注意將推式通知發送到 iOS 設備需要一個物理設備和蘋果開發者帳戶和移動服務外掛程式當前不支援 Windows Phone)。

若要使用在這篇文章中突出顯示的Visual Studio2013年工具,你需要有更新 4 安裝。您還需要Visual Studio工具 Apache 科爾多瓦 (aka.ms/uopu9r),其中也包含在Visual Studio2015年預覽。這些工具的更全面的概述,請參見這篇文章,"Visual Studio與 Apache 科爾多瓦寫混合跨平臺應用",在這一問題。

最後,你需要的 Azure 帳戶。如果您沒有帳戶,您可以註冊 Azure 的試用,達 10 免費的移動服務,即使在您的試用期結束後,您可以繼續使用。有關詳細資訊,請參閱 Azure 免費試用頁 (aka.ms/qepjcc)。

如何推進通知工作

不論是本機設備平臺,所有的推送通知體系結構是基於 REST,而細節是平臺-­具體。圖 1 顯示發送推式通知使用 Azure 所需的服務架構。

推Notification Services體系結構
圖 1 推Notification Services體系結構

正如你可以看到在圖 1,一種推送通知體系結構的關鍵是平臺通知服務 (PNS)。此特定于設備的平臺服務是負責將消息發送到本機設備,並實際上處理通知,不該應用程式的設備。你可以看到在圖 1 後, 端服務亦須將通知發送到設備 (這是 Azure 的進來)。在大多數情況下後, 端服務必須原發性腎病綜合征必須能夠發送通知,這是為了防止惡意使用三七總皂苷進行身份驗證。發送推式通知的基本過程是這樣的:

  1. 移動應用程式連絡人 PNS 請求服務使用來標識設備的控制碼。這些控制碼並不持久,需要管理和定期刷新。
  2. 該應用程式將該控制碼發送到它的後端服務,它的存儲位置,通常與其他使服務能夠正確目標設備的資料。你會看到,Azure 很好。
  3. 當發送推式通知後, 端服務發送一個請求通知服務,其中包括手柄和消息,在一種特定于平臺的格式 (通常是 JSON 或 XML)。
  4. 三七總皂苷對請求進行身份驗證,並將請求的消息發送到特定的設備,所提供的控制碼標識。

每個本機設備平臺有其自身的期票。這意味著,當您創建一個跨平臺的應用程式使用科爾多瓦和想要發送消息,您必須提供您的應用程式與一個或多個下列服務:

  • 蘋果推送通知服務 (APN) 為 iPad 和 iPhone 的設備的
  • 谷歌雲消息服務 (GCM) 的安卓設備
  • Windows 通知服務 (wns 系列) 為 Windows 設備的
  • 微軟推送通知服務 (鑲嵌) 為 Windows Phone 設備的

推式通知外掛程式為 PhoneGap (aka.ms/xltv38) 用來向您科爾多瓦的應用程式註冊本機設備三七總皂苷。然而,即使這方便的外掛程式,你仍然有對雙方管理註冊為您的應用程式在各種平臺上你支援,所有這些完全不同的平臺之間發送的的資訊。除了這一切,您還需要創建和維護髮出通知的後端服務。幸運的是,Azure 來到救援提供這兩種簡化的方法來註冊和管理設備的登記,以及一種方便的從中將通知發送到您的科爾多瓦應用程式的後端服務。

為什麼用推式通知的 Azure 嗎?

在 Azure 專門旨在可以很容易地將推式通知發送到您的跨平臺行動裝置應用程式中有兩個服務:蔚藍通知集線器和蔚藍的移動服務。

通知中心可伸縮的、 跨平臺的解決方案,用於將推式通知發送到行動裝置,通知樞紐工程和科爾多瓦的應用程式。通知中心管理與每個 PNS 登記。更重要的是,通知中心允許您創建範本登記,以便您可以發送消息到所有註冊的設備,無論使用什麼平臺,與只有一行代碼。此外可以使用標記來只向特定登記設備發送有針對性的通知。有關通知中心的詳細資訊,請參閱在 Azure 網站 aka.ms/nkn4n4

移動服務特別旨在支援移動應用程式,通知集線器與集成的移動服務。當您創建一個新的移動服務時,一個新的通知中心是自動提供。撰寫這篇文章時,甚至在免費的層級中運行的移動服務允許 100 萬推每月免費。除了推式通知,移動服務還提供了為您的應用程式資料在 SQL Azure 資料庫和身份驗證與最受歡迎的供應商,例如 Facebook、 Google、 Azure Active Directory,微軟帳戶和 Twitter 的簡單存儲。有關移動服務的詳細資訊,請參閱在 Azure 網站 aka.ms/az48v5

因為移動服務與通知中心集成,您可以註冊使用流動電話語音用戶端的推式通知。那裡是沒有需要處理的通知中心訪問策略或連接字串。

在撰寫本文時,流動電話語音用戶端僅支援註冊為 iOS 和 Android 應用程式。如果你還需要在 Windows Phone 使用鑲嵌上支援您科爾多瓦的應用程式,請參見我的博客後,"推送通知到 PhoneGap 應用程式使用通知集線器一體化,"在 aka.ms/r197ab

獲取限定的時間內應用程式範例

移動服務是關於連接你的手機 — — 包括基於科爾多瓦的應用程式 — — 到 Azure 存儲、 身份驗證和推送通知。因此,它真的沒關係我用來證明推式通知,只是,只要它是科爾多瓦應用程式的應用程式。有幾個基於科爾多瓦的 Todo 樣本應用程式專案發表的Visual Studio的人,每人用一種不同的 JavaScript 框架。你可以找到這些Visual Studio-科爾多瓦樣本在 aka.ms/dxrr30

雖然 AngularJS 無疑是更流行的框架中,AngularJS 版本的 Todo 示例演示如何使用移動服務其他 Api 用於遠端資料存儲。骨幹­JS 示例使用移動服務外掛程式,所以擴展此示例添加推式通知是更直接。因此,我選擇使用 BackboneJS 版本的示例 (aka.ms/sffl1f)。無論您使用您的應用程式 (如果有) 的 JavaScript 框架,適用于相同的基本步驟。

在這一點上,你應該打開該專案 index.html 檔和刪除或注釋掉現有的移動服務引用,看起來像這樣:

<script src="http://ajax.aspnetcdn.com/ajax/mobileservices/
  MobileServices.Web-1.1.3.min.js"></script>
<script src="services/mobile services/todolist-xplat/service.js"></script>

您可能還應該刪除整個現有的 \services 資料夾,其中包含原始樣本 service.js 檔。這將有助於避免以後的多個 MobileServiceClient 變數之間的混淆。在接下來的部分中,您將使用Visual Studio創建一個新的移動服務,並將其連接到您的科爾多瓦應用程式。你也會向專案中添加 PushPlugin,設備和主控台外掛程式。

創建後端 Azure 服務

Visual Studio容易地提供所需的 Azure 服務,你可以直接從 IDE。接下來,我將展示如何從Visual Studio(假設你有積極的蔚藍訂閱) 創建一個新的移動服務權利。

在Visual Studio解決方案資源管理器,按右鍵該專案,然後按一下添加 |連接的服務。在服務管理員中,按一下創建服務。在創建移動服務對話方塊中設置下欄欄位,顯示在圖 2,然後按一下創建:

  • 訂閱:這是你蔚藍的訂閱。
  • 名稱:這是服務的您的新手機,它必須是服務的唯一的 Azure,並且成為該服務的 URL 的一部分的名稱。一個紅色的 X 顯示當您輸入的名稱不是可用的。
  • 運行時:此應用程式使用 JavaScript (Node.js) 後端,只是更有意義的 JavaScript 程式師比.NET 後端 (ASP.NETWeb API 專案)。
  • 區域:您的移動服務的位置 — — 理想的情況是在您的 SQL 資料庫相同的位置。
  • 資料庫:在同一區域中選擇一個現有的資料庫,或創建一個新的資料庫,理想的情況是一個人的自由。當您選擇一個現有的資料庫時,表屬於是移動服務名稱,所以就沒有風險對您當前的資料的架構。
  • 伺服器的使用者名和伺服器密碼:這些都是重要的憑據,所以保證他們的安全。移動服務不需要他們再一次,但你會當你想要的東西,如使用此資料庫以支援另一種移動服務。

創建移動服務對話方塊
圖 2 創建移動服務對話方塊

當您按一下創建時,一個新的移動服務提供以及一個新的通知中心)。回在服務管理員對話方塊中,選擇這項新服務並按一下確定。這向科爾多瓦專案中添加一個版本移動服務外掛程式和 InAppBrowser 外掛程式,移動服務使用的身份驗證。它還會添加並打開新的代碼檔中,然後限定的時間內-cordova.js,它定義用來連接到移動服務的 MobileServiceClient 實例等。使該檔保持打開狀態 ; 你以後會更新在這裡。

接下來,您需要在您的 SQL 資料庫,應用程式可以用來存儲專案中創建一個新的 TodoItem 表。打開伺服器資源管理器中,展開蔚藍的節點,然後移動服務節點,按右鍵移動服務並選擇創建表。為表名稱,請鍵入 TodoItem,然後按一下創建。在伺服器資源管理器中的移動服務節點下添加一個新的 TodoItem 表。此節點對應于一個新的 SQL 資料庫表,作為一個新的表,在您的移動服務公開。

在這一點上,您需要更新預設插入腳本 exe­前不久通過移動服務時插入到新表。在伺服器資源管理器中,展開您剛添加的 TodoItem 表、 打開 insert.js 檔和用在所示的代碼替換現有的插入函數圖 3

圖 3 在 TodoItem 表中插入專案時執行的腳本

function insert(item, user, request) {
  // Execute the request and send notifications.
  request.execute({
    success: function () {
      // Create a template-based payload.
      var payload = '{ "message" : "New item added: ' + item.text + '" }';
      // Write the default response and send a template notification
      // to all registered devices on all platforms.           
      push.send(null, payload, {
        success: function (pushResponse) {
          console.log("Sent push:", pushResponse);
          // Send the default response.
          request.respond();
        },
        error: function (pushResponse) {
          console.log("Error Sending push:", pushResponse);
          // Send the error response.
          request.respond(500, { error: pushResponse });
        }
      });
    }
  });
}

中的代碼圖 3 調用 send 方法推物件,將基於範本的推式通知發送到所有註冊的設備上。而不是將 null 傳遞給第一個參數 (標籤) 在這種情況下,你也可以傳遞一個標記值或陣列的標籤。當您使用標記時,通知集線器才會向其註冊包含這些標記之一的設備發送通知。有關標籤的詳細資訊,請參閱 aka.ms/cwr4l4

最後,您需要導航到 Azure 監管中心網站,以便您可以註冊您的應用程式的三七總皂苷的憑據,您將在下一節中創建。在伺服器資源管理器中,按右鍵該節點為您的移動服務在 Azure,然後按一下打開監管中心中的,登錄到入口網站。在這一點上,你應該 (由符號只表示) 的快速入門選項卡中為您新的移動服務。按一下推送選項卡並注意的通知中心在頁面的頂部你移動服務所使用的名稱。你需要懂得這點,如果你要解決您在Visual Studio的通知集線器 (正如您稍後將看到)。向下滾動到大氣環流模式設置在頁面的底部。這是後推式通知調配,就設置 GCM API 金鑰。

提供消息傳遞服務谷歌雲

最耗時的配置推送通知部分通常資源調配原發性腎病綜合征的應用程式。值得慶倖的是,此資源調配需要只能做一次為一個給定的應用程式和平臺。安卓系統,你需要一個谷歌帳戶,提供您科爾多瓦與 GCM 谷歌開發人員主控台 Web 網站上的應用程式 (aka.ms/wt80js)。登錄後,按一下創建專案、 指定專案名稱和 (可選) 您自己獨特的專案 ID、 接受條款,然後按一下創建。一旦創建,就會顯示新專案。寫下頁 ; 頂部所顯示的專案數量詞 稍後你會需要它了。

接下來,擴展 Api & 身份驗證,請按一下 Api、 android 向下滾動到谷歌雲消息、 使它和接受服務條款。現在,在 Api 下 & 身份驗證,按一下憑據,根據公共 API 的訪問,請按一下創建新金鑰,按一下伺服器的金鑰,然後創建。寫下的 API 金鑰值。回到在 Azure 監管中心中,輸入 API 金鑰下"谷歌雲消息設置"部分中,然後按一下保存。

現在設置 API 金鑰和通知中心現在可以使用大氣環流模型將推式通知發送到您的應用程式。如果你有麻煩資源調配 GCM,或者如果該 Web 網站發生變化,你總是能找到最新的詳細步驟,調配 GCM 在文章中,在"如何向啟用谷歌雲消息,"Azure 網站上網站 aka.ms/po7r8n。你可以找到等效的步驟配置 APN 在文章中,"如何到使蘋果推送通知,"iOS 用戶端在 Azure 網站上 aka.ms/vooydc。請注意因為通知中心是一個獨立的服務,其他後端服務還可以使用此註冊將通知發送到您的應用程式。

更新用戶端向登記冊 》 的通知

你需要做的最後一件事是更新下載的限定的時間內樣例專案註冊 azure 的推式通知時,應用程式開始。首先,您需要添加所需的外掛程式。在解決方案資源管理器中,按兩下 config.xml 專案檔案,以便在配置設計器中打開它,然後選擇外掛程式選項卡。根據核心,添加設備、 主控台和地理位置的外掛程式。如果已經安裝了外掛程式的 Azure 移動服務,按一下刪除卸載它 — — 你需要安裝較新版本支援推送通知。接下來,按一下自訂,選擇 Git,到 Azure 移動服務的外掛程式存儲庫,輸入以下 URL,然後按一下添加:

HTTPs://github.com/Azure/azure-mobile-services-cordova.git

這將安裝最新版本的外掛程式,其中包含移動服務用戶端庫。重複前面的步驟,將 PushPlugin 添加到專案中,通過使用以下資源庫 URL:

HTTPs://github.com/phonegap-build/PushPlugin.git

圖 4 顯示如何簡單Visual Studio現在使它將任何有效的科爾多瓦外掛程式添加到您的專案。

將 PushPlugin 外掛程式添加到應用程式專案
圖 4 將 PushPlugin 外掛程式添加到應用程式專案

打開時您添加移動服務連接到您的專案 (例如限定的時間內-cordova.js,限定的時間內科爾多瓦在哪裡的服務的名稱同名一) 創建的專案檔案。保存現有的 MobileServiceClient 建構函式,為您的移動服務和應用程式鍵 (所以他們不會被覆蓋),然後用中所示的代碼替換生成的代碼包含 URL 的副本圖 5

註冊與 Azure 推送通知當應用程式啟動的圖 5 所示代碼

var GCM_SENDER_ID = '<your_project_number>'; // Replace with your own ID.
var mobileServiceClient;
var pushNotification;
// Create the Azure client register for notifications.
document.addEventListener('deviceready', function () {
  mobileServiceClient = new WindowsAzure.MobileServiceClient(
    'https://todolist-cordova.azure-mobile.net/',
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  // Define the PushPlugin.
  pushNotification = window.plugins.pushNotification;
  // Platform-specific registrations.
  if (device.platform == 'android' || device.platform == 'Android') {
    // Register with GCM for Android apps.
    pushNotification.register(successHandler, errorHandler,
      {
        "senderID": GCM_SENDER_ID,
        "ecb": "onGcmNotification"
      });
  }
});
// Handle a GCM notification.
function onGcmNotification(e) {
  switch (e.event) {
    case 'registered':
      // Handle the registration.
      if (e.regid.length > 0) {
        console.log("gcm id " + e.regid);
        if (mobileServiceClient) {
          // Template registration.
          var template = "{ \"data\" : {\"message\":\"$(message)\"}}";
          // Register for notifications.
          mobileServiceClient.push.gcm.registerTemplate(e.regid,
            "myTemplate", template, null)
            .done(function () {
              alert('Registered template with Azure!');
            }).fail(function (error) {
              alert('Failed registering with Azure: ' + error);
            });
          }
        }
        break;
      case 'message':
        if (e.foreground) {
          // Handle the received notification when the app is running
          // and display the alert message.
          alert(e.payload.message);
          // Reload the items list.
          refreshTodoItems();
        }
        break;
      case 'error':
        alert('Google Cloud Messaging error: ' + e.message);
        break;
      default:
        alert('An unknown GCM event has occurred');
        break;
  }
}

中的代碼圖 5 請求註冊 ID 從大氣環流模型,然後使用返回的註冊 ID 來創建或更新通知中心登記。請注意, 圖 5 只包含 GCM 代碼所需的 android 作業系統,而隨附的專案下載 Android 和 iOS 包含代碼。若要獲取您的專案中運行此代碼,請將 MobileServiceClient 建構函式替換保存由Visual Studio工具添加的那個。此外,將 GCM_SENDER_ID 設置為您在谷歌開發人員主控台的應用程式的專案編號。

配置推式通知的 Android 模擬器

像 iOS 模擬器中,您可以接收推式通知 Android 模擬器上的提供您執行幾個額外的配置步驟。基本上,你需要使用谷歌 Api 並添加一個谷歌帳戶。當使用一個物理的 Android 設備,你可以跳過這些步驟並轉到下一節來運行並測試您的應用程式。(再一次,如果可能的話,你應該真的試著在一個物理的 Android 設備上運行 — — 船舶與 Android SDK 的模擬器是極度緩慢,儘管它不工作。)

從命令提示符下,鍵入"android avd,"顯示 Android 虛擬裝置 (AVD) 經理。你應該有至少一個的 AVD 可用,有時稱為 MyEmulator。如果你沒有 AVD,你需要創建一個。選擇您的 AVD,按一下編輯,然後將目標設置為谷歌 Api 並按一下確定。按一下啟動運行這個模擬器。在模擬器中,按一下應用程式圖示,然後按一下設置。向下滾動到帳戶、 按一下添加帳戶,按一下谷歌,和到模擬程式中添加一個新的或現有的帳戶。與添加的谷歌帳戶,您可以收到通知在模擬器上。

一旦你在模擬器上添加了一個谷歌帳號,您應計畫繼續運行 (除非您已經啟用中的模擬程式選項的快照) 的模擬程式。否則,在您重新開機模擬器,和你必須重新添加一個谷歌帳戶,以便能夠再次收到通知時,不會保持設備的狀態。

運行應用程式並生成推式通知

首次您運行該應用程式,新的註冊創建在您通知中心。在隨後的啟動,返回用大氣環流模式的最新註冊 ID 更新現有註冊。與選定的 Android 模擬器,按 f5 鍵以啟動並運行該應用程式。Visual Studio開始針對 Android 平臺上,科爾多瓦生成和部署到應用程式並開始運行的模擬程式 (它還啟動模擬器中,如果需要的話)。應用程式載入後,警報後顯示應用程式成功地註冊 (或更新的註冊) 與 Azure 的推式通知。當您添加一個新的專案,onGcmNotification 函數 (所示圖 5) 處理傳入的消息,當應用程式正在運行,並且在警報中顯示的消息。

當應用程式沒有運行時,通知最終會在狀態列中。圖 6 顯示出現 (在左側) 警報的通知並在狀態列中。

作為警報 (左) 和出現在狀態列中的通知訊息
圖 6 作為警報 (左) 和出現在狀態列中的通知訊息

您可以通過從應用程式發送後右切換測試這種行為。或者,如果沒有足夠的時間來做到這一點,在 send 方法被調用之前,您可以插入腳本中添加延遲。當您按一下狀態列中的通知時,應用程式就被開始。

另一種方式來證明這一點是通過向您的應用程式發送測試通知。

通過發送測試通知排查登記

因為涉及到多個服務和各類登記,它可以難解決推式通知。幸運的是,用於通知集線器的診斷功能已內置到Visual Studio2013年。 從伺服器資源管理器中,展開 Azure,然後通知集線器,您應該會看到您列出的通知集線器。按兩下此項,您將看到在Visual Studio中打開右診斷頁 (見圖 7)。此頁面包含以下兩個選項卡:

  • 測試發送:這允許您撰寫併發送郵件使用通知集線器。你可以針對特定的本機設備登記,或在這種情況下,範本註冊。當您按一下發送,具體通知發送 ; 由通知中心,記錄的結果,顯示在消息結果。
  • 設備登記:這將枚舉通知集線器中目前存在的所有登記。從這個標籤,你可以刪除註冊或更新註冊的標記集合。在此選項卡上,您應該看到至少一個註冊,剛添加當您開始您的應用程式。

通知中心診斷頁
圖 7 通知中心診斷頁

請記住,當您發送測試通知從Visual Studio,該應用程式沒有運行,則消息顯示在狀態列中。已運行該應用程式,將已經被引發警報相反 (如所示圖 6)。

您可以找到很多相同的推送通知測試功能在 Azure 監管中心的通知中心選項卡 (manage.windowsazure.com),但它是偉大的能夠測試和做一些基本的調試Visual StudioIDE 中的權利。

簡化的通知

若要查看,移動使用者現在比以往更期望其設備,以便保持與他們的利益和他們周圍什麼的最新。您的移動應用程式需要能夠通知你的客戶,在接近真正的時間,有關您的應用程式提供重要資料的更新程式。在跨平臺的應用程式,如科爾多瓦基於的應用程式,處理四個或更多不同的本機推送通知平臺可棘手,設置和管理。

它支援基於範本的註冊,通知集線器是一個偉大的解決方案,用於向科爾多瓦應用程式發送推式通知。由 PushPlugin 啟用在您的應用程式推送功能。結合移動服務的資料存儲和身份驗證設施,Azure 平臺是便於支援科爾多瓦應用程式。有關使用 Azure 支援跨平臺的應用程式的詳細資訊,請參閱蔚藍的文檔主題,"支援多個設備平臺從單一移動服務,"在 aka.ms/w7oq0y。不只是Visual Studio的極好平臺為開發科爾多瓦的應用程式,它也是一個偉大的工具,用於創建和管理 Azure 為您科爾多瓦的應用程式。


Glenn Gailey 是一名程式師,作家和 14 年微軟資深人士為 Azure 移動服務、 通知集線器,WCF 資料服務,OData、ADO.NETEntity Framework、SQL Server的複製和SQL ServerCE,創建的文檔和示例。聯繫到他在 glenn.gailey@microsoft.com 或通過 Twitter 在 ggailey777

感謝以下的微軟技術專家對本文的審閱:蘇雷什 · Jayabalan、 邁克Jones和 Piyush · 喬希