Amazon SNS 常見問答集
概觀
問:什麼是 Amazon Simple Notification Service (Amazon SNS)?
Amazon Simple Notification Service (Amazon SNS) 是一項 Web 服務,可從雲端輕鬆設定、操作和傳送通知。開發人員可使用這個可高度擴展、彈性且具經濟效益的功能從應用程式發佈訊息,然後立即將這些訊息發送給訂閱者或其他應用程式。該服務旨在降低開發人員進行 Web 規模運算的難度。Amazon SNS 遵循「發布-訂閱」(pub-sub) 簡訊傳送範例,使用「推送」機制將通知傳送到用戶端,無須定期檢查或「輪詢」新資訊和更新。Amazon SNS 使用的 API 非常簡單,前期無須投入過多的開發精力,也無維護或管理開銷,並且按實際用量付費,讓開發人員能夠透過一種簡單的機制將功能強大的通知系統融入他們的應用程式之中。
問:如何開始使用 Amazon SNS?
完成傳送散發通知 10 分鐘教學,只要幾個步驟就能建立 Amazon SNS 主題和發布訊息。
如需詳細資訊,請參閱 Amazon SNS Developer Guide 及資源中心的範本程式碼。
問:使用 Amazon SNS 有哪些優點?
Amazon SNS 具備多種優勢,是建置和整合鬆散結合的分散式應用程式的多功能選項:
- 以推送為基礎的即時交付 (無輪詢)
- 簡單的 API,與應用程式輕鬆整合
- 透過多種傳輸協定的靈活訊息交付
- 經濟實惠、按實際使用量付費的模式,無須預付費用
- 以 Web 為基礎的 AWS 管理主控台提供點選式界面的簡易性
問:Amazon SNS 通知有哪些使用範例?
Amazon SNS 服務可滿足各種需求,包括事件通知、監控應用程式、工作流程系統、時效性資訊更新、行動應用程式,以及產生或使用通知的任何其他應用程式。例如在工作流程系統,Amazon SNS 可用來在分散式電腦應用程式中轉送事件、在資料存放區之間移動資料或更新商業系統中的記錄。有關驗證、核准、庫存更改和出貨狀態的事件更新和通知,將會立即傳送到相關系統元件及最終使用者。常見的模式是使用 SNS 將訊息發布至 Amazon SQS 訊息佇列,以非同步方式可靠地將訊息傳送至一或多個系統元件。Amazon SNS 的另一種使用範例是,將時效性事件傳送到行動應用程式及裝置。由於 Amazon SNS 具備高可靠性和可擴展性,所以如果開發人員要建置倚賴即時事件的應用程式,則他們必定受益良多。
問:Amazon SNS 如何運作?
開始使用 Amazon SNS 非常簡單。首先,開發人員必須建立一個「主題」(即一個「存取點」) – 指出特定的主題或事件類型,以用來發布訊息並允許用戶端訂閱通知。建立主題後,主題擁有者可為其設定政策,例如,限制可以發布訊息或訂閱通知的人員,或者指定支援哪些通知通訊協定 (即 HTTP/HTTPS、電子郵件、SMS)。訂閱者是指有興趣從關注的主題接收通知的用戶端;他們可以訂閱主題,也可以由主題擁有者為其訂閱。訂閱者需要為傳送的通知指定通訊協定和端點 (URL、電子郵件地址等)。當發布者有需要通知訂閱者的資訊或更新時,他們可以向該主題發布一則訊息,這樣將立即觸發 Amazon SNS 向所有適用的訂閱者傳送該訊息。
問:Amazon SNS 與 Amazon SQS 有何不同?
Amazon Simple Queue Service (SQS) 和 Amazon SNS 都是 AWS 的簡訊服務,但為開發人員提供不同的優點。Amazon SNS 允許應用程式透過「推送」機制向多個訂閱者傳送時效性訊息,並且無須定期檢查或「輪詢」更新。Amazon SQS 是供分散式應用程式使用的訊息佇列服務,它透過輪詢模式交換訊息,可用來分開傳送和接收元件。Amazon SQS 使分散式應用程式元件可以靈活地傳送和接收訊息,無須要求每個元件同時可用。
常見的模式是使用 SNS 將訊息發布至 Amazon SQS 訊息佇列,以非同步方式可靠地將訊息傳送至一或多個系統元件。
問:Amazon SNS 與 Amazon MQ 有何不同?
Amazon MQ、Amazon SQS 和 Amazon SNS 是簡訊服務,適合新創公司到大型企業的各種工作人員使用。如果您使用現有應用程式來傳送簡訊,並想以輕鬆快速的方式將簡訊移到雲端,我們建議您考慮 Amazon MQ。它支援產業標準的 API 和協定,所以您可從任何標準訊息代理程式切換到 Amazon MQ,無須重新編寫應用程式中的簡訊程式碼。如果您在雲端建立全新的應用程式,我們建議您考慮 Amazon SQS 和 Amazon SNS。Amazon SQS 和 SNS 是輕量型的全受管訊息佇列和主題服務,可以近乎無限地擴展,而且提供簡單易用的 API。您可以使用 Amazon SQS 和 SNS 來分離和擴展微型服務、分散式系統及無伺服器應用程式,並且提高可靠性。
問:如何開始使用 Amazon SNS?
若要註冊 Amazon SNS,請按一下 Amazon 詳細資訊頁面上的 "Sign up for Amazon SNS" 按鈕。您必須擁有一個 Amazon Web Services 帳戶才能存取此服務;如果還沒有該帳戶,則在您開始 Amazon SNS 註冊過程時,系統會提示您建立一個帳戶。註冊後,請參閱 Amazon SNS 文件和入門指南,以便開始使用 Amazon SNS。您可以使用 AWS 管理主控台輕鬆建立主題、新增訂閱者、傳送通知和編輯主題政策,所有的操作都能透過您的瀏覽器執行。
問:AWS 管理主控台是否支援 Amazon SNS?
AWS 管理主控台支援 Amazon SNS,並提供了點選式 Web 界面來存取和管理 Amazon SNS。使用 AWS 管理主控台,您可以建立主題、新增訂閱者和傳送通知,所有的操作都能透過您的瀏覽器執行。此外,使用 AWS 管理主控台可輕鬆將訊息發布到您所選擇的終端節點 (HTTP、SQS、Lambda、行動推送、電子郵件或 SMS),並可編輯主題政策以控制發布者和訂閱者的存取。
問:每個區域的 Amazon SNS 服務存取點各為何?
請參考 AWS 文件的 AWS Regions and Endpoints 部分,取得所有 Amazon SNS 服務存取點的最新清單。
問:是否可獲得從我的帳戶發起的 SNS API 呼叫的歷史記錄,以便用於安全分析和營運方面的故障排除?
是。SNS 支援 AWS CloudTrail,該服務是一種記錄帳戶的 AWS API 呼叫並為您提供日誌檔的 Web 服務。透過 CloudTrail,您可以獲得 API 發起人身分、API 呼叫時間、API 發起人來源 IP 地址、請求參數和 SNS 傳回的回應元素這類資訊的歷史記錄。
SNS 目前僅支援對經過驗證的呼叫進行 CloudTrail 稽核。現在不提供未經驗證的 ConfirmSubscription 和 Unsubscribe 呼叫的 CloudTrail 稽核日誌。如需詳細資訊,請參閱 SNS Developer Guide 的 CloudTrail 部分。
若要取得從您的帳戶發出的 SNS API 呼叫的歷史記錄,您只需在 AWS 管理主控台中開啟 AWS CloudTrail 即可。若要進一步了解有關 AWS CloudTrail 的資訊,請按一下這裡。
計費
問:Amazon SNS 的費用是多少?
使用 Amazon SNS 沒有最低費用,您只需按實際使用量付費。使用者支付的費用為:每 100 萬個 Amazon SNS 請求 0.50 USD、每 100,000 個透過 HTTP 的通知交付 0.06 USD 以及每 100,000 個透過電子郵件的通知交付 2.00 USD。對於 SMS 訊息,費用因目的地國家/地區而異。
Amazon SNS 還提供了免費方案,讓使用者可以開始免費使用 Amazon SNS。Amazon SNS 客戶每個月對於以下用量無須付費:前 100 萬個 Amazon SNS 請求、前 100,000 個透過 HTTP 傳送的通知,以及前 1,000 個透過電子郵件傳送的通知。
有關定價和資料傳輸費用的其他詳細資訊,請參閱 Amazon SNS 功能頁面。
問:使用 Amazon SNS 如何計價和收費?
開始使用服務時,沒有安裝費。每個月底將自動向您的信用卡收取當月使用費。只需登入您的 Amazon Web Services 帳戶,然後按 "Your Web Services Account" 下的 "Account Activity",即可隨時在 Amazon Web Services 網站上查看目前帳單期間的費用。
問:我的 Amazon SNS 的帳單週期怎麼計算?
您的 Amazon SNS 帳單週期從每月第一天開始,到每月的最後一天結束。您的每月費用將在每月結束時合計。
問:價格含稅嗎?
除非另有說明,否則我們的價格不包括適用的稅金和稅收 (包括加值稅和適用的營業稅)。帳單地址在日本的客戶若使用 AWS 服務,則需負擔日本消費稅。進一步了解。
特色和功能
問:Amazon SNS 主題的格式為何?
主題名稱限制為 256 個字元。允許使用英數字元以及連字號 (-) 和底線 (_)。AWS 帳戶中的主題名稱必須是唯一的。刪除主題後,可以重新使用該主題名稱。當建立主題時,Amazon SNS 將指派唯一的 ARN (Amazon Resource Name) 給該主題,其中包括服務名稱 (SNS)、區域、使用者的 AWS ID 和主題名稱。API 呼叫會傳回 ARN 以用於建立主題。每當發布者或訂閱者需要對該主題執行任何動作,都應該參考該唯一主題 ARN。
下面是由 AWS 帳戶 ID 為 "123456789012" 的使用者建立並在美國東部區域託管的名為 "mytopic" 的主題 ARN:
arn:aws:sns:us-east-1:1234567890123456:mytopic 注意:使用者不應該嘗試從其單獨的元件建置主題 ARN,應一律使用 API 呼叫傳回的名稱來建立主題。
問:Amazon SNS 可使用哪些操作?哪些人可執行這些操作?
Amazon SNS 提供一組簡單的 API 以便為主題擁有者、訂閱者和發布者啟用事件通知。
擁有者的操作:
- CreateTopic – 建立新主題。
- DeleteTopic – 刪除以前建立的主題。
- ListTopics – 列出特定使用者 (AWS ID) 擁有的主題。
- ListSubscriptionsByTopic – 列出特定主題的訂閱
- SetTopicAttributes – 設定/修改主題屬性,包括設定和修改發布者/訂閱者許可、支援的傳輸協定等
- GetTopicAttributes – 取得/查看主題現有的屬性
- AddPermission – 向所選的使用者授與指定動作的存取權限
- RemovePermission – 移除所選使用者對於指定動作的許可
訂閱者的操作:
- Subscribe – 註冊對特定主題的新訂閱,這會從 Amazon SNS 產生一則確認訊息
- ConfirmSubscription – 回應訂閱確認訊息,確認從所訂閱的主題接收通知的訂閱請求
- UnSubscribe – 取消以前註冊的訂閱
- ListSubscriptions – 列出特定使用者 (AWS ID) 擁有的訂閱
發布者的操作:
- Publish:向主題發布新的訊息。
問:為什麼有兩種不同的 API 用於列出訂閱?
用於列出訂閱的兩種 API 執行不同的功能並傳回不同結果:
- ListSubscriptionsByTopic API 允許主題擁有者查看所有主動註冊了某主題的訂閱者清單。
- ListSubscriptions API 允許使用者取得其所有有效訂閱 (關於一個或多個主題) 的清單。
問:接收通知時可使用哪些不同的交付格式/傳輸方式?
"SQS" - 使用者可以將 SQS 標準或 FIFO 佇列指定為端點;Amazon SNS 會將通知訊息加到指定的佇列 (然後,訂閱者就可以使用 ReceiveMessage、DeleteMessage 等 SQS API 進行處理)。
- "HTTP"、"HTTPS" - 訂閱者在註冊訂閱時指定 URL;透過 HTTP POST 將通知傳送到指定的 URL。
- 「電子郵件」、「電子郵件 JSON」 – 訊息以電子郵件形式傳送到註冊的地址。「電子郵件 JSON」以 JSON 物件的形式傳送通知,而「電子郵件」則是傳送文字型的電子郵件。
- "SQS" - 使用者可以將 SQS 標準佇列指定為端點;Amazon SNS 會將通知訊息加到指定的佇列 (然後,訂閱者就可以使用 ReceiveMessage、DeleteMessage 等 SQS API 進行處理)。
- "SMS" - 訊息以 SMS 文字訊息的形式傳送到註冊的電話號碼。
問:主題擁有者是否可以控制他們所建立/擁有的主題中允許的傳輸方式?
主題擁有者可以透過存取控制政策設定適當的許可,為其主題設定特定的傳輸方式。
問:擁有者如何設定存取控制政策?
請參閱 Amazon SNS 入門指南了解設定存取控制政策的概觀。
問:單一主題是否支援透過多種通訊協定/傳輸方式進行訂閱?
Amazon SNS 主題訂閱者可以透過主題支援的任何傳輸協定接收通知。主題可透過多種傳輸協定支援訂閱和通知交付。
問:訂閱者是否可以選擇只接收發布至某主題的一小部分訊息?
是,您可以使用 Amazon Simple Notification Service (SNS) 上的訊息篩選功能,建立更簡單流暢的發布/訂閱架構。訊息篩選功能讓 Amazon SNS 主題的訂閱者只會接收到他們感興趣的一小部分訊息,而不會接收到發布至某個主題的所有訊息。您可使用自動為您收集的 Amazon CloudWatch 指標來監控 SNS 訂閱篩選政策的使用。您也可以在 AWS CloudFormation 範本中使用 AWS::SNS::Subscription 資源類型來快速部署使用 SNS 訊息篩選功能的解決方案。如需詳細資訊,請嘗試篩選發佈到主題的訊息 10 分鐘教學,或參閱文件中的 Filter Messages with Amazon SNS 部分。
問:Amazon SNS 是否可與其他 AWS 服務搭配使用?
Amazon SNS 可與 Amazon SQS、Amazon EC2 和 Amazon S3 等其他 AWS 服務搭配使用。下面是一個訂單處理工作流程系統如何將 Amazon SNS 與 Amazon EC2、SQS 和 SimpleDB 搭配使用的範例。在這個工作流程系統中,每當發生交易或訂單在訂單處理流程中前進時,應用程式元件之間都會傳送訊息。客戶最初下達訂單時,會先在 Amazon SimpleDB 中記錄交易,然後 Amazon EC2 上執行的應用程式將訂單請求轉發到付款處理器,從客戶的信用卡或銀行帳戶中扣款。核准後,將訂單確認訊息發布到 Amazon SNS 主題。在這種情況下,該主題包括多種電子郵件/HTTP 訂閱者 (商家、客戶和供應鏈合作夥伴),Amazon SNS 針對該主題傳送的通知可即時提供所有訂閱者付款處理成功的更新資訊。您也可使用通知來協調 EC2 上執行的訂單處理系統,其中透過 HTTP 傳送的通知可觸發相關元件 (例如,庫存系統或出貨服務) 中的即時處理。透過整合 Amazon SNS 與 Amazon SQS,所有傳送的通知也會保留在 Amazon SQS 佇列中,未來由稽核應用程式進行處理。
問:所有提供 AWS 服務的區域是否都可使用 Amazon SNS?
請參考 AWS 文件的 AWS Regions and Endpoints 部分,取得 Amazon SNS 可用性的最新資訊。
問:客戶需要多久才能使用以前的主題名稱重新建立主題?
通常,大約在刪除名稱相同的舊主題 30-60 秒後,便可重新使用該主題名稱。確切的時間取決於該主題上有效的訂閱數 - 主題訂閱者越少,重新使用需等待的時間就越短,主題訂閱者越多,等待的時間就越長。
FIFO 主題
問:什麼是 SNS FIFO 主題?
與標準 SNS 主題類似,SNS FIFO 主題允許使用者發佈訊息到主題,以便交付到一系列訂閱端點。當交付這些訊息給訂閱者時,必須按照順序 (先進先出) 交付,且僅為一次,要用 SNS 來解決,SNS FIFO 主題是正確的選擇。Amazon SNS FIFO 主題可將按順序排列的訊息交付到 Amazon Simple Queue Service (Amazon SQS) FIFO 佇列,以便為分散式應用程序提供一致的端對端訊息順序。現在,您可以減輕處理高輸送量、持續訂購交易的負擔,簡化簡訊架構。在不需要嚴格排序時,Amazon FIFO 主題還可以將訊息交付至 Amazon SQS 標準佇列,從而為您設計應用程式的方式提供彈性。範例使用案例包括銀行交易日誌、股票行情指示器、航班追縱器、價格更新、新聞播報和庫存管理。
問:SNS FIFO 主題和 Kinesis Data Streams 的使用時機分別為何?
SNS FIFO 主題和 Kinesis Streams 都能讓您建置需要嚴格排序、多對多簡訊的應用程式。SNS FIFO 主題可以進一步開啟需要大量排序散發 (最多 100 個訂閱者) 的應用程式整合使用案例。另一方面,Kinesis Streams 支援排序散發 (最多 5 個訂閱者),並經常用於分析和異常偵測使用案例。
傳輸
問:使用者如何訂閱透過電子郵件傳送的通知?
要接收特定主題的電子郵件通知,訂閱者應將通訊協定指定為「電子郵件」或「電子郵件 JSON」,並提供有效的電子郵件地址作為端點。使用 AWS 管理主控台或直接呼叫 Amazon SNS API 即可完成此操作。然後,Amazon SNS 將傳送一個包含確認連結的電子郵件到指定的電子郵件地址,並要求監控該電子郵件地址的使用者明確同意接收該特定主題的電子郵件通知。使用者透過按一下提供的連結確認訂閱後,系統將向該電子郵件地址傳送此主題下發布的所有訊息。
問:為什麼 Amazon SNS 提供兩種不同的傳輸方式,以透過電子郵件接收通知?
這兩種電子郵件傳輸方式提供給兩種不同的客戶/最終使用者類型。「電子郵件 JSON」傳送 JSON 物件形式的通知,適用於以程式設計方式處理電子郵件的應用程式。「電子郵件」傳輸適用於最終使用者/消費者,通知為普通的文字訊息,易於閱讀。
問:使用者是否可更改透過電子郵件/電子郵件 JSON 傳送的通知的主題和顯示名稱?
Amazon SNS 允許使用者將電子郵件的 "Subject" 欄位指定為從 Publish API 呼叫中傳入的參數,而且每個已發布的訊息都可以是不同的。使用 SetTopicAttributes API 可設定主題的顯示名稱 – 該名稱適用於從此主題傳送的所有電子郵件。
問:要接收 Amazon SNS 的通知,訂閱者是否需要對其電子郵件設定進行特別的設定?
大多數情況下,使用者無須特別操作即可接收 Amazon SNS 的訂閱確認和通知。不過,有時候電子郵件供應商的預設設定或其他使用者特定的設定會誤將電子郵件重新導向到垃圾郵件資料夾。為確保使用者可看到 Amazon SNS 傳送的確認訊息和通知,可以將 "[email protected]" 新增到連絡人清單,並檢查其垃圾郵件資料夾中是否有 Amazon SNS 的訊息。
問:如果傳入 SQS 佇列做為端點,使用者是否需要在訂閱前建立佇列? 佇列需要哪些許可?
使用者應使用 SQS 主控台,先建立 SQS 佇列,然後才能讓它訂閱主題。在主控台上選擇此佇列,並從功能表列的 "Queue Actions" 下拉式清單中選擇 "Subscribe Queue to SNS Topic"。在訂閱對話方塊,從 "Choose a Topic" 下拉式清單中選擇主題,然後按一下 "Subscribe" 按鈕。要獲得完整的逐步說明,請參閱 Amazon SNS 文件。
問:開發人員需要如何設定 Amazon SQS 佇列以接收 Amazon SNS 通知?
要讓 Amazon SNS 傳送通知到 SQS 佇列,開發人員應訂閱一個主題,指定 "SQS" 為傳輸方式,並指定有效的 SQS 標準佇列為端點。為了使 SQS 佇列能夠接收來自 Amazon SNS 的通知,該 SQS 佇列擁有者必須訂閱有關 Amazon SNS 主題的 SQS 佇列,以便成功地向佇列傳送訊息。
如果訂閱的 Amazon SNS 主題和接收通知的 SQS 佇列為同一個使用者所擁有,則無須進行其他操作。發布到該主題的任何訊息將自動傳送到指定的 SQS 佇列。如果 SQS 佇列擁有者不是該主題的擁有者,則 Amazon SNS 將要求明確確認訂閱請求。
有關 SQS 佇列訂閱主題以及為 SQS 佇列設定存取控制政策的更多詳細資訊,請參閱 Amazon SNS 文件。
問:如何向多個 SQS 佇列散發相同的訊息?
首先,使用 SNS 建立一個 SNS 主題。然後,建立多個 SQS 標準佇列並使其訂閱該 SNS 主題。現在,無論何時訊息發送到 SNS 主題,都會被散發到 SQS 佇列,也就是說,SNS 會將該資訊提交給所有訂閱該主題的 SQS 佇列。
問:Amazon SNS 傳送的結構化通知訊息是什麼格式?
由 Amazon SNS 傳送並透過 HTTP、HTTPS、電子郵件 JSON 和 SQS 傳輸通訊協定交付的通知訊息包含一個簡單的 JSON 物件,它由下列資訊組成:
- MessageId:通用唯一識別符,每個發布的通知只會有一個唯一的識別符。
- Timestamp:發布通知的時間 (GMT 時間)。
- TopicArn:此訊息發布到的主題
- Type:交付訊息的類型,對於通知交付,將設定為 "Notification"。
- UnsubscribeURL:取消訂閱此主題端點並防止接收任何更多通知的連結。
- Message:從發布者接收到的訊息承載 (本文)。
- Subject:"Subject"欄位 – 如果作為可選參數,隨同訊息包含在 publish API 呼叫中。
- Signature:Message、MessageId、Subject (如果有)、Type、Timestamp 和 Topic 值的 Base64 編碼 "SHA1withRSA"簽章。
- SignatureVersion:使用的 Amazon SNS 簽章版本。
透過「電子郵件」傳輸方式傳送的通知訊息僅包含從發布者接收到的承載 (訊息本文)。
問:使用者如何訂閱透過 SMS 傳送的通知?
請參閱下面的「SMS 相關問題」一節。
安全性
問:使用者將訊息傳送到我的主題時,該如何保護訊息的安全?
針對 Amazon SNS 發出的所有 API 呼叫都會根據該使用者的 AWS ID 和簽章進行驗證。此外,我們建議使用者連接到安全的 SSL 端點,確保透過網路傳輸資料的安全性。
問:誰可以建立主題?
只有已註冊 Amazon SNS、具有有效 AWS ID 的使用者才能建立主題。建立主題最簡單的方式是使用 AWS 管理主控台。此外,也可以透過 CreateTopic API 建立。以下網址 http://aws.amazon.com/console 提供 AWS 管理主控台
問:多個使用者是否可以向單一主題發布訊息?
主題擁有者可以設定明確許可,以允許多個使用者 (具有有效 AWS ID) 向一個主題發布訊息。在預設情況下,只有主題擁有者擁有向主題發布訊息的許可。
問:擁有者如何授與/撤銷主題的發布或訂閱許可?
AddPermission 和 RemovePermission API 提供簡潔的界面,供開發人員新增和移除主題的許可。不過,對於條件性存取和更進階的使用案例,使用者則應使用存取控制政策來管理許可。管理許可最簡單的方式是使用 AWS 管理主控台。以下網址 http://aws.amazon.com/console 提供 AWS 管理主控台
問:主題擁有者如何授與訂閱者存取權限? 訂閱者是否必須擁有有效的 AWS ID?
無論使用者是否擁有 AWS ID,Amazon SNS 都能讓他們輕鬆接收通知。主題擁有者可使用存取控制政策為主題設定適當的許可,以便對訂閱者授與/限制存取權限。使用者可透過兩種方式從 Amazon SNS 接收通知:
- 擁有 AWS ID 的使用者:擁有有效 AWS ID 的訂閱者 (請參閱此連結以了解如何取得 AWS ID 的詳細資訊) 可以直接訂閱任何主題 – 只要主題擁有者已授與他們許可。AWS ID 將在訂閱註冊時予以驗證。
- 其他使用者:主題擁有者可以代表沒有 AWS ID 的使用者訂閱和註冊端點。
在以上兩種情況下,訂閱端點的擁有者都需要透過回覆 Amazon SNS 傳送的確認訊息,明確同意並確認訂閱。
問:Amazon SNS 如何對 API 呼叫進行驗證?
對 Amazon SNS 發出的所有 API 呼叫都會進行身分驗證,其方法是要求使用 AWS ID 帳戶的私密金鑰簽署請求,並驗證包含在請求中的簽章。
問:Amazon SNS 如何驗證訂閱請求,以確保通知不會作為垃圾郵件傳送給使用者?
訂閱註冊時,Amazon SNS 將確保通知僅傳送到已註冊的有效訂閱者/端點。為防止垃圾郵件並確保訂閱者端點確實想接收特定主題的通知,Amazon SNS 將透過「2 步式交握」要求訂閱者明確同意接收:
i.當使用者首次呼叫 Subscribe API 並訂閱端點時,Amazon SNS 將向指定的端點傳送確認訊息。
ii.當端點收到確認訊息後,訂閱者應傳送有效回覆確認訂閱請求。Amazon SNS 只有在此時才會將訂閱請求視為有效。如果對詢問沒有回應,Amazon SNS 則不會向該端點傳送任何通知。確認訂閱的具體機制因所選的傳輸通訊協定而有所不同:
- 對於 HTTP/HTTPS 通知,Amazon SNS 首先會向指定的 URL 發布確認訊息 (包含字符)。監控 URL 的應用程式必須使用包含的字符呼叫 ConfirmSubscription API。
- 對於電子郵件和電子郵件 JSON 通知,Amazon SNS 會向指定位址傳送電子郵件,其中包含嵌入連結。使用者需要按一下該嵌入連結來確認訂閱請求。
- 對於 SQS 通知,Amazon SNS 會將包含字符的詢問訊息排入指定的佇列。監控佇列的應用程式必須使用該字符呼叫 ConfirmSubscription API。
注意:如果您向您 Amazon SNS 主題訂閱 Amazon SQS 佇列,且兩者屬於同一個 AWS 帳戶「所有」,在這種特殊情況下,您不必執行上述明確「同意」步驟。
問:等待確認時,訂閱請求需要在待處理狀態保持多久時間?
訂閱請求期間傳送到端點的確認訊息中所含的字符有效期為 2 天。
問:誰可以更改主題的許可?
只有主題擁有者可以更改該主題的許可。
問:使用者如何驗證通知訊息是從 Amazon SNS 傳送的?
為確保通知的真實性,Amazon SNS 將使用密碼編譯安全、非對稱式機制 (以憑證為基礎的私有-公開金鑰對) 來簽署所有通知交付。Amazon SNS 會將其憑證發布到使用者熟知的位置 (例如,在美國東部區域為 http://sns.us-east-1.amazonaws.com/SimpleNotificationService.pem),並使用該憑證的私有金鑰簽署訊息。開發人員/應用程式可使用該憑證的公開金鑰取得憑證並驗證通知中的簽章,以確保該通知確實是由 Amazon SNS 傳送的。有關憑證位置的更多詳細資訊,請參閱 Amazon SNS 詳細資訊頁面。
問:發布者是否也需要簽署訊息?
Amazon SNS 要求擁有 AWS ID 的發布者使用其 AWS 密鑰簽署訊息以進行驗證,然後再由 Amazon SNS 驗證簽章。
問:發布者/訂閱者是否可使用 SSL 確保訊息的安全性?
是,發布者和訂閱者都可使用 SSL 協助確保傳送和接收訊息的通道安全。發布者可透過 HTTPS 連接到 Amazon SNS,並經由 SSL 通道發布訊息。訂閱註冊時,訂閱者應註冊一個啟用了 SSL 的端點,這樣通知將透過 SSL 通道傳送給端點。
問:訂閱者要允許 Amazon SNS 向註冊的端點傳送通知,需具有什麼許可?
接收通知的端點擁有者必須向 Amazon SNS 授與向該端點傳送訊息的許可。
問:如何取消訂閱?
訂閱者可以透過主題擁有者、訂閱擁有者或其他方式取消訂閱,其取決於確認訂閱請求所使用的機制。
- 透過在呼叫 ConfirmSubscription API 時將 AuthenticateOnUnsubscribe 旗標設定為 True 而確認的訂閱,它們只能由主題擁有者或訂閱擁有者取消訂閱。
- 如果訂閱是匿名確認,並沒有將 AuthenticateOnUnsubscribe 旗標設定為 True,則可以匿名將其取消訂閱。
在所有情況下,除非由訂閱擁有者取消訂閱,否則都會向端點傳送一則最終取消訊息,以方便端點擁有者重新訂閱該主題 (特別是無意中發出取消訂閱請求或出現錯誤的情況)。有關 ConfirmSubscription API 的更多詳細資訊,請參閱 Amazon SNS 文件。
合規
問:Amazon SNS 是否符合 HIPAA 資格?
是,AWS HIPAA 合規計劃中的 HIPAA 合格服務包含 Amazon SNS。如果您擁有與 AWS 共同履行的商業夥伴協議 (BAA),現在可以使用 Amazon SNS 建立 HIPAA 合規應用程式。如果沒有 BAA 或對在 HIPAA 合規應用程式使用 AWS 有任何問題,請聯絡我們以取得詳細資訊。請注意,Amazon SNS 行動推送通知和 SMS 功能在服務的 HIPAA Eligibility 範圍之外,因此,不適合傳輸受保護的醫療資訊 (PHI)。
若要進一步了解,請參閱以下資源:
如需涵蓋 Amazon SNS 的最新合規計劃清單,請參閱 合規計劃的 AWS 服務範圍。
問:Amazon SNS 還符合哪些規範?
請參閱合規計劃的 AWS 服務範圍,了解關於 SNS 和其他 AWS 服務的最新資訊。
可靠性
問:我的資料發布到 Amazon SNS 後的耐用性如何?
SNS 為它收到的所有訊息提供耐用的儲存。SNS 收到發佈請求時,在它向寄件者確認收到請求之前,會先跨多個可用區域儲存多個訊息複本 (到磁碟)。每個 AWS 區域都有多個稱為可用區域的隔離位置。雖然很罕見,但是如果一個區域發生故障,SNS 的操作和訊息的耐用性仍然可以繼續,而不會中斷。
問:一則通知是否會包含多則訊息?
否,所有通知訊息只包含一則發布的訊息。
問:每則訊息會讓訂閱者收到多少次?
雖然大多數情況下每則訊息只會向您的應用程式傳送一次,但 Amazon SNS 的分散式特點和瞬息萬變的網路條件可能導致訂閱者端偶爾收到重複的訊息。開發人員應將其應用程式設計為多次處理一則訊息,不會產生任何錯誤或不一致性。
問:訊息是否會按其發布的確切順序傳送給我?
Amazon SNS 服務將嘗試按訊息發布到主題的順序傳送發布者的訊息。不過,網路問題可能會導致訂閱者端的訊息順序錯亂。
問:是否可刪除已發布的訊息?
否,一旦將訊息成功發布到主題,就無法再撤銷。
問:Amazon SNS 是否保證可將訊息傳遞至訂閱的端點?
是,只要訂閱的端點可以存取。當 Amazon SNS 因用戶端側或伺服器側錯誤而無法存取訂閱的端點時,則訊息傳遞失敗。當端點擁有者刪除訂閱的端點時,或者其存取許可發生變更以阻止 Amazon SNS 向該端點傳遞訊息時,則會發生用戶端側錯誤。當為訂閱的端點提供支援的服務無法使用時,如 Amazon SQS 或 AWS Lambda,則會發生伺服器側錯誤。當 Amazon SNS 收到用戶端側錯誤,或繼續收到伺服器側錯誤,顯示訊息傳送嘗試次數超過相應的重試策略指定的重試次數時,Amazon SNS 會捨棄該訊息,除非將無法寄出信件佇列附加至該訂閱。如需詳細資訊,請參閱訊息傳遞重試和 Amazon SNS 無法寄出信件佇列。
問:如果訂閱端點無法使用,會對 Amazon SNS 訊息造成什麼狀況?
若訊息無法在第一次嘗試時便成功傳遞,Amazon SNS 會執行四階段重試政策:1) 各次嘗試之間不延遲便重試,2) 各次嘗試之間以最小延遲重試,3) 根據退避模型重試,以及 4) 各次嘗試之間以最大延遲重試。訊息傳遞重試政策用盡後,Amazon SNS 可以將訊息移至無法寄出信件佇列 (DLQ)。如需詳細資訊,請參閱訊息傳遞重試和 Amazon SNS 無法寄出信件佇列。
Worldwide SMS
問:Worldwide SMS 有哪些特徵?
您可以使用 Amazon SNS 將 SMS (文字) 訊息傳送至 200 多個國家/地區。如果當地法律和規定要求,您必須先取得收件人的許可,才能將 SMS 訊息傳送到收件人的電話號碼。Amazon SNS 現在可透過 AWS 最終使用者訊息服務來傳遞 SMS 訊息。您還可以設定帳戶級和訊息級消費配額,以避免不小心超支。
問:什麼時候應該將 SMS 訊息標示為「交易」或「促銷」?
您應根據 SMS 訊息的內容和意圖將您的訊息標記為「交易」或「促銷」。您必須為 SMS 選擇的類型,依據法規或目的地國家的電信運營商或監管機構提供的最佳實務建議來指定。如需有關訊息路由的詳細資訊,以及 SMS 訊息的正確類型,請造訪訊息路由。
問:什麼是原始 ID,Amazon SNS 支援哪些類型的原始 ID?
將 SMS 訊息傳送至行動電話號碼時,系統會透過與 AWS 帳戶關聯的電話號碼或寄件者 ID 傳送訊息。整體來說,這些都稱為原始 ID。AWS 支援各種類型的原始 ID,包括短碼、長碼、10DLC 和寄件者 ID。若要請求並購買原始 ID,請參閱《AWS 最終使用者訊息服務使用指南》中的請求電話號碼。SMS 工作負載的所有原始 ID 均透過 AWS 最終使用者訊息服務來管理,並且可與 Amazon SNS 搭配使用來傳送簡訊。您可以前往 AWS 最終使用者訊息服務主控台,查看帳戶中可用的原始 ID 清單。若要進一步了解,請造訪 SMS 概念。
問:我可以在哪裡了解傳送 SMS 訊息的最佳實務?
傳送 SMS 訊息時,請務必了解計劃傳送 SMS 訊息的所有目的地國家/地區的規定,並遵守法律、法規和運營商要求。若要進一步了解,請瀏覽 SMS 最佳實務。
問:什麼是帳戶級和訊息級消費配額,它們如何運作?
您可以針對 AWS 帳戶和個別訊息指定消費配額,而且該配額只適用於傳送 SMS 訊息的費用。
每個帳戶的預設消費配額 (如果未指定) 是每個月 1.00 USD。如果您要提高配額,請提交 SNS 提高配額案例。在「新」配額值中,輸入您想要的每月消費配額。在「使用案例說明」欄位中指明您要申請提高 SMS 每月消費配額。
當 SMS 流量的總成本低於該日曆月的消費配額時,Amazon SNS 會傳送您發佈的 SMS 訊息。一旦超過消費配額,Amazon SNS 就會停止交付訊息,直到您提高消費配額或新的日曆月開始為止。同樣地,您也能指定個別訊息的消費配額,只有在成本低於配額時,Amazon SNS 才會傳送訊息。如果超過帳戶級消費配額,則無論是否超過訊息級消費配額,Amazon SNS 都不會傳送您的 SMS 訊息。
問:是否支援雙向 SMS?
Amazon SNS 透過 AWS 最終使用者訊息服務支援雙向 SMS 功能。若要啟用雙向訊息 (當地法規要求的選擇退出情況除外),請造訪雙向 SMS 訊息。
問:是否需要訂閱 SNS 主題的電話號碼,才能傳送 SMS 訊息到該主題?
您不需要訂閱 Amazon SNS 主題的電話號碼,就能發布訊息到該主題。您可以使用 Amazon SNS 主控台或 Amazon SNS API 中的發布請求,直接將訊息發布到電話號碼。
問:AWS 針對採購是否提供短碼和長碼?
是。您可以保留專用的短碼、長碼和其他原始 ID 類型。您可透過 AWS 最終使用者訊息服務主控台來請求原始 ID。如需詳細資訊,請參閱請求電話號碼。
問:是否可以向 AWS 購買長碼?
是。您可以如這裡所述,購買與 Amazon SNS 搭配使用的長碼。
問:SMS 通知是否來自特定的原始號碼?
Amazon SNS 會使用數字為您的帳戶進行設定。它將優先使用專用短碼,後面接著其中一組專用長碼。如果您沒有專用號碼,Amazon SNS 將回復到使用一組共享號碼來傳送 SMS 通知。使用共享號碼組時,Amazon SNS 在向特定目的地電話號碼傳送訊息時會嘗試使用相同的號碼。這稱為「黏性寄件者 ID」。然而,根據網路條件和可用的輸送量等各種因素,系統也可能使用不同的號碼。
為了控制 Amazon SNS 用來傳送訊息的原始身分,您可以保留專用短碼或專用長碼。透過預留一或多個號碼,您可以讓對方輕鬆認出您的組織就是訊息的來源。如需詳細資訊,請參閱 Amazon SNS 開發人員指南中的為 SMS 訊息預留專用短碼或為 SMS 訊息預留專用長碼。
問:Amazon SNS 在哪些國家/地區支援全球 SMS?
Amazon SNS 支援超過 200 個國家,這個數量目前還在持續增加。請參閱 SMS 支援的國家/地區清單,以取得完整的支援通話國家/地區清單。 關於傳送至中國的 SMS 訊息,請聯絡我們。
問:哪些 AWS 區域支援全球 SMS?
請參閱 Amazon SNS 文件中的 SNS 支援的國家/地區頁面,取得使用 Amazon SNS 傳送 SMS 託管應用程式的最新地區清單。
問:傳送訊息到其他國家/地區的電話號碼格式為何?
AWS 強烈建議在 "to" 和 "from" (如果適用) 欄位的所有電話號碼使用 E.164 號碼格式。請參閱 SMS 支援的國家/地區清單,以取得完整的支援國家/地區清單。
問:Amazon SNS 是否能夠判斷電話號碼來自行動電話、有線電話或 VoIP 號碼?
否。Amazon SNS 目前無法偵測電話號碼來自行動電話、有線電話或 VoIP。
問:是否支援 SMS 訊息的以時間為基礎交付或排程交付?
否。Amazon SNS 目前不支援以時間為基礎交付或排程交付。
問:如何追蹤 SMS 訊息的交付狀態?
透過啟用 Amazon SNS 的交付狀態功能,您可以取得每個訊息的下列資訊:訊息 ID、傳送時間、目的地電話號碼、處置、處置原因 (如果適用)、價格和暫留時間。
問:是否支援 MMS?
否。Amazon SNS 目前不支援 MMS 訊息。
問:從 Amazon SNS 接收 SMS 訊息的費用為何?
接收 SMS 訊息的費用取決於收件人的無線/行動電信業者方案的資料和簡訊量。
問:收件人如何選擇退出從 AWS 接收 SMS 訊息?
收件人用下列任一項目來回覆訊息,即可使用裝置選擇退出:
- ARRET (法文)
- CANCEL
- END
- OPT-OUT
- OPTOUT
- QUIT
- REMOVE
- STOP
- TD
- UNSUBSCRIBE
若要退出,收件人必須將回覆傳送到 Amazon SNS 用來傳送訊息的長碼或短碼。收件人退出之後,就不會再收到 AWS 帳戶傳送給您的 SMS 訊息,除非您加入電話號碼。
問:如何知道收件人裝置是否已「選擇退出」全球 SMS?
SNS 主控台會顯示您帳戶中選擇退出的號碼清單。此外,Amazon SNS API 提供 ListPhoneNumbersOptedOut 請求,可列出選擇退出的電話號碼。
問:如果使用者選擇退出,是否會從 SNS 主題自動取消訂閱該號碼?
否。選擇退出不會取消訂閱 Amazon SNS 主題中的號碼,但會停用訂閱。這表示如果您選擇加入電話號碼,則不需要將電話號碼重新訂閱到主題。
問:如何確認最終使用者已收到 SMS 訊息?
您可以使用我們的交付狀態功能,以取得您 SMS 訊息最終處置的相關資訊。如需此功能的詳細資訊及使用方法,請參閱我們的文件。
問:Amazon SNS 是否提供 SMS 訊息的交付回條?
我們的交付狀態功能會根據從目的地電信業者收到的交付回條提供資訊。如需交付狀態功能的詳細資訊及使用方法,請參閱我們的文件。
問:SMS 是否支援交付到 Google Voice 或 Hangouts 等 VoIP 服務?
是。Amazon SNS 支援交付到可接收 SMS 訊息的 VoIP 服務。
SMS 定價
問:發送 SMS 訊息要支付多少費用?
若您透過 Amazon SNS API 傳送 SMS 訊息,我們依據向 SNS 發出的每百萬個要求 0.5 USD 計費。此外,對於每個 SMS,您須支付傳遞 SMS 訊息的費用,視乎收件人的國家/地區、使用的路由類型、收件者的行動營運商和其他因素而有所差異。如需傳遞 SMS 訊息費用的詳細資訊,請造訪 AWS 最終使用者訊息服務定價頁面。
問:如果我的 SMS 訊息未能傳遞,是否需要付費?
如果目的地電信業者回報您嘗試傳送訊息到無效的電話號碼,則可能需要支付交付失敗的費用。電話號碼可能因數種原因而無效,例如電話號碼不存在、收件人帳戶額度不足或是目的地號碼是市內電話號碼。在其他情況下,SMS 故障也會收取費用。
問:訊息長度是否會影響支付的費用?
是。單一 SMS 訊息最多可包含 140 個位元組的資訊。如果訊息內容超過 140 個位元組,Amazon SNS 會自動將訊息分成多則訊息。Amazon SNS 會將一則較長訊息分成數則較短訊息時,而您必須支付每則訊息的費用。
單一訊息的最大字元數目視字元的編碼方式而定。使用 GSM-7 (又稱為 GSM 03.38) 編碼字元的訊息可包含 160 個字元。使用 ASCII 編碼的訊息可包含最多 140 個字元。使用 UCS-2 編碼的訊息可包含最多 70 個字元。當您使用 Amazon SNS 發送 SMS 訊息時,系統會自動選擇能夠支援訊息中所有字元的最緊密編碼方式。
如需發送 SMS 訊息的詳細資訊,請參閱 Amazon Simple Notification Service Developer Guide 中的 Sending an SMS Message。
問:是否有可發送 SMS 訊息的 AWS 免費方案額度?
否。
配額和限制
問:每個主題是否有主題數量或訂閱者數量的配額?
SNS 預設為每個主題提供 1,000 萬個訂閱,為每個帳戶提供 100,000 個主題。如需請求提高配額,請聯絡支援。
問:訊息中可包含多少資料量以及哪些資料類型?
除了 SMS 訊息之外,Amazon SNS 訊息可包含最多 256 KB 的文字資料,包括 XML、JSON 和無格式文字。
接受以下 Unicode 字元:
#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]
(根據 http://www.w3.org/TR/REC-xml/#charsets)。
每 64 KB 區塊的已發布資料以 1 次請求計費。例如,一個 256 KB 承載的單一 API 呼叫將以四次請求計費。
SMS 訊息
每個 SMS 訊息最多可包含 140 位元組,字元限制則取決於編碼方式。例如,SMS 訊息可以包含:
- 160 個 GSM 字元
- 140 個 ASCII 字元
- 70 個 UCS-2 字元
如果您發布的訊息超出大小限制,Amazon SNS 會將該訊息分成多個訊息來傳送,且每個訊息的大小都在限制範圍內。訊息不會在某個文字的中間切斷,而是以完整的文字為界線。單一 SMS 發布動作的總大小限制為 1600 位元組。
問:單一主題可以套用多少個訊息篩選條件?
根據預設,每個區域的每個帳戶可以在單一主題套用 200 個篩選政策。如果您需要更多的篩選條件,請聯絡我們。
問:是否應將一些 TCP 埠用於 SNS 和 EC2 之間的跨區域通訊?
是,在 80/443/4080/8443 以外的連接埠上進行的 SNS 和 EC2 間的跨區域通訊無法保證可正常運作,應避免使用。
原始訊息交付
問:什麼是原始訊息交付?
您可以選擇讓訊息以原始形式傳送,也就是和您發布時的訊息形式完全一樣。預設情況下,訊息會以 JSON 編碼進行傳送,JSON 編碼提供訊息和主題的中繼資料。原始訊息交付可以透過設定訂閱的 "RawMessageDelivery" 屬性來啟用。該屬性可以使用 AWS 管理主控台或使用 API SetSubscriptionAttributes 來設定。
問:如果未設定訂閱的原始訊息交付屬性,預設行為是什麼?
如果未設定該屬性,訊息會預設以 JSON 格式傳送,也就是目前的行為。這可確保現有的應用程式會繼續如期執行。
問:哪些類型的端點支援原始訊息交付?
SQS 和 HTTP 端點支援原始訊息交付支援。交付至 Lambda、電子郵件和 SMS 端點的行為方式將是相同的,不受 "RawMessageDelivery" 屬性影響。
問:原始訊息如何傳送至 HTTP 端點?
原始格式的訊息傳送至 HTTP/s 端點之後,HTTP POST 主體將會包含訊息本文。
行動推送通知
問:什麼是 SNS 行動推送?
SNS 行動推送可讓您使用 Simple Notification Service (SNS) 向 Apple、Google、Fire OS 和 Windows 裝置以及在中國具有百度雲推送功能的 Android 裝置傳送推送通知。使用推送通知功能,透過彈出有關某個事件的通知,安裝的行動應用程式可以立即通知其使用者而不用開啟應用程式。例如,如果您安裝了一個體育應用程式並啟用了推送通知,則該應用程式便可以將您最喜愛的球隊的最新分數傳送給您,即使您未執行該應用程式。通知會顯示在您的裝置上,當您得知其中的資訊後,可以啟動應用程式以顯示詳細資訊。使用者體驗與接收 SMS 類似,但是功能更強大且費用更低。
問:如何開始傳送推送通知?
推送通知只能傳送到有安裝您的應用程式的裝置,而且這些裝置的使用者選擇了接收推送通知。SNS 行動推送不需要使用者明確同意傳送推送通知,但是 iOS、Android 及 Kindle Fire 作業系統則需要使用者明確同意。為了透過 SNS 傳送推送通知,您同時還要在 SNS 中註冊您的應用程式和每個安裝了該應用程式的裝置。如需詳細資訊,請參閱 Using Amazon SNS Mobile Push Notifications。
問:支援哪些推送通知平台?
目前支援下列推送通知平台:
- Amazon Device Messaging (ADM)
- Apple Push Notification Service (APNS)
- Firebase Cloud Messaging (FCM)
- 適用於 Windows 8 以上和 Windows Phone 8.1 以上版本的 Windows Push Notification Service (WNS)
- 適用於 Windows Phone 7 以上版本的 Microsoft Push Notification Service (MPNS)
- 適用於中國的 Android 裝置的百度雲推送
問:使用 SNS 免費方案可以傳送多少則推送通知?
SNS 免費方案包括 100 萬次發布,加上 100 萬次行動推送交付。因此您每月可以免費傳送 100 萬則推送通知。向所有行動推送端點傳送的通知累計起來可達到 100 萬則免費行動推送交付。
問:啟用推送通知是否需要對 SNS 行動推送進行任何特殊確認?
否,不需要。無論 SNS 是否傳送推送通知,最終使用者可以在初次執行應用程式時選擇接收推送通知。
問:是否需要修改我的用戶端應用程式以使用 SNS 行動推送功能?
SNS 不會要求您修改用戶端應用程式。百度雲推送要求無論您是否選擇使用 SNS 服務,都要將百度指定的元件新增到您的用戶端程式碼,以確保能正常運作。
問:SNS 主題如何在行動推送中運作?
SNS 主題可以包含來自任何支援的推送通知平台的訂閱者,以及任何其他端點類型,例如 SMS 或電子郵件。當您向某個主題發布通知時,SNS 會將該則訊息的相同副本傳送到訂閱該主題的每個端點。如果您使用平台特定的承載來定義傳送給每個推送平台的準確承載,當您超過相關推送通知平台所規定的最大承載時,您的發布操作將會失敗。
問:不同的目標平台各自支援何種規模的承載大小?
SNS 支援的最大承載大小與基本原生平台支援的大小相同。客戶可以使用 JSON 物件來傳送平台特定的訊息。請參閱 Using SNS Mobile Push API 了解更多詳細資訊。
問:平台特定的承載如何工作?
當您向主題發布內容並想要將自訂訊息傳送到不同推送通知平台的端點時,您需要選擇發布對話方塊中的 "Use different message body for different protocols" 選項,然後更新訊息。您可以使用平台特定的承載來指定轉送到每個推送通知服務的精確 API 字串。例如,您可以使用平台特定的承載透過 APNS 來操作您的 iOS 應用程式徽章計數。如需詳細資訊,請參閱 Using Amazon SNS Mobile Push Notifications。
問:一個字符是否能訂閱多個主題?
是。每個字符可以訂閱的 SNS 主題沒有數量限制。
問:什麼是直接定址? 直接定址何運作?
直接定址讓您可以將通知直接傳送給單一端點,而不是將相同的訊息傳送給一個主題的所有訂閱者。如果您想將精準定位的訊息傳送給每一位收件人,可以使用此功能。當您在 SNS 註冊裝置字符時,SNS 便會建立與此字符對應的端點。您可以像將內容發布到主題一樣來將內容發布到字符端點。您可以直接發布通知的文字,或利用平台特定功能 (例如更新應用程式的徽章計數) 的優勢發布平台特定承載。直接定址目前僅限推送通知端點。
問:SNS 是否支援 SMS 或電子郵件直接定址?
目前,直接定址僅支援行動推送端點 (APNS、FCM、ADM、WNS、MPNS、百度) 和 SMS。電子郵件簡訊需要使用主題。
問:SNS 行動推送如何處理通知服務中的字符回饋?
推送通知服務 (例如 APNS 和 FCM) 可提供關於字符過期或被新字符取代的回饋。如果 APNS 或 FCM 報告特定字符已過期或無效,則 SNS 會自動「停用」與該字符關聯的應用程式端點,並透過事件通知您此變更。FCM 有時不僅表示字符無效,而且還在其對 SNS 的回應中提供與應用程式端點關聯的新字符。發生這種情況時,SNS 會自動使用新的字符值來更新關聯的端點,讓端點保持啟用,然後透過事件通知您此變更。
問:我使用 Google Cloud Messaging (GCM) 進行 SNS 行動通知。GCM 被棄用後會發生什麼?
問:是否能將現有應用程式遷移到 SNS 行動推送?
是。您可以透過主控台界面或 API 將現有裝置字符大批上傳到 Amazon SNS。透過上傳相關推送通知服務的登入資料,還可以在 SNS 註冊您的應用程式,並設定您的代理或應用程式以便將來在 SNS 註冊新的字符。
問:是否能透過 Amazon CloudWatch 監控我的推送通知?
是。SNS 發布的 Cloudwatch 指標包括已發布的訊息數量、成功通知的數量、失敗通知的數量、篩選排除的通知數量,和已發布資料的大小。指標以每個應用程式為單位提供。您可以透過 AWS 管理主控台或 CloudWatch API 存取 Cloudwatch 指標。
問:Amazon SNS 支援哪種 Windows 推送通知類型?
SNS 支援 Microsoft WNS 和 MPNS 提供的所有推送通知類型,包括 Toast、Tile、Badge 和 Raw 通知。使用 TYPE 訊息屬性指定您希望使用的通知類型。當您使用預設承載傳送相同的訊息至所有行動平台,SNS 預設會為 Windows 平台選擇快顯通知。當您使用平台特定的承載時,必須為 Windows 平台指定通知類型。
問:SNS 是否支援 Windows 原始推送通知?
是。您必須將通知承載編碼為文字才能透過 SNS 傳送原始通知。
問:什麼是百度雲推送?
百度雲推送是適用於 Android 裝置的第三方推送通知轉送服務選項。無論在中國的 Android 客戶選擇使用哪個 Android 應用程式商店下載應用程式,您都可以使用百度雲推送聯繫他們。如需百度雲推送的詳細資訊,請瀏覽 https://push.baidu.com/。
問:是否能從所有公有 AWS 區域發布百度通知?
是,SNS 支援在所有公有 AWS 區域發布百度推送通知。
問:是否可以將百度通知用於任何 Android 應用程式商店?
是,百度推送通知可以在透過 Android 應用程式商店安裝的應用程式上正常運作。
問:什麼是訊息屬性?
您可透過訊息屬性來提供有關訊息的結構化中繼資料項目 (如時間戳記、地理空間資料、簽章和識別符)。訊息屬性是選用的,與訊息本文 (但可隨之一起傳送) 分開。此資訊可以由訊息的接收者用於協助決定如何處理訊息,而不必先處理訊息本文。
您可以將 SNS 訊息屬性與 SQS 和行動推送端點搭配使用。要進一步了解有關訊息屬性的資訊,請參閱 SNS Getting Started Guide。
問:SNS 中支援什麼訊息屬性?
SNS 針對各個端點類型支援不同的訊息屬性,這取決於其本身各自支援的端點類型。
- 對於 SQS 端點,每則訊息最多可指定 10 個名稱類型值三元素。支援的類型包括:字串、二進位和數字 (包括整數、浮點數和雙精度數)。
- 對於行動推送端點,您可以利用每個行動平台支援的特定訊息屬性 (如通知類型)。
問:什麼是存留時間 (TTL)?
您透過 SNS 傳送的某些訊息僅在有限時段內相關或具有價值。現在使用 Amazon SNS,您可以為每則訊息設定 TTL (存留時間) 值。當指定訊息超過 TTL 且沒有被最終使用者傳送或讀取時,該訊息即被刪除。TTL 以秒為單位並與發布呼叫的時間相關。
問:如何為訊息指定 TTL?
您可以使用主控台或透過 API 指定 TTL。使用以下訊息屬性可在發布訊息時指定 TTL。每個平台的屬性都不相同。為一個平台指定的屬性僅適用於交付到該平台的通知。
問:什麼是預設 TTL?
SNS 為所有行動平台採用的預設存留時間 (TTL) 為 4 星期。
問:TTL 訊息屬性是否會覆寫在訊息承載中指定的 TTL?
是。Google FCM 和 Amazon ADM 讓您能在訊息承載內指定 TTL。如果您在訊息承載內指定 TTL,同時還在訊息屬性內指定 TTL,則 SNS 將遵循訊息屬性。
問:如果我指定 TTL=0,會發生什麼情況?
有些平台將 TTL = 0 視為特殊案例處理,並嘗試立即傳送訊息,或者讓訊息過期。如果您指定 TTL = 0,則 SNS 會將您的訊息轉送到具有 TTL = 0 的適當服務,以便利用此特殊案例。
問:哪些 SNS 端點支援 TTL?
您可以透過以下行動推送端點使用 TTL:APNS、APNS_Sandbox、FCM、ADM、百度和 WNS。Microsoft MPNS 目前不支援 TTL。SQS、HTTP、電子郵件或 SMS 端點也不支援 TTL。
問:Amazon SNS 的交付狀態功能有何功用?
交付狀態功能可以協助您收集針對支援的行動通知平台所推送通知的一些資訊,包括成功率、失敗率和駐留時間等。目前支援的平台包括 Apple (APNS)、Google (FCM)、Windows (WNS 和 MPNS)、Amazon (ADM) 和百度。狀態資訊收集在由 Amazon SNS 代表您所建立的 Amazon CloudWatch 日誌群組中。此外,您還可以在 Amazon CloudWatch 中建立具有可操作性的指標並以您感興趣的模式觸發警示。
問:Amazon SNS 中的交付狀態功能是否只能用於行動推送通知? 是否計劃為其他端點類型提供此功能?
目前交付狀態功能只能用於行動推送通知和 SMS。我們將根據客戶的回饋進行評估,確定是否對其他端點類型提供此功能。
問:如何啟用交付狀態功能?
您可以從 Amazon SNS 主控台啟用交付狀態功能。在您的應用程式中,選擇「應用程式動作」下拉式功能表中的「交付狀態」選項。關於詳細資訊,請參閱我們的文件。
問:是否能從 Amazon SNS API 啟用交付狀態功能?
是,新增相關的應用程式級屬性即可從 Amazon SNS API 啟用此功能。我們的文件介紹了啟用此功能需要新增的應用程式級屬性以及必須進行的特定 API 呼叫。
問:交付狀態功能如何收費?
目前使用交付狀態功能不會產生額外的 Amazon SNS 費用。不過,根據您的使用情況,可能會因為使用 CloudWatch 而產生費用,因為這項功能會建立 Amazon CloudWatch 日誌群組。如需 CloudWatch 定價和免費方案的詳細資訊,請閱讀我們的定價頁面。
問:為什麼只選擇成功交付嘗試的取樣率而不是失敗交付嘗試的取樣率?
根據客戶的回饋,我們發現多數開發人員希望了解其應用程式所有的交付嘗試失敗的情況,並傾向於只儲存成功的交付樣本,而不是記錄所有項目。
問:如何根據故障指標或駐留時間指標設定警示?
啟用交付狀態功能後,您需要為 Amazon SNS 代表您建立的日誌群組在 Amazon CloudWatch 日誌中定義日誌指標篩選條件。該指標篩選條件可以定義為擷取您感興趣的資訊,例如失敗率和駐留時間。定義指標篩選條件後,您可以建立並指派給一個指標。該指標之後可以用於設定警示或根據定義的閾值傳送通知。如需詳細資訊,請瀏覽我們的文件或部落格。
問:Amazon SNS 是否支援 HTTP/2 用於行動推送通知到 APNS 端點?
Amazon SNS 使用帶 p12 憑證的 HTTP/2 透過 Apple Push Notification Service (APNS) 傳送推送通知到 iOS 和 macOS 端點。
問:我是否需要因為 2020 年 11 月被淘汰的 APNS 二進位協定而修改我的應用程式?
Amazon SNS 使用帶 p12 憑證的 HTTP/2。因為並不依賴於傳統二進位協定,您透過 Amazon SNS 傳送推送通知的應用程式不需要變更。
SNS 支援 AWS Lambda
問:Amazon SNS 中的 AWS Lambda 端點支援有什麼意義?
透過將訊息發布到訂閱 AWS Lambda 函數的 Amazon SNS 主題,即可叫用 AWS Lambda 函數。因為 Amazon SNS 支援訊息散發,因此發布一則訊息可以叫用不同的 AWS Lambda 函數或叫用 Lambda 函數,還可將通知傳送給支援的 Amazon SNS 目的地,例如行動推送、HTTP 端點、SQS、電子郵件和 SMS。
問:什麼是 AWS Lambda?
AWS Lambda 是一種運算服務,可執行程式碼來回應事件並自動為您管理運算資源,讓您輕鬆建構可快速回應新資訊的應用程式。有關 AWS Lambda 的更多資訊以及如何建立 AWS Lambda 函數,請參閱這裡。
問:AWS Lambda 函數和 Amazon SNS 有何作用?
透過將 AWS Lambda 函數訂閱到 Amazon SNS 主題,您可以執行自訂訊息處理。您可以叫用 AWS Lambda 函數來提供自訂訊息交付處理,方法是先將訊息發布到一個 AWS Lambda 函數,再讓 Lambda 函數修改一則訊息 (例如,對語言進行當地語系化),最後篩選這些訊息並將其路由到其他主題和端點。已經傳送 Amazon SNS 通知 (例如 Amazon CloudWatch) 的應用程式和服務現在可以立即利用 AWS Lambda 的優勢,不需要佈建或管理基礎設施來進行自訂訊息處理。您還可以使用交付到 AWS Lambda 函數功能做為發布到其他 AWS 服務的方法,例如 Amazon Kinesis 或 Amazon S3。您可以將 AWS Lambda 函數訂閱到 Amazon SNS 主題,然後讓 Lambda 函數轉而寫入至另一項服務。
問:如何啟動 Amazon SNS 中的 AWS Lambda 端點支援?
您首先需要透過 AWS 帳戶和 AWS Lambda 主控台建立一個 AWS Lambda 函數,然後使用 Amazon SNS 主控台或 Amazon SNS API 將該 AWS Lambda 函數訂閱到一個主題。以上操作完成後,您發布到已訂閱 Lambda 函數之 Amazon SNS 主題的所有訊息不但會發送到該主題訂閱的任何其他目的地,還會發送到適當的 Lambda 函數。
問:從 Amazon SNS 到 AWS Lambda 函數的訊息交付有何意義?
從 Amazon SNS 到 AWS Lambda 函數的訊息交付會建立 AWS Lambda 函數的執行個體,然後使用您的訊息作為輸入叫用該執行個體。如需訊息格式的詳細資訊,請參考 Amazon SNS 文件和 AWS Lambda 文件。
問:此功能的費用為何?
透過 Amazon SNS 發布訊息每 100 萬條請求 0.50 USD。除了使用 AWS 服務產生的費用外,將訊息發送到 AWS Lambda 函數不須支付額外的費用。Amazon SNS 提供每月 100 萬條請求的免費方案。如需詳細資訊,請瀏覽 Amazon SNS 定價。AWS Lambda 函數將根據您的函數請求次數和程式碼執行時間計費。AWS Lambda 免費方案包含每月 100 萬條請求以及每月 400,000 GB 秒的運算時間。如需詳細資訊,請瀏覽 AWS Lambda 定價。
問:是否能將別人建立的 AWS Lambda 函數訂閱到我的 Amazon SNS 主題?
目前不允許 AWS 帳戶擁有者訂閱屬於其他帳戶的 AWS Lambda 函數。您可以將自己的 AWS Lambda 函數訂閱到自己的 Amazon SNS 主題,或將您的 AWS Lambda 函數訂閱到其他帳戶建立的 Amazon SNS 主題,只要該 SNS 主題的主題政策允許這樣的操作。
問:對於可以訂閱到 Amazon SNS 主題的 AWS Lambda 函數的數量有沒有配額?
Amazon SNS 處理 AWS Lambda 函數的方式與其他目的地一樣。根據預設,SNS 提供每個主題 1000 萬個訂閱。如需請求提高配額,請聯絡我們。
問:可以將哪些資料傳送到 AWS Lambda 函數?
因 Amazon SNS 訊息交付而叫用的 AWS Lambda 函數,該 AWS Lambda 函數會透過 SNS 事件收到各種資料,包括訊息 ID、主題 ARN、訊息負載和訊息屬性。如需傳送到 AWS Lambda 函數之事件結構的詳細資訊,請閱讀我們的部落格。
問:我是否能追蹤 AWS Lambda 函數訊息交付嘗試的訊息交付狀態?
若要追蹤訊息交付的成功或失敗狀態,您需要啟動 Amazon SNS 的交付狀態功能。如需如何啟動此功能的詳細資訊,請閱讀我們的部落格。
問:哪些區域提供 AWS Lambda?
請參閱 AWS Regions and Endpoints 以取得完整清單。
問:我的 AWS Lambda 函數需不需要與使用的 Amazon SNS 處在相同的區域?
您可以將 AWS Lambda 函數訂閱到任何區域中的 Amazon SNS 主題。
問:叫用 AWS Lambda 函數會不會產生任何資料傳輸費用?
將訊息交付到 AWS Lambda 函數才會產生資料傳輸費用。如需詳細資訊,請參閱我們的定價。
問:AWS Lambda 函數的並行數量是否有配額?
AWS Lambda 目前支援每個區域每個 AWS 帳戶 1000 個並行執行。若傳遞至 AWS Lambda 的 Amazon SNS 訊息超過這些並行數量配額,則會阻斷 Amazon SNS 訊息傳遞。若 AWS Lambda 阻斷了 Amazon SNS 訊息,則 Amazon SNS 將嘗試重新傳遞。如需 AWS Lambda 並行數量配額的詳細資訊,請參考 AWS Lambda 文件。
問:Amazon SNS 是否能使用已經在其他服務 (例如 Amazon S3) 中使用的相同 AWS Lambda 函數?
您可以使用已經在其他服務中使用的相同 AWS Lambda 函數,只要此相同函數除了可分析其他服務的事件格式外,還能分析 Amazon SNS 中的事件格式即可。關於 SNS 事件格式,請閱讀我們的部落格。
VoIP iOS 和 Mac OS 通知
問:什麼是適用於 iOS 的 VoIP 推送通知?
在 iOS 8 和更新版本中,IP 電話 (VoIP) 應用程式可以註冊 VoIP 遠端通知,讓 iOS 可在使用者的傳入 VoIP 通話抵達時視需要啟動或喚醒應用程式。註冊 VoIP 通知的程序與在 iOS 上註冊一般推送通知的程序很類似。如需詳細資訊,請參閱我們的文件。
問:我是否能在同一個 iOS 應用程式中同時使用 VoIP 推送通知和其他推送通知?
是,您可以註冊 iOS 應用程式以同時接收這兩種類型的推送通知。然而,除了一般推送通知憑證之外,您還需要向 Apple 取得 VoIP 推送通知憑證,並在 Amazon SNS 建立新的平台應用程式,然後選擇 Apple VoIP Push 作為平台類型。如需詳細資訊,請參閱我們的文件。
問:什麼是 Mac OS 推送通知?
您現在可以使用 Amazon SNS 發送推送通知給執行 Mac OS X Lion (10.7) 或更新版本的 Mac OS 桌面。如需詳細資訊,請參閱我們的文件。
進一步了解 Amazon SNS 定價