

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SNS 訊息屬性
<a name="sns-message-attributes"></a>

Amazon SNS 支援傳遞訊息屬性，可讓您提供與訊息相關的結構化中繼資料項目 (例如時間戳記、地理空間資料、簽章及識別符)。啟用[原始訊息交付](sns-large-payload-raw-message-delivery.md)以後，針對 SQS 訂閱最多可傳送 10 個訊息屬性。如要傳送超過 10 個訊息屬性，則必須停用原始訊息交付。具有 10 個以上訊息屬性且導向已啟用「原始訊息交付」的 Amazon SQS 訂閱的訊息，將會因用戶端錯誤而遭到捨棄。

訊息屬性為選用且與訊息內文分開，但與訊息內文一起傳送。接收者可以使用這項資訊來決定如何處理訊息，而不必先處理訊息內文。

如需使用 AWS 管理主控台 或 以屬性傳送訊息的詳細資訊 適用於 Java 的 AWS SDK，請參閱 [使用 將訊息發佈至 Amazon SNS 主題 AWS 管理主控台](sns-publishing.md#sns-publishing-messages)教學課程。

**注意**  
只有在訊息結構是字串而非 JSON 時，才會傳送訊息屬性。

您也可以使用訊息屬性來協助結構化行動裝置端點的推送通知訊息。在此情況下，訊息屬性只會用來協助結構化推送通知訊息。屬性不會交付到端點，與搭配訊息屬性將訊息傳送到 Amazon SQS 端點時不同。

您也可以使用訊息屬性，讓您的訊息可透過使用訂閱篩選政策進行篩選。您可以將篩選政策套用到主題訂閱。以設為 `MessageAttributes` (預設) 的篩選政策範圍套用篩選政策時，訂閱只會接收到擁有政策所接受屬性的訊息。如需詳細資訊，請參閱[Amazon SNS 訊息篩選](sns-message-filtering.md)。

**注意**  
使用訊息屬性進行篩選時，值必須是有效的 JSON 字串。這樣做可確保訊息傳遞至已啟用訊息屬性篩選的訂閱。

## 訊息屬性項目和驗證
<a name="SNSMessageAttributesNTV"></a>

每項訊息屬性均是由以下項目組成：
+ **Name** - 訊息屬性名稱可包含下列字元：A-Z、a-z、0-9、底線 (\$1)、連字號 (-) 和句號 (.)。名稱不能以句號開頭或結尾，且不可連續使用句號。名稱會區分大小寫，且不能與訊息的其他所有屬性名稱重複。名稱長度上限為 256 個字元。名稱無法以 `AWS.` 或 `Amazon.` (或任何外殼的變體) 開頭，因為這類字首會預訂給 Amazon Web Services 使用。
+ **類型** - 支援的訊息屬性資料類型為 `String`、`String.Array`、`Number` 和 `Binary`。資料類型內容上的限制與訊息內文相同。如需詳細資訊，請參閱 [訊息屬性資料類型和驗證](#SNSMessageAttributes.DataTypes) 一節。
+ **數值** - 使用者指定的訊息屬性數值。對於字串資料類型，值屬性必須遵循與訊息內文相同的內容限制。不過，如果訊息屬性用於篩選，則值必須是有效的 JSON 字串，以確保與 Amazon SNS 訂閱篩選政策的相容性。如需詳細資訊，請參閱 *Amazon Simple Notification Service API 參考*中 [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) (發佈) 動作。

名稱、類型和值不能為空或 null。此外，訊息本文不能為空或 null。訊息屬性的所有部分，包括名稱、類型和值，均包含在訊息大小限制中，目前限制為 256 KB。

## 訊息屬性資料類型和驗證
<a name="SNSMessageAttributes.DataTypes"></a>

訊息屬性資料類型可識別 Amazon SNS 如何處理訊息屬性的值。例如，如果類型為數字，Amazon SNS 會驗證其是否為數字。

Amazon SNS 支援下列所有端點的邏輯資料類型，除非另有說明：
+ **字串** - 字串為 UTF-8 二進位編碼的 Unicode。如需代碼值的清單，請參閱 [http://en.wikipedia.org/wiki/ASCII\$1ASCII\$1printable\$1characters](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters)。
**注意**  
訊息屬性不支援代理值。例如，使用代理值來表示表情符號會出現以下錯誤：`Invalid attribute value was passed in for message attribute`。
+ **String.Array** - 格式化為字串的陣列，可包含多個值。值可以是字串、數字或關鍵字 `true`、`false` 和 `null`。數字或布林值類型的 String.Array 不需要引號。以逗號分隔的多個 String.Array 值。

   AWS Lambda 訂閱不支援此資料類型。如果您為 Lambda 端點指定此資料類型，則會以 `String` 資料類型中，Amazon SNS 提供給 Lambda 的 JSON 酬載傳遞。
+ **數字** - 數字為正負整數或浮點數字。數字需有足夠的範圍和精準度，方可涵蓋大多數整數、浮點數、雙精度浮點數一般支援的可能數值。一數字的值可從 -109 至 109，準確度到包含小數點後的 5 位數。前後的零會截去。

   AWS Lambda 訂閱不支援此資料類型。如果您為 Lambda 端點指定此資料類型，則會以 `String` 資料類型中，Amazon SNS 提供給 Lambda 的 JSON 酬載傳遞。
+ **二進位** - 二進位類型屬性可儲存任何二進位資料；例如壓縮資料、加密資料或影像。

## 為行動推播通知保留的訊息屬性
<a name="sns-attrib-mobile-reserved"></a>

下表列出為行動推播通知服務 (您可用來結構化您的推播通知訊息) 保留的訊息屬性：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/sns/latest/dg/sns-message-attributes.html)

1 如果訊息屬性不符合其需求，Apple 將拒絕 Amazon SNS 通知。如需其他詳細資訊，請參閱 Apple 開發人員網站上的[傳送通知請求至 APN](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns)。