想出了一个可行的方法,不确定它是否是最佳的,或者这是否符合适当的 Rails 标准,但它有效并且实施起来相对简单。因此,我想为任何想要这样做的人详细说明该过程,即为 Rails 应用程序订阅 Amazon SNS 推送通知。
首先,您需要设置此配置的 AWS 端,因此请按照此问题的第一个答案 Mark B 的说明进行操作。您会发现 AWS 文档指示您在设置 SNS 订阅之前让您的应用程序准备好处理 HTTP Post 请求。也就是说,您可以在设置的 Rails 端执行以下操作来配置所有内容
为了接收 HTTP post 请求,您需要设置一个简单的 API。您可以通过创建控制器和自定义路由来处理来自外部来源的 get/post 请求。由于亚马逊只发送发布请求,因此您只需要一个控制器操作和一个路由。从一个新的控制器开始并将控制器文件存储在
apps/controllers/api/v1/,格式为:
class Api::V1::ControllerNameController < ApplicationController
def create
end
end
然后设置你的路线config/routes.rb:
namespace :api, defaults: {format: :json} do
namespace :v1 do
post "/controller_name" => 'controller_name#create'
end
end
您会注意到控制器文件位置和命名空间调用以创建格式为/api/v1/ 的 URL,这样做是为了良好的做法,this article 在第 4.1.3 节中有很好的解释原因
然后,您将在 AWS 中将订阅通知的端点设置为 https://your-site-url/api/v1/controller_name,这与发布请求的 URL 匹配。
接下来,您已准备好接收来自 AWS 的 Post 请求。我发现的重要一点是传入的帖子请求可以通过变量request 访问。为了将其转换为可读的 JSON 格式,您可以调用以下代码:
request.body.read()
您可以将其放入新控制器的创建操作中。您可以使用以下内容将其打印到控制台:
@request = request.body.read()
puts "this is the content of the request: #{@request}"
从控制台的输出中,您可以获取此 JSON 对象中的“SubscribeURL”,将其复制并粘贴到网络浏览器中以确认您的订阅。并且繁荣,这是成功的一半!
此外,这个新变量可用于存储您的 JSON 对象,并从 AWS 访问所有相关信息并执行您需要执行的操作。