共用方式為


Google 雲端通訊

警告

截至 2018 年 4 月 10 日,Google 已淘汰 GCM。 下列檔和範例專案可能不再維護。 Google 的 GCM 伺服器和用戶端 API 將於 2019 年 5 月 29 日移除。 Google 建議將 GCM 應用程式遷移至 Firebase 雲端通訊 (FCM)。 如需 GCM 淘汰和移轉的詳細資訊,請參閱 Google 已被取代的雲端傳訊

若要開始使用 Firebase 雲端傳訊搭配 Xamarin,請參閱 Firebase 雲端傳訊

Google Cloud Messaging (GCM) 是一項服務,可促進行動應用程式和伺服器應用程式之間的傳訊。 本文提供 GCM 運作方式的概觀,並說明如何設定 Google Services,讓您的應用程式可以使用 GCM。

Google Cloud Messaging logo

本主題提供Google Cloud Messaging 如何在您的應用程式與應用程式伺服器之間路由傳送訊息的高階概觀,並提供取得認證的逐步程式,讓您的應用程式可以使用 GCM 服務。

概觀

Google Cloud Messaging (GCM) 是一項服務,可處理伺服器應用程式和行動用戶端應用程式之間的訊息傳送、路由和佇列。 用戶端應用程式是已啟用 GCM 的應用程式,可在裝置上執行。 應用程式伺服器(由您或貴公司提供)是用戶端應用程式透過 GCM 與 GCM 通訊的 GCM 啟用伺服器:

GCM resides between the client app and the app server

使用 GCM,應用程式伺服器可以將訊息傳送至單一裝置、一組裝置,或訂閱主題的一些裝置。 用戶端應用程式可以使用 GCM 訂閱來自應用程式伺服器的下游訊息(例如,接收遠端通知)。 此外,GCM 也可讓用戶端應用程式將上游訊息傳送回應用程式伺服器。

Google 雲端通訊運作

當下游訊息從應用程式伺服器傳送至用戶端應用程式時,應用程式伺服器會將訊息傳送至 GCM 連線伺服器;接著,GCM 連接伺服器會將訊息轉送至執行用戶端應用程式的裝置。 訊息可以透過 HTTP 或 XMPP 傳送(可延伸傳訊和目前狀態通訊協定)。 由於用戶端應用程式不一定會連線或執行,所以 GCM 連線伺服器會加入佇列並儲存訊息,並在重新連線並可供使用時將它們傳送至用戶端應用程式。 同樣地,如果應用程式伺服器無法使用,GCM 會將來自用戶端應用程式的上游訊息加入應用程式伺服器。

GCM 會使用下列認證來識別應用程式伺服器和用戶端應用程式,並使用這些認證透過 GCM 授權訊息交易:

  • API 金鑰 – API 金鑰可讓您的應用程式伺服器存取 Google 服務;GCM 會使用此金鑰來驗證您的應用程式伺服器。 您必須先透過建立專案,從 Google Developer Console 取得 API 金鑰,才能使用 GCM 服務。 API 金鑰應保持安全;如需保護 API 金鑰的詳細資訊,請參閱 安全地使用 API 金鑰的最佳做法。

  • 寄件者標識碼發件人標識符 會授權應用程式伺服器到用戶端應用程式 – 這是唯一號碼,可識別允許將訊息傳送至用戶端應用程式的應用程式伺服器。 寄件人標識碼也是您的項目編號;當您註冊專案時,您會從Google Developers Console 取得發件人識別碼。

  • 註冊令牌 – 註冊令牌是指定裝置上用戶端應用程式的 GCM 身分識別。 註冊令牌會在運行時間產生 – 當應用程式在裝置上執行時第一次向 GCM 註冊時,就會收到註冊令牌。 註冊令牌會授權用戶端應用程式的實例(在該特定裝置上執行)接收來自 GCM 的訊息。

  • 應用程式識別碼 – 註冊接收來自 GCM 訊息的用戶端應用程式身分識別(與任何指定的裝置無關)。 在 Android 上,應用程式識別碼是記錄在 AndroidManifest.xml 中的套件名稱,例如 com.xamarin.gcmexample

設定Google Cloud Messaging (本指南稍後會提供建立專案併產生這些認證的詳細指示。

下列各節說明用戶端應用程式透過 GCM 與應用程式伺服器通訊時,如何使用這些認證。

向 GCM 註冊

安裝在裝置上的用戶端應用程式必須先向 GCM 註冊,才能進行傳訊。 用戶端應用程式必須完成下圖所示的註冊步驟:

App registration steps

  1. 用戶端應用程式會連絡 GCM 以取得註冊令牌,並將寄件人標識碼傳遞至 GCM。

  2. GCM 會將註冊令牌傳回用戶端應用程式。

  3. 用戶端應用程式會將註冊令牌轉送至應用程式伺服器。

應用程式伺服器會快取註冊令牌,以便與用戶端應用程式進行後續通訊。 或者,應用程式伺服器可以將通知傳送回用戶端應用程式,以指出已收到註冊令牌。 在進行此交握之後,用戶端應用程式可以接收來自應用程式伺服器(或傳送訊息至)的訊息。

當用戶端應用程式不再想要從應用程式伺服器接收訊息時,可以將要求傳送至應用程式伺服器以刪除註冊令牌。 如果用戶端應用程式正在接收主題訊息(本文稍後說明),它可以取消訂閱主題。 如果用戶端應用程式從裝置卸載,GCM 會偵測到此情況,並自動通知應用程式伺服器刪除註冊令牌。

下游傳訊

當應用程式伺服器將下游訊息傳送至用戶端應用程式時,它會遵循下圖所示的步驟:

Downstream messaging store and forward diagram

  1. 應用程式伺服器會將訊息傳送至 GCM。

  2. 如果客戶端裝置無法使用,GCM 伺服器會將訊息儲存在佇列中以供稍後傳輸。

  3. 當用戶端裝置可用時,GCM 會將訊息傳送至該裝置上的用戶端應用程式。

  4. 用戶端應用程式會從 GCM 接收訊息,並據以處理訊息。 例如,如果訊息是遠端通知,則會向用戶顯示訊息。

在此傳訊案例中(應用程式伺服器將訊息傳送至單一用戶端應用程式),訊息長度最多可達 4kB。

如需在 Android 上接收下游 GCM 訊息的詳細資訊(包括程式碼範例),請參閱 遠端通知

主題傳訊

主題傳訊 是一種下游傳訊,其中應用程式伺服器會將單一訊息傳送至多個訂閱主題的用戶端應用程式裝置(例如天氣預報)。 主題訊息長度最多可達 2 KB,而主題訊息支援每個應用程式最多一百萬個訂用帳戶。 如果 GCM 僅用於主題傳訊,用戶端應用程式就不需要將註冊令牌傳送至應用程式伺服器。

群組傳訊

群組傳訊 是一種下游傳訊類型,其中應用程式伺服器會將單一訊息傳送至屬於群組的多個用戶端應用程式裝置(例如屬於單一使用者的裝置群組)。 iOS 裝置的群組訊息長度最多為 2 KB,Android 裝置的長度最多為 4 KB。 群組最多限制為20個成員。

上游傳訊

如果您的用戶端應用程式連線到支援 XMPP 的伺服器,它可以將訊息傳回應用程式伺服器,如下圖所示:

Upstream messaging diagram

  1. 用戶端應用程式會將訊息傳送至 GCM XMPP 連線伺服器。

  2. 如果應用程式伺服器已中斷連線,GCM 伺服器會將訊息儲存在佇列中以供稍後轉送。

  3. 當應用程式伺服器重新連線時,GCM 會將訊息轉送至應用程式伺服器。

  4. 應用程式伺服器會剖析訊息來驗證用戶端應用程式的身分識別,然後將「ack」傳送給 GCM 以認可訊息回條。

  5. 應用程式伺服器會處理訊息。

Google 的上游訊息說明如何建構 JSON 編碼的訊息,並將其傳送至執行 Google XMPP 型雲端 連線 ion Server 的應用程式伺服器。

設定Google雲端通訊

您必須先取得認證,才能在應用程式中使用 GCM 服務,才能存取 Google 的 GCM 伺服器。 下列各節說明完成此程式所需的步驟:

為您的應用程式啟用Google Services

  1. 使用您的Google帳戶登入 Google開發人員主控台 (也就是您的 gmail 位址),並建立新的專案。 如果您有現有的專案,請選擇您想要啟用 GCM 的專案。 在下列範例中,會建立名為 XamarinGCM 的新專案:

    Creating XamarinGCM project

  2. 接下來,輸入應用程式的套件名稱(在此範例中,套件名稱為 com.xamarin.gcmexample),然後按兩下 [ 繼續選擇並設定服務]:

    Entering the package name

    請注意,此套件名稱也是應用程式的應用程式識別碼。

  3. [選擇及設定服務] 區段會列出您可以新增至應用程式的Google服務。 按兩下 [ 雲端傳訊]:

    Choose Cloud Messaging

  4. 接下來,按兩下 [ 啟用GOOGLE雲端傳訊]:

    Enable Google Cloud Messaging

  5. 系統會為您的應用程式產生伺服器 API 金鑰寄件者識別碼。 記錄這些值,然後按兩下 [ 關閉]:

    Server API Key and Sender ID displayed

    保護 API 金鑰 – 它不適用於公用用途。 如果 API 金鑰遭到入侵,未經授權的伺服器可以將訊息發佈至用戶端應用程式。 安全地使用 API 金鑰 的最佳做法提供實用的指導方針來保護 API 金鑰。

檢視您的專案 設定

您可以登入 Google Cloud Console 並選取專案,隨時檢視您的項目設定。 例如,您可以在頁面頂端的下拉功能表中選取專案來檢視 發件人標識碼 (在此範例中,專案稱為 XamarinGCM)。 寄件者標識碼是此螢幕快照所示的項目號碼(此處的發件人標識碼9349932736):

Viewing the Sender ID

若要檢視 API 金鑰,請按下 [API 管理員 ],然後按兩下 [ 認證]:

Viewing the API key

進一步閱讀

  • RFC 6120RFC 6121 說明並定義可延伸傳訊和目前狀態通訊協定 (XMPP)。

摘要

本文提供Google雲端通訊 (GCM) 的概觀。 它說明用來識別和授權應用程式伺服器與用戶端應用程式之間傳訊的各種認證。 它說明最常見的傳訊案例,並詳細說明向 GCM 註冊應用程式以使用 GCM 服務的步驟。