本主題描述傳送推播通知所需的服務對服務Web API和通訊協定。
如需推播通知和 WNS 概念、需求和作業的概念性討論,請參閱 Windows 推播通知服務 (WNS) 概觀。
要求和接收存取令牌
本節說明向 WNS 驗證時所涉及的要求和響應參數。
存取令牌要求
HTTP 要求會傳送至 WNS 以驗證雲端服務,並擷取傳回的存取令牌。 要求會使用安全套接字層 (SSL) 發出給 https://login.live.com/accesstoken.srf。
存取令牌要求參數
雲端服務會使用 「application/x-www-form-urlencoded」 格式,在 HTTP 要求本文中提交這些必要參數。 您必須確定所有參數都經過 URL 編碼。
| Parameter | Required | Description |
|---|---|---|
| grant_type | TRUE | 必須設定為 client_credentials。 |
| client_id | TRUE | 套件安全識別碼(SID)是您在 Microsoft Store 註冊應用程式時為您的雲端服務所指派的。 |
| client_secret | TRUE | 當您在 Microsoft 市集註冊應用程式時所指派的雲端服務密鑰。 |
| 範圍 | TRUE | 必須設定為 notify.windows.com |
存取令牌回應
WNS 會驗證雲端服務,如果成功,則會以 「200 OK」 回應,包括存取令牌。 否則,WNS 會回應適當的 HTTP 錯誤碼,如 OAuth 2.0 通訊協定草稿中所述。
存取令牌響應參數
如果雲端服務成功驗證,則會在 HTTP 回應中傳回存取令牌。 此存取令牌可用於通知要求,直到到期為止。 HTTP 回應會使用 「application/json」 媒體類型。
| Parameter | Required | Description |
|---|---|---|
| access_token | TRUE | 雲端服務在傳送通知時將使用的存取令牌。 |
| token_type | FALSE | 總是傳回為 bearer。 |
回應碼
| HTTP 回應碼 | Description |
|---|---|
| 200 確定 | 要求成功。 |
| 400 錯誤的請求 | 驗證失敗。 如需響應參數,請參閱 OAuth 草稿 批注要求 (RFC)。 |
Example
以下顯示成功的驗證回應範例:
HTTP/1.1 200 OK
Cache-Control: no-store
Content-Length: 422
Content-Type: application/json
{
"access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=",
"token_type":"bearer",
"expires_in": 86400
}
傳送通知要求並接收回應
本節描述了在向 WNS 發送 HTTP 要求以傳遞通知時涉及的標頭,以及回覆中涉及的標頭。
- 發送通知請求
- 發送通知回應
- 不支援的 HTTP 功能
發送通知請求
傳送通知要求時,呼叫端應用程式會透過SSL提出 HTTP 要求,並尋址至通道統一資源標識碼 (URI)。 “Content-Length” 是要求中必須指定的標準 HTTP 標頭。 所有其他標準標頭皆為選擇性或不受支援。
此外,此處所列的自定義要求標頭可用於通知要求。 有些標頭是必要的,有些則為選擇性標頭。
要求參數
| 標頭名稱 | Required | Description |
|---|---|---|
| Authorization | TRUE | 用來驗證通知要求的標準 HTTP 授權標頭。 您的雲端服務會在此標頭中提供其存取令牌。 |
| Content-Type | TRUE | 標準 HTTP 授權標頭。 對於提示通知、磁磚和徽章通知,此標頭必須設定為 text/xml。 對於原始通知,這個標頭必須設定為 application/octet-stream。 |
| Content-Length | TRUE | 標準 HTTP 授權標頭,表示要求承載的大小。 |
| X-WNS-Type | TRUE | 定義承載中的通知類型:磁貼、快顯通知、徽章或未經處理。 |
| X-WNS-Cache-Policy | FALSE | 啟用或停用通知快取。 此標頭僅適用於磚、徽章和原始通知。 |
| X-WNS-RequestForStatus | FALSE | 查詢通知回應中的裝置狀態和 WNS 連線狀態。 |
| X-WNS-Tag | FALSE | 用於提供帶有識別標籤的通知,用以支援通知佇列的磚塊的字串。 此標頭僅適用於磁貼通知。 |
| X-WNS-TTL | FALSE | 以秒為單位的整數值,指定存留時間 (TTL)。 |
| MS-CV | FALSE | 用於您的請求的關聯向量 值。 |
重要注意
- Content-Length 和 Content-Type 是唯一包含在傳送給用戶端之通知中的標準 HTTP 標頭,不論要求中是否包含其他標準標頭。
- 如果不支援此功能,則會忽略所有其他標準 HTTP 標頭,或傳回錯誤。
- 從 2023 年 2 月開始,當裝置處於離線狀態時,WNS 只會快取一個動態磚通知。
Authorization
授權標頭是用來指定呼叫端的認證,方法是遵循 持有人 令牌的 OAuth 2.0 授權方法。
語法由字串常值「Bearer」加上一個空格,然後是您的存取令牌組成。 此存取令牌是透過發出上述的存取令牌請求來取得的。 相同的存取令牌可以在後續的通知要求上使用,直到到期為止。
此標頭是必要的。
Authorization: Bearer <access-token>
X-WNS-Type
這些是 WNS 支援的通知類型。 此標頭會指出通知的類型,以及 WNS 應該如何處理它。 通知到達客戶端之後,會根據這個指定的類型驗證實際的承載。 此標頭是必要的。
X-WNS-Type: wns/toast | wns/badge | wns/tile | wns/raw
| Value | Description |
|---|---|
| wns/badge | 在磚上建立徽章重疊的通知。 通知要求包含的 Content-Type 標頭必須設定為 text/xml。 |
| wns/tile | 更新圖塊內容的通知。 通知要求包含的 Content-Type 標頭必須設定為 text/xml。 |
| wns/toast | 在客戶端上舉杯慶祝的通知。 通知要求包含的 Content-Type 標頭必須設定為 text/xml。 |
| wns/raw | 可包含自訂資料載荷並直接傳送到應用程式的通知。 通知要求包含的 Content-Type 標頭必須設定為 application/octet-stream。 |
X-WNS-Cache-Policy
當通知目標裝置離線時,WNS 會針對每個通道 URI 快取一個徽章、一個圖磚和一個即時通知。 根據預設,不會快取原始通知,但如果啟用原始通知快取,則會快取一個原始通知。 項目不會無限期地保留在快取中,而且會在一段合理的時間之後移除。 否則,當裝置下一次上線時,就會傳遞快取的內容。
X-WNS-Cache-Policy: cache | no-cache
| Value | Description |
|---|---|
| 快取 | Default. 如果用戶離線,將會快取通知。 這是磚和徽章通知的預設設定。 |
| no-cache | 如果用戶離線,將不會快取通知。 這是原始通知的預設設定。 |
X-WNS-RequestForStatus
指定回應是否應該包含裝置狀態和 WNS 連線狀態。 此標頭是選擇性的。
X-WNS-RequestForStatus: true | false
| Value | Description |
|---|---|
| true | 傳回回應中的裝置狀態和通知狀態。 |
| false | Default. 請勿傳回裝置狀態和通知狀態。 |
X-WNS-Tag
將 標籤 標籤指派給通知。 當應用程式選擇通知循環時,標籤在通知佇列中用於取代磚的策略。 如果佇列中已經有此標記的通知,則具有相同標籤的新通知就會發生。
Note
此標頭是選擇性的,只有在傳送磚通知時才會使用。
X-WNS-Tag: <string value>
| Value | Description |
|---|---|
| 字串值 | 不超過16個字元的英數位元字串。 |
X-WNS-TTL
指定通知的 TTL (到期時間)。 這通常不需要,但如果您想要確保您的通知不會晚於特定時間顯示,則可以使用。 TTL 是以秒為單位指定,且相對於 WNS 接收要求的時間。 指定 TTL 時,裝置不會在該時間之後顯示通知。 請注意,如果 TTL 太短,這可能會導致完全不會顯示通知。 一般而言,到期時間至少會以分鐘為單位來測量。
此標頭是選擇性的。 如果未指定任何值,則通知不會過期,而且會在一般通知取代配置下取代。
X-WNS-TTL:<integer value>
| Value | Description |
|---|---|
| 整數值 | 通知在 WNS 接收到請求後的生命週期,以秒為單位。 |
X-WNS-SuppressPopup
Note
針對 Windows Phone 市集應用程式,您可以選擇隱藏快顯通知的 UI,而是將通知直接傳送至控制中心。 這可讓您的通知以無訊息方式傳遞,這是較不緊急通知的潛在優越選項。 此標頭是選擇性的,僅適用於 Windows Phone 通道。 如果您在 Windows 通道中包含此標頭,您的通知將會被丟棄,並且您將會收到來自 WNS 的錯誤回應。
X-WNS-SuppressPopup: true | false
| Value | Description |
|---|---|
| true | 將快顯通知直接傳送至操作中心,請勿顯示快顯通知 UI。 |
| false | Default. 引發快顯通知 UI,以及將通知新增至控制中心。 |
X-WNS-Group
Note
Windows Phone 市集應用程式的操作中心只有在標記為屬於不同群組時,才能顯示具有相同標籤的多個快顯通知。 例如,請考慮食譜書籍應用程式。 每個食譜都會由標記來識別。 包含該食譜評論的提示會有食譜的標籤,但卻顯示評論群組的標籤。 包含該食譜評分的快顯通知會再次顯示該食譜的標籤,並且附有評分組的標籤。 這些不同的群組標籤可讓兩個快顯通知一次顯示在控制中心。 此標頭是選擇性的。
X-WNS-Group:<string value>
| Value | Description |
|---|---|
| 字串值 | 不超過16個字元的英數位元字串。 |
X-WNS-Match
Note
與 HTTP DELETE 方法搭配使用,以移除特定快顯通知 (Toasts)、一組快顯通知(按卷標或群組),或從 Windows Phone 市集應用程式的操作中心中移除所有的快顯通知。 此標頭可以指定群組、標記或兩者。 HTTP DELETE 通知要求中需要此標頭。 忽略這個通知請求中包含的任何承載。
X-WNS-Match:type:wns/toast;group=<string value>;tag=<string value> | type:wns/toast;group=<string value> | type:wns/toast;tag=<string value> | type:wns/toast;all
| Value | Description |
|---|---|
type:wns/toast;group=<string value>;tag=<string value> |
拿掉以指定標籤和群組標示的單一通知。 |
類型:WNS/TOAST;群組=<string value> |
拿掉標示為指定群組的所有通知。 |
類型:WNS/TOAST;標籤=<string value> |
拿掉標示為指定標籤的所有通知。 |
| type:wns/toast;all | 從控制中心清除您應用程式的所有通知。 |
發送通知回應
WNS 處理通知要求之後,它會以回應方式傳送 HTTP 訊息。 本節討論可在該回應中找到的參數和標頭。
回應參數
| 標頭名稱 | Required | Description |
|---|---|---|
| X-WNS-Debug-Trace | FALSE | 應該記錄的偵錯資訊,以協助回報問題時排除故障。 |
| X-WNS-DeviceConnectionStatus | FALSE | 只有在通知要求中通過 X-WNS-RequestForStatus 標頭請求時,才會返回裝置狀態。 |
| X-WNS-Error-Description | FALSE | 應該記錄人類可讀取的錯誤字串,以協助偵錯。 |
| X-WNS-Msg-ID | FALSE | 用於偵錯的通知唯一標識碼。 回報問題時,應該記錄此資訊以協助進行疑難解答。 |
| X-WNS-Status | FALSE | 指出 WNS 是否成功接收和處理通知。 回報問題時,應該記錄此資訊以協助進行疑難解答。 |
| MS-CV | FALSE | 應該記錄的偵錯資訊,以協助回報問題時排除故障。 |
X-WNS-Debug-Trace
此標頭會以字串的形式傳回有用的偵錯資訊。 建議您記錄此標頭,以協助開發人員偵錯問題。 當向 WNS 回報問題時,除了此標頭外,還需要 X-WNS-Msg-ID 標頭和 MS-CV。
X-WNS-Debug-Trace:<string value>
| Value | Description |
|---|---|
| 字串值 | 字母數字串。 |
X-WNS-DeviceConnectionStatus
如果通知要求的 X-WNS-RequestForStatus 標頭中要求,此標頭會將裝置狀態傳回給呼叫端應用程式。
X-WNS-DeviceConnectionStatus:已連線 | 已中斷連線 | 暫時中斷連線
| Value | Description |
|---|---|
| connected | 裝置已上線並連線到 WNS。 |
| disconnected | 裝置已離線且未連線到 WNS。 |
| tempconnected(已棄用) | 裝置暫時中斷與 WNS 的連線,例如當 3G 連線中斷或膝上型電腦上的無線開關被關閉時。 通知用戶端平臺會將它視為暫時中斷,而不是刻意中斷。 |
X-WNS-Error-Description
此標頭提供人類可讀取的錯誤字串,應該記錄以協助偵錯。
X-WNS-Error-Description:<string value>
| Value | Description |
|---|---|
| 字串值 | 字母數字串。 |
X-WNS-Msg-ID
此標頭用來為呼叫端提供通知的標識碼。 建議您記錄此標頭,以協助除錯問題。 當向 WNS 回報問題時,需求此標題與 X-WNS-Debug-Trace 和 MS-CV 一起。
X-WNS-Msg-ID: <string value>
| Value | Description |
|---|---|
| 字串值 | 不超過16個字元的英數位元字串。 |
X-WNS-Status
此標頭描述 WNS 如何處理通知要求。 這可以使用,而不是將響應碼解譯為成功或失敗。
X-WNS-Status:received |dropd |channelthrottled
| Value | Description |
|---|---|
| received | WNS 已收到並處理通知。 注意:這不保證裝置已收到通知。 |
| dropped | 因為發生錯誤或客戶端已明確拒絕這些通知,所以通知已被明確取消。 如果裝置脫機,彈跳通知也會被取消。 |
| channelthrottled | 因為應用程式伺服器超過此特定通道的速率限制,因此已卸除通知。 |
MS-CV
此標頭提供與主要用於偵錯之要求相關的相互關聯向量。 如果提供 CV 作為要求的一部分,則 WNS 會使用此值,否則 WNS 將產生並回應 CV。 當向 WNS 回報問題時,需要此標頭以及 X-WNS-Debug-Trace 和 X-WNS-Msg-ID 標頭。
Important
如果您要提供自己的 CV,請為每個推播通知請求產生新的 CV。
MS-CV: <string value>
| Value | Description |
|---|---|
| 字串值 | 遵循 相互關聯向量標準 |
回應碼
每個 HTTP 訊息都包含其中一個回應碼。 WNS 建議開發人員記錄回應碼以用於偵錯。 當開發人員向 WNS 回報問題時,必須提供回應碼和標頭資訊。
| HTTP 回應碼 | Description | 建議的動作 |
|---|---|---|
| 200 確定 | WNS 已接受通知。 | 不需要。 |
| 400 錯誤的請求 | 一或多個標頭未正確指定,或與其他標頭衝突。 | 記錄要求的詳細數據。 檢查您的要求,並對照此文件。 |
| 401 未經授權 | 雲端服務未提供有效的驗證票證。 OAuth 票證可能無效。 | 為了要求有效的存取令牌,先透過存取令牌請求來驗證您的雲端服務。 |
| 403 禁忌 | 即使雲端服務已通過身份驗證,它仍未被授權將通知傳送至此 URI。 | 要求中提供的存取令牌與請求通道 URI 的應用程式認證不匹配。 請確定您應用程式指令清單中的套件名稱符合儀錶板中提供給您應用程式的雲端服務認證。 |
| 404 找不到 | 通道 URI 無效或 WNS 無法辨識。 | 記錄要求的詳細數據。 請勿將進一步通知傳送至此通道;此位址的通知將會失敗。 |
| 405 不允許的方法 | 無效的方法 (GET, CREATE):只允許 POST (Windows 或 Windows Phone) 或 DELETE (僅限 Windows Phone)。 | 記錄要求的詳細數據。 切換至使用 HTTP POST。 |
| 406 無法接受 | 雲端服務已超過其節流限制。 | 請在回應中 Retry-After 標頭值之後傳送您的要求 |
| 410 消失了 | 通道已過期。 | 記錄要求的詳細數據。 請勿將其他通知傳送至此通道。 讓您的應用程式要求新的通道 URI。 |
| 410 網域已封鎖 | WNS 已封鎖傳送網域。 | 請勿將其他通知傳送至此通道。 WNS 已因推播通知濫用而封鎖傳送域名。 |
| 413 請求的實體過大 | 通知承載超過5000位元組大小限制。 | 記錄要求的詳細數據。 檢查承載,以確保其符合大小限制。 |
| 500 內部伺服器錯誤 | 內部失敗導致通知傳遞失敗。 | 記錄要求的詳細數據。 透過開發人員論壇回報此問題。 |
| 503 服務無法使用 | 伺服器目前無法使用。 | 記錄要求的詳細數據。 透過開發人員論壇回報此問題。 如果觀察到 Retry-After 標頭,請在回應中的 Retry-After 標頭值之後傳送您的要求。 |
不支援的 HTTP 功能
WNS Web 介面支援 HTTP 1.1,但不支援下列功能:
- Chunking
- 導管處理 (POST 不是等冪)
- 雖然支援,但開發人員應該停用 Expect-100,因為這樣會在傳送通知時造成延遲。