开始免费使用 AWS

创建免费账户

AWS 免费套餐包括 100 万条移动推送通知,1 百万封电子邮件发送,如需发送更多,请使用 Amazon SNS。

查看 AWS 免费套餐详细信息 »

问:什么是 Amazon Simple Notification Service (Amazon SNS)?

Amazon Simple Notification Service (Amazon SNS) 是一种让用户能够轻松构建、维护并从云中发送通知的 Web 服务。它为开发人员提供高度可扩展、灵活并且经济高效的从应用程序发布消息的功能,并立即将它们发送给订阅者或其他应用程序。该服务旨在让开发人员能更轻松的进行互联网规模计算。Amazon SNS 遵循“发布-订阅”(pub-sub) 消息收发范式,使用“推送”机制将通知传送到客户端,无需定期检查或“轮询”新信息和更新。Amazon SNS 使用的 API 简单,前期需要投入的开发精力极小,无维护或管理开销,并且按实际用量付费,从而使开发人员能够通过一种简单的机制将功能强大的通知系统融入其应用程序中。

问:如何开始使用 Amazon SNS?

您可以完成我们的 10 分钟教程发送四散传播通知,通过几个步骤创建 Amazon SNS 主题并发布消息。

有关更多信息,请参阅 Amazon SNS 开发人员指南资源中心内的示例代码

问:使用 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 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 文档和《Getting Started Guide》,以便开始使用 Amazon SNS。使用 AWS 管理控制台,您可以轻松地创建主题、添加订阅者、发送通知和编辑主题策略,所有这一切操作都能从您的浏览器中执行。

问:AWS 管理控制台中是否支持 Amazon SNS?

AWS 管理控制台支持 Amazon SNS,并提供了一个基于 Web 的点击式界面来访问和管理 Amazon SNS。使用 AWS 管理控制台,您可以创建主题、添加订阅者和发送通知,所有这一切操作都能从您的浏览器中执行。此外,使用 AWS 管理控制台,您还可以轻松地将消息发布到所选的终端节点 (HTTP、SQS、Lambda、移动推送、电子邮件或 SMS) 并编辑主题策略来控制发布者和订阅者的访问权限。

问:各个地区中 AWS SNS 服务的接入点是什么?

有关所有 AWS SNS 服务接入点的最新列表,请参阅 AWS 文档的 AWS 地区和终端节点部分。

问:我能否获得从我的账户发起的所有 SNS API 调用的历史记录,以便用于安全分析和运营方面的故障排除?

能。SNS 支持 AWS CloudTrail,该服务是一种记录账户的 AWS API 调用,并向您发送日志文件的 Web 服务。借助 CloudTrail,您可以获得 API 调用者标识、API 调用时间、API 调用者源 IP 地址、请求参数和 SNS 返回的响应元素之类信息的历史纪录。

SNS 目前仅支持对身份验证调用进行 CloudTrail 审计。现在不能提供未经验证的 ConfirmSubscription 和 Unsubscribe 调用的 CloudTrail 审计日志。关于更多信息,请参阅 SNS 开发人员指南的 CloudTrail 部分

要获得从您的账户发起的所有 SNS API 调用的历史记录,您只需在 AWS 管理控制台中打开 AWS CloudTrail 即可。如需了解有关 AWS CloudTrail 的更多信息,请单击此处


问:Amazon SNS 的收费如何?

使用 Amazon SNS 没有最低消费,您只需按实际使用量付费。用户支付的费用为:每 100 万个 Amazon SNS 请求 0.50 USD;每 100000 个通过 HTTP 传送的通知 0.06 USD;每 100000 个通过电子邮件传送的通知 2.00 USD。对于 SMS 消息收发,用户可以免费发送 100 个通知,对于后续的消息,费用将因目的地国家/地区而异。

Amazon SNS 还提供免费套餐,可让用户免费开始使用 Amazon SNS。每个月,Amazon SNS 客户对于以下用量无需付费:前 100 万个 Amazon SNS 请求;前 100000 个通过 HTTP 传送的通知;前 100 个通过 SMS 传送的通知;以及前 1000 个通过电子邮件传送的通知。

有关定价和数据传输费用的其他详细信息,请参阅 Amazon SNS 详细信息页面

问:Amazon SNS 的使用如何收费和计费?

开始使用服务时,没有安装费。每个月底将自动向您的信用卡收取当月使用费。您可以随时在 Amazon Web Services 网站上查看当前账单期的费用,只需登录您的 Amazon Web Services 账户,并单击“Your Web Services Account”下的“Account Activity”。

问:我的 Amazon SNS 的账单周期怎么计算?

您的 Amazon SNS 账单周期从每月第一天开始,到每月的最后一天结束。您的月度费用将在每月结束时汇总。

问:价格是否含税?

除非另行说明,否则我们的价格不包括适用的税费和关税 (包括增值税和适用销售税)。使用日本账单地址的客户若要使用 AWS,则需缴纳日本消费税。了解更多


问:Amazon SNS 主题有何格式要求?

主题名称不能超过 256 个字符。允许使用字母数字字符以及连字符 (-) 和下划线 (_)。AWS 账户中的主题名称必须唯一。删除主题后,可以重新使用该主题名称。创建主题后,Amazon SNS 将为该主题分配唯一的 ARN(Amazon 资源名称),其中包括服务名称 (SNS)、地区、用户的 AWS ID 和主题名称。ARN 将作为创建主题时使用的 API 调用的一部分返回。无论何时发布者或订阅者需要对该主题执行任何操作,都应引用该唯一主题 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 允许用户获得其全部有效订阅(关于一个或多个主题)的列表。

问:有哪些不同的传输格式/协议用于接收通知?

为使客户在选择传输机制时拥有充分的灵活性,Amazon SNS 支持通过多种传输协议来发送通知。客户可以选择下列传输协议之一作为订阅请求的一部分:

  • “HTTP”、“HTTPS”– 订阅者在注册订阅时指定 URL;通知将通过 HTTP POST 传送到指定的 URL。
  • “电子邮件”、“电子邮件-JSON”– 消息以电子邮件形式发送到注册的地址。“电子邮件-JSON”以 JSON 数据元的形式发送通知,而“电子邮件”则是发送基于文本的电子邮件。
  • “SQS”– 用户可以将 SQS 标准队列指定为终端节点;Amazon SNS 将在指定队列对通知消息排队 (然后,订阅者就可以使用 ReceiveMessage、DeleteMessage 等 SQS API 进行处理了)。请注意,FIFO 队列目前不受支持。
  • “SMS”– 消息以 SMS 文本消息的形式发送到注册的电话号码。

问:主题所有者是否可以控制他们所创建/拥有的主题中允许的传输协议?

主题所有者可以通过访问控制策略设置相应的权限,由此为其主题配置特定的传输协议。

问:所有者如何设置访问控制策略?

请参阅《Amazon SNS Getting Started Guide》,了解设置访问控制策略的概况。

问:单个主题是否支持通过多种传输协议进行订阅?

Amazon SNS 主题订阅者可以通过主题支持的任何传输协议接收通知。主题可支持通过多种传输协议来传送订阅和通知。

问:订阅者是否可以选择性地只接收一部分发布至某个主题的消息?

可以。您可以使用 Amazon Simple Notification Service (SNS) 上的消息筛选功能来构建更简单且更精简的发布/订阅架构。利用消息筛选功能,Amazon SNS 主题订阅者能够选择性地只接收一部分他们感兴趣的消息,而不是接收发布至某个主题的所有消息。有关更多详细信息,请试用我们的 10 分钟教程筛选发布到主题的消息,或参阅文档

问: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 队列中,将来由审计应用程序进行处理。

问:Amazon SNS 是否在提供 AWS 服务的所有地区均可用?

有关 Amazon SNS 可用性的最新信息,请参阅 AWS 文档的 AWS 地区和终端节点部分。

问:客户需要多久才能使用以前的主题名称重新创建主题?

通常,大约在删除名称相同的旧主题 30-60 秒后,便可重新使用该主题名称了。确切的时间取决于该主题上有效的订阅数 – 主题订阅者越少,重新使用需等待的时间就越短;主题订阅者人数越多,等待的时间就越长。


问:用户如何订阅通过电子邮件传送的通知?

要接收特定主题的电子邮件通知,订阅者应将协议指定为“Email”或“Email-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 发送的确认消息和通知,用户可以将“no-reply@sns.amazonaws.com”添加到联系人列表,并检查其垃圾邮件文件夹中是否有 Amazon SNS 的消息。

问:用户是否需要在订阅前创建 SQS 列,以防电子邮件地址作为终端节点进入 SQS 队列?队列需要什么权限?

使用 SQS 控制台,用户应先创建 SQS 队列,然后才能使其订阅主题。在控制台上选择此队列,并从工具栏的“Queue Actions”下拉列表中选择“Subscribe Queue to SNS Topic”。在订阅对话框中,从“Choose a Topic”下拉列表中选择主题,并单击“Subscribe”按钮。要获得完整的步进式操作说明,请参考Amazon SNS 文档

问:Amazon SQS FIFO 队列是否与 Amazon Simple Notification Service (SNS) 兼容?

Amazon SNS 目前不支持向 Amazon SQS FIFO 队列传送消息,但可以使用 SNS 向标准队列传送消息。

问:要接收 Amazon SNS 通知,开发人员需要如何设置 Amazon SQS 队列?

要让 Amazon SNS 向 SQS 队列传送通知,开发人员应订阅主题,指定“SQS”为传输协议,并指定有效的 SQS 标准队列为终端节点。为了使 SQS 队列能够接收来自 Amazon SNS 的通知,该 SQS 队列所有者必须订阅有关 Amazon SNS 的主题,以便成功地向队列提交消息。

如果订阅的 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 管理控制台。此外,也可以通过 CreatTopic API 创建。以下网址 http://aws.amazon.com/cn/console 提供了 AWS 管理控制台

问:多个用户是否可以向单个主题发布消息?

主题所有者可以设置明确权限,以允许多个用户(具有有效 AWS ID)向一个主题发布消息。默认情况下,只有主题所有者拥有向主题发布消息的权限。

问:所有者如何授予/撤消主题的发布或订阅权限?

AddPermission 和 RemovePermission API 提供简洁的界面,供开发人员添加和删除主题的权限。但是,对于条件性访问和更高级的使用案例,用户则应使用访问控制策略来管理权限。管理权限最简单的方式是使用 AWS 管理控制台。以下网址 http://aws.amazon.com/cn/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 账户“所有”,在这种特殊情况下,您不必执行上述明确“同意”操作。

问:等待确认时,订阅请求需要在待处理状态保持多长时间?

对于订阅请求,发送到终端节点的确认消息中附带的令牌有效期为 3 天。

问:谁可以更改主题的权限?

只有主题所有者可以更改该主题的权限。

问:用户如何验证通知消息是从 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 合规性计划将 Amazon SNS 作为一项符合 HIPAA 要求的服务包含在内。如果您与 AWS 签订了已生效的商业伙伴协议 (BAA),那么您现在可以使用 Amazon SNS 构建符合 HIPAA 要求的应用程序。如果您未签订商业伙伴协议,或对将 AWS 用于 HIPAA 合规应用程序方面有其他问题,请联系我们,以获取详细信息。

要了解更多信息,请参阅以下资源:

要查看将 Amazon SNS 纳入范围内的合规性计划的最新列表,请参阅 AWS 按合规性计划提供的范围内服务

问:Amazon SNS 还应符合哪些要求?

请参阅 AWS 按合规性计划提供的范围内服务,了解有关 SNS 和其他 AWS 产品的最新信息。


问:我的数据发布到 Amazon SNS 后的可靠性如何?

Amazon SNS 将所有主题和消息信息存储在 Amazon 成熟的网络基础设施和数据中心中。至少有三个数据副本存储在多个可用区中,这意味着一台计算机或一个网络出现故障不会导致 Amazon SNS 不可访问。

问:一条通知是否会包含多条消息?

不会,所有通知消息只包含一条发布的消息。

问:每条消息会让订阅者收到多少次?

虽然大多数情况下每条消息只会向您的应用程序传送一次,但 Amazon SNS 的分布式特点和瞬变的网络条件可能导致订阅者端偶尔收到重复的消息。开发人员应将其应用程序设计为多次处理一条消息不会产生任何错误或不一致性。

问:消息是否会按其发布的确切顺序传送给我?

Amazon SNS 服务将尝试按消息发布到主题的顺序传送发布者的消息。但是,网络问题可能会导致订阅者端的消息顺序错乱。

问:是否可删除已发布的消息?

不可以,一旦将消息成功发布到主题,就无法再撤消。

问:Amazon SNS 是否确保会将消息传送到订阅的终端节点?

在消息发布到主题后,Amazon SNS 将尝试向注册该主题的所有订阅者传送通知。由于潜在的 Internet 问题或电子邮件传送限制,有时通知可能无法成功送达 HTTP 或电子邮件终端节点。对于 HTTP,可使用 SNS 传输策略来控制重试模式(线性、几何、指数退避)、最大和最小重试延迟以及其他参数。如果成功处理所有发布的消息具有非常重要的意义,则开发人员还应将通知传送到 SQS 队列(除通过其他协议传送通知外)。

问:如果订阅终端节点不可用,Amazon SNS 消息会如何?

系统会立即处理和传送发送至 SNS 的所有消息。如果初次尝试时无法成功传送消息,SNS 将实施一个 4 阶段重试策略:1) 无延迟重试;2) 最短延迟重试;3) 退避模型 (线性或指数级) 重试;4) 最长延迟重试。 

每个终端节点的策略有所不同,如下所示。

  • SQS:如果 SQS 队列不可用,SNS 将立即重试 10 次,然后每 20 秒重试 100000 次,在将消息从 SNS 丢弃前的超过 23 天内总计重试 100010 次。
  • Lambda:如果 Lambda 不可用,SNS 将相隔 1 秒重试 2 次,然后从 1 秒到 20 分钟内呈指数级退避重试 10 次,最后每 20 分钟重试 38 次,在将消息从 SNS 丢弃前的超过 13 个小时内总计重试 50 次。 
  • HTTP/S:您可以针对与特定主题关联的 HTTP/S 终端节点设置传输策略。每个传输策略包含一个重试策略和一个限制策略。例如,重试策略可以指定重试的最短/最长延迟、延迟前重试次数和重试采用的退避类型 (线性、指数级或算术)。重试次数用尽后,系统会将消息从 SNS 中删除。限制策略由每个订阅每秒传送尝试的最大次数定义。请参阅设置 Amazon SNS 用于 HTTP/HTTPS 终端节点的传输重试策略,了解更多信息。
  • 电子邮件:如果电子邮件终端节点不可用,SNS 将立即重试 1 次,间隔 10 秒再重试 1 次,然后从 10 秒到 5 分钟内线性退避重试 10 次,最后每 5 分钟重试 90 次,在将消息从 SNS 丢弃前的超过 7 个小时内总计重试 102 次。
  • 移动推送:如果移动终端节点不可用,SNS 将立即重试 2 次,相隔 20 秒重试 5 次,然后从 20 秒到 20 分钟内呈指数级退避重试 31 次,最后每 20 分钟重试 12 次,在将消息从 SNS 丢弃前的超过 4 个小时内总计重试 50 次。
  • SMS:如果 SMS 终端节点不可用,SNS 将相隔 1 秒重试 2 次,然后从 1 秒到 10 分钟内呈指数级退避重试 10 次,最后每 10 分钟重试 38 次,在将消息从 SNS 丢弃前的超过 6 个小时内总计重试 50 次。

问:全新 Worldwide SMS 功能的特点有哪些?

您可以使用 Amazon SNS 将 SMS(文本)消息发送至 200 多个国家/地区,并且无需像从前那样需要收件人明确订阅。如果当地法律法规有相关规定,您就必须先从收件人那里获取权限,然后才能将 SMS 消息发送至其电话号码。此外,您现在还可以将 SMS 消息标记为“事务型”以针对可靠交付 进行优化,您也可以将其标记为“促销型”以针对成本节约进行优化。另外,您还可以设置账户级别和消息级别的开销限制,以避免意外超支。

问:我应该将哪些 SMS 消息标记为“事务型”?

您应该将有关业务优先事项的 SMS 消息标记为“事务型”。这可以确保含有一次性密码 (OTP) 或 PIN 的消息在具备最高交付可靠性的情况下通过路由发送。在美国以外的国家/地区,此类路由通常比“促销型”消息路由价格昂贵。您绝对不应将市场营销信息标记为“事务型”,因为这会违反某些国家/地区的当地规制政策,否则,您的账户可能会被标记为滥用并暂停。

问:我应该将哪些 SMS 消息标记为“促销型”?

您应该将含有市场营销信息的 SMS 消息标记为“促销型”。Amazon SNS 可确保此类消息通过具有一定交付可靠性但成本却比最可靠的路由少很多的路由发送。这还可以让 Amazon SNS 根据当地法律法规的规定处理和发送您的消息。

问:什么是账户级别和消息级别的开销限制?其工作原理如何?

您可以针对 AWS 账户和单独的消息指定开销限制,且这些限制仅适用于发送 SMS 消息的费用。

默认开销限制为每个账户每月 1.00 USD (如果未指定)。如果您想提高此限制,请提交 SNS 限制提高申请案例。对于新的限制值,请输入您所需的月度开销限制。在使用案例描述字段中,解释您申请提高 SMS 月度开销限制的原因。

Amazon SNS 会发送您发布的 SMS 消息,但是您的 SMS 流量所产生的总费用会低于您在该日历月中的开销限制。一旦超过开销限制,Amazon SNS 会立刻停止发送消息,直到您提高开销限制或下一个日历月开始为止。同样,您也可以针对单独的消息指定开销限制,Amazon SNS 会在费用不超过该限制的情况下发送消息。一旦超过账户级别开销限制,无论是否超过消息级别开销限制,Amazon SNS 都将不再发送您的 SMS 消息。

问:是否支持双向 SMS?

Amazon SNS 目前不支持双向 SMS 功能,当地法规要求的退订情况除外。

问:我是否需要先向某个 SNS 主题订阅电话号码才能向其发送 SMS 消息?

现在,您无需先向某个 SNS 主题订阅电话号码就可以向其发送 SMS 消息。您可以直接使用 Amazon SNS 控制台或 Amazon SNS API 中的“Publish”申请向某个电话号码发布消息。

问:AWS 是否提供用于购买的短代码?

是。您可以预留分配给您的账户且供您独家使用的专用短代码。

要预留短代码,请在 AWS Support Center 上创建案例。有关更多信息,请参阅 Amazon SNS Developer Guide 中的 Reserving a Dedicated Short Code for SMS Messaging

有关定价信息,请参阅 Worldwide SMS Pricing

问:AWS 是否提供用于购买的长代码?

否。AWS 目前不提供用于购买的长代码。

问:SMS 通知是否来自短代码或长代码的特定号码?

Amazon SNS 使用长代码或短代码池发送 SMS 通知。虽然 SMS 通知有可能来自多个号码,但 Amazon SNS 会确保从 AWS 账户发送至某个特定电话号码的消息始终源自同一长代码或短代码。这称为“粘性发件人 ID”。

您可以预留专用短代码,以确保您通过 Amazon SNS 发送的所有 SMS 消息始终源自同一短代码。如果您预留短代码,接收者便可更轻松地确认消息来自贵组织。有关更多信息,请参阅 Amazon SNS Developer Guide 中的 Reserving a Dedicated Short Code for SMS Messaging

问:Amazon SNS 支持在哪些国家/地区使用 Worldwide SMS?

Amazon SNS 支持在 200 多个国家/地区使用该项功能,并且我们会继续扩大支持范围。请参阅 SMS 支持的国家/地区列表,以获取支持的调用国家/地区的完整列表。

问:哪些 AWS 区域支持 Worldwide SMS?

1) US-East-1(弗吉尼亚州)、2) US-West-2(俄勒冈)、3) EU-West-1(都柏林)、4) 亚太地区(东京)、5) 亚太地区(新加坡)和 6) 亚太地区(悉尼)。

问:AWS 电话号码是否可以更改?

可以。Amazon SNS 使用长代码或短代码池发送 SMS 通知,因此,SMS 通知有可能来自多个号码。Amazon SNS 可确保从 AWS 账户发送至某个特定电话号码的消息始终源自同一长代码或短代码。这称为“粘性发件人 ID”。

问:为什么同一运营商上的设备接收到来自不同电话号码的消息?

Amazon SNS 使用长代码或短代码池发送 SMS 通知,因此,SMS 通知有可能来自多个号码。Amazon SNS 可确保从 AWS 账户发送至某个特定电话号码的消息始终源自同一长代码或短代码。这称为“粘性发件人 ID”。

问:将消息发送至其他国家/地区采用哪种电话号码格式?

AWS 强烈鼓励您针对“to”和“from”(如果适用)字段中的所有电话均采用 E.164 数字格式。请参阅 SMS 支持的国家/地区列表,以获取支持的国家/地区的完整列表。

问:Amazon SNS 是否可以确定电话号码是手机号码、固定电话号码,还是 VoIP 号码?

不可以。目前,Amazon SNS 无法检测某个电话号码是手机号码、固定电话号码,还是 VoIP 号码。

问:SMS 消息是否支持基于时间或按计划发送?

不支持。Amazon SNS 目前不支持基于时间或按计划发送。

问:我该如何追踪我的 SMS 消息的发送状态?

通过启用 Amazon SNS 中的“Delivery Status”功能,您可以获取有关各个消息的以下信息:Message ID、发送时间、目标电话号码、处置、处置原因(如果适用)、价格以及驻留时间。

问:Amazon SNS 是否支持 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 消息,除非您重新加入其电话号码。

问:我如何知道某个收件人设备是否已退订 Global SMS?

SNS 控制台会显示您的账户中已退订号码的列表。此外,Amazon SNS API 会提供“ListPhoneNumbersOptedOut”申请以列出已退订的电话号码。

问:如果用户退订,该号码是否会从 SNS 主题自动取消订阅?

不会。退订不会从 Amazon SNS 主题取消订阅号码,而是禁用订阅。这意味着,如果订阅了一个电话号码,则无需再向该主题重新订阅该电话号码。

问:如何确认最终用户是否已接收 SMS 消息?

您可以使用“Delivery Status”功能来获取有关 SMS 消息最终处置结果的消息。有关该功能及其用法的更多信息,请参阅我们的文档

问:Amazon SNS 是否提供针对 SMS 消息的发送收据?

我们的“Delivery Status”功能根据从目标运营商处接收的发送收据提供信息。有关“Delivery Status”功能及其用法的更多信息,请参阅我们的文档

问:SMS 是否支持向 Google Voice 或 Hangouts 等 VoIP 服务发送消息?

支持。Amazon SNS 支持向可以接收 SMS 消息的 VoIP 服务发送消息。


问:我可以在何处查看各个国家/地区当前的 SMS 定价?

我们的定价根据目标国家/地区和运营商而定,您可以在此处进行查看。 

问:为什么同一目标国家/地区和运营商的 SMS 定价在不断变化?

SMS 行业的定价并不是固定的,并且发送到不同国家/地区及这些国家/地区的运营商的费用也一直在变化。Amazon SNS 已经采用一种透明的方式并向客户公示价格变化,这样,您便可以获取最大的成本效益。

问:我是否需要为发送失败的消息或被运营商拒绝的消息支付费用?

如果目标运营商报告您试图将消息发送至无效的电话号码,则您需要为发送失败的消息支付费用。导致电话号码无效的原因有很多,包括电话号码不存在、电话持有者的账户余额不足,或者目标号码是固定电话号码。

问:SMS 消息是否有“免费套餐”额度?

SMS 消息有每月的免费套餐额度。每月发往美国电话号码的前 100 条 SMS 消息是免费的。如果超出此值,您需要针对超出的条数支付费用,如果向美国以外的电话号码发送了消息,您还需要针对这些消息支付费用,具体请参见此处提供的当前定价。


问:主题或每个主题的订阅者是否有数量限制?

SNS 默认为每个主题提供 1000 万个订阅,为每个账户提供 100000 个主题。如需提高限额,请联系支持团队

问:消息中可包含多少数据量以及哪些数据类型?

Amazon SNS 消息最多可包含 256KB 的文本数据,包括 XML、JSON 和非格式化文本 (SMS 消息与此不同)。

接受以下 Unicode 字符:

#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]

(根据 http://www.w3.org/TR/REC-xml/#charsets)。

每 64 KB 区块的已发布数据以 1 次请求计费。例如,1 次负载为 256 KB 的 API 调用将以 4 次请求计费。

SMS 消息

每条 SMS 消息最多可包含 140 个字节,具体字符数限制取决于编码方法。例如,一条 SMS 消息可以包含:

  • 160 个 GSM 字符
  • 140 个 ASCII 字符
  • 70 个 UCS-2 字符

如果您发布的消息超出大小上限,Amazon SNS 会将其分成多条消息发送,其中每条均不超过大小上限。消息以整个词为边界,不会在一个词的中间截断。就一项 SMS 发布操作而言,总大小上限为 1600 个字节。

问:一个主题可应用多少个消息筛选条件?

默认情况下,一个主题每个地区每个账户可应用 100 个筛选策略。如果需要更多,请联系我们。

问:是否应将一些 TCP 端口用于 SNS 和 EC2 之间的跨地区通信?

是的,在 80/443/4080/8443 以外的端口上进行的 SNS 和 EC2 间的跨地区通信无法保证正常工作,应避免使用。


问:什么是原始消息传输?

您可以选择让消息以原始形式传送,即和您发布时的消息形式完全一样。默认情况下,消息会以 JSON 编码进行传输,JSON 编码提供消息和主题的元数据。原始消息传输可以通过设置订阅的“RawMessageDelivery”属性来启用。该属性可以使用 AWS 管理控制台或者 API SetSubscriptionAttributes 来设置。

问:如果订阅的原始消息传输属性未设定,默认行为是什么?

如果该属性未设定,消息当前会默认以 JSON 形式传输。这确保了现有的应用程序会继续如期运行。

问:哪些类型的终端节点支持原始消息传输?

SQS 和 HTTP(S) 终端节点支持传送原始消息。传送到 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)
  • Google Cloud Messaging (GCM)
  • 适用于 Windows 8+ 和 Windows Phone 8.1+ 的Windows Push Notification Service (WNS)
  • 适用于 Windows Phone 7+ 的 Microsoft Push Notification Service (MPNS)
  • 适用于中国 Android 设备的 Baidu Cloud Push

问:使用 SNS 免费套餐可以发送多少条推送通知?

SNS 免费套餐包括一百万次发布,外加一百万次移动推送发送。因此您每月可以免费发送一百万条推送通知。向所有移动推送终端节点发送的通知将累计起来达到您 1 百万条免费移动推出量。

问:启用推送通知是否需要对 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、GCM、ADM、WNS、MPNS 和百度) 及 SMS。电子邮件消息需要使用主题。

问:SNS 移动推送如何处理通知服务中的令牌反馈?

推送通知服务(例如 APNS 和 GCM)可提供关于令牌可能已过期或可能已被新令牌替换的反馈。如果 APNS 或 GCM 报告某个特定令牌已过期或无效,SNS 会自动“禁用”与该令牌相关的应用程序终端节点,并通过事件通知您这一变化。GCM 有时不仅会指出令牌无效,还会特别提供响应 SNS 时与该应用程序终端节点相关的新令牌。发生这种情况时,SNS 会自动为相关终端节点更新新的令牌值,同时使终端节点保持在启用状态,然后通过事件通知您这一变化。

问:能否将现有应用程序迁移到 SNS 移动推送?

能。您可以通过控制台界面或 API 将现有设备令牌批量上传到 Amazon SNS。通过上传相关推送通知服务的凭据,还可以在 SNS 注册您的应用程序,并配置您的代理或应用程序以便将来在 SNS 注册新的令牌。

问:能否通过 Amazon CloudWatch 监控我的推送通知?

能。SNS 发布的 Cloudwatch 指标包括已发布的消息数量、成功通知的数量、失败通知的数量和已发布数据的大小。指标以应用程序为单位提供。您可以通过 AWS 管理控制台或 CloudWatch API 访问 Cloudwatch 指标。

问:Amazon SNS 支持哪种 Windows Push Notifications?

SNS 支持 Microsoft WNS 和 MPNS 提供的所有推送通知类型,包括 Toast、Tile、Badge 和 Raw 通知。 使用 TYPE 消息属性,以指定期望使用的通知类型。 当使用默认净负荷向所有移动平台发送相同的消息时,对于 Windows 平台,SNS 将默认选择广播通知。 当您使用指定平台净负荷时,必须为 Windows 平台指定通知类型。

问:SNS 是否支持 Windows 原推送通知?

是。 您必须将通知净负荷编码为文本才能通过 SNS 发送原通知。

问:什么是百度云推送?

百度云推送是一种适用于 Android 设备的第三方替代推送通知中继服务。 您可以使用百度云推送来联系中国的 Android 客户,无论这些客户选择使用哪个 Android 应用商店来下载应用。 更多有关百度云推送的信息,请访问 http://developer.baidu.com/cloud/push

问:我是否能从所有公共 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 GCM 和 Amazon ADM 支持您在消息净负荷内指定 TTL。 如果您在消息净负荷内指定一个 TTL,同时还在消息属性内指定一个 TTL,则 SNS 将遵循消息属性。
 
问:如果我指定 TTL=0,会出现什么情况?
 
有些平台将 TTL = 0 作为特殊案例进行处理,并尝试立即传送消息,或者让消息过期。 如果您指定 TTL = 0,则 SNS 会将消息中继到带有 TTL = 0 的相应服务,以便利用此特殊案例。
 
问:哪些 SNS 终端节点支持 TTL?
 
您可以通过以下移动推送终端节点使用 TTL:APNS、APNS_Sandbox、GCM、ADM、百度和 WNS。 Microsoft MPNS 当前不支持 TTL。 TTL 也不支持用于 SQS、HTTP、电子邮件或 SMS 终端节点。
 
问:Amazon SNS 的传输状态功能有何用?
 
传输状态功能可以帮助您收集针对支持的移动通知平台您所推送的通知的一些信息,包括成功率、失败率和驻留时间等。目前支持的平台包括 Apple (APNS)、Google (GCM)、Windows(WNS 和 MPNS)、Amazon (ADM) 和百度。状态信息收集在由 Amazon SNS 代表您创建的 Amazon CloudWatch 日志组中。此外,您还可以在 Amazon CloudWatch 中创建具有可操作性的指标并以您感兴趣的模式触发警报。
 
问:Amazon SNS 中的传输状态功能是不是只能用于移动推送通知?你们有没有计划为其他终端节点类型提供此功能?
 
目前,传输状态功能可用于移动推送通知和 SMS。我们将根据客户的反馈进行评估,确定是否对其他终端节点类型提供这一功能。
 
问:如何激活传输状态功能?
 
从 Amazon SNS 控制台中激活。在您的应用程序中,选择“应用程序操作”下拉菜单中的“传输状态”选项。详细信息请参阅我们的 文档
 
问:能否从 Amazon SNS API 激活传输状态功能?
 
可以,只要添加相关的应用程序级属性就能实现。我们的 文档介绍了为使用此功能需要添加的应用程序级属性以及必须进行的特定 API 调用。
 
问:传输状态功能如何收费?
 
目前使用传输状态功能不会产生额外的 Amazon SNS 费用。但是,根据您的使用情况,您可能会因为使用 CloudWatch 而产生费用,因为这项功能会创建 Amazon CloudWatch 日志组。阅读我们的 定价页面,了解关于 CloudWatch 定价和免费套餐的更多信息。
 
问:你们为什么只选择成功传输尝试的取样率而不是失败传输尝试的取样率?
 
根据客户发来的反馈,我们发现多数开发人员希望了解其应用程序所有的传输尝试失败的情况,并倾向于储存成功的传输样本,而不是将其全部记录下来。
 
问:如何根据故障指标或驻留时间指标设置警报?
 
激活传输状态功能后,您需要为 Amazon SNS 代表您创建的日志组在 Amazon CloudWatch 日志中定义日志指标筛选条件。该指标筛选条件可以定义为截取您感兴趣的信息,例如故障率和驻留时间。指标筛选条件定义后,可以创建并指派给一个指标。该指标之后可以用于设置警报或根据定义的阈值发送通知。更多信息请访问我们的 文档博客
 

问: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.5 USD。除使用 AWS 服务产生的费用外,将消息发送到 AWS Lambda 函数不再额外收费。Amazon SNS 支持额度为每月 100 万条请求的免费套餐。更多信息请参考 Amazon SNS 定价。AWS Lambda 函数将根据您的函数请求次数和代码执行时间向您收费。AWS Lambda 免费套餐包含每月 100 万条请求以及每月 400000 GB 秒的计算时间。更多信息请参考 AWS Lambda 定价

问:能否将别人创建的 AWS Lambda 函数订阅到我的 Amazon SNS 主题?

目前不允许 AWS 账户所有者订阅属于其他账户的 AWS Lambda 函数。您可以将自己的 AWS Lambda 函数订阅到自己的 Amazon SNS 主题或者其他账户创建的 Amazon SNS 主题,只要该 SNS 主题的主题政策允许这样的操作。

问:对于可以订阅到 Amazon SNS 主题的 AWS Lambda 函数的数量有没有限制?

Amazon SNS 将 AWS Lambda 函数等同其他目的地对待。根据默认,SNS 对每个主题提供 1000 万个订阅。如需提高限额,请联系我们。

问:可以向 AWS Lambda 函数传送什么数据?

当 AWS Lambda 函数作为 Amazon SNS 消息发送的结果调用时,AWS Lambda 函数会通过 SNS 事件收到各种数据,包括消息 ID、主题 ARN、消息负载和消息属性。关于传送到 AWS Lambda 函数的事件结构的更多信息,请阅读我们的博客

问:我能否跟踪 AWS Lambda 函数的消息发送尝试状态?

要跟踪消息发送状态是否成功,您需要激活 Amazon SNS 的发送状态功能。关于如何激活此功能的更多信息,请阅读我们的博客。

问:AWS Lambda 在哪些区域提供?

请参阅 AWS 区域和终端节点,以查看完整列表。

问:我的 AWS Lambda 函数需不需要与所使用的 Amazon SNS 处在相同的区域?

您可以将 AWS Lambda 函数订阅到任意区域中的 Amazon SNS 主题。

问:调用 AWS Lambda 函数会不会产生数据传输费用?

将消息发送到 AWS Lambda 函数会产生数据传输费用。更多信息请参考定价

问:对于 AWS Lambda 函数的并发数量有没有限制?

AWS Lambda 目前支持每个 AWS 账户 100 条并发请求。如果发送到 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 事件格式,请阅读博客

 

问:用于 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。有关更多信息,请参阅我们的文档