如何使用 rails & aws 将服务器端通知发送到 phonegap 设备
How to send server side notifications using rails & aws to phonegap device
我正在寻找一种解决方案,用于在特定时间点将服务器端通知从 rails 发送到特定设备集的 cordova 应用程序。
假设用户为某个项目出价。每次对该项目进行出价时,都需要通知发布出价的每个用户。通知需要采用JS回调的形式。
现在我正在研究 AWS SNS 的示例,但我担心它不符合我的目的。 AWS SNS上的流量大致是这样
Platform_applicaton --> Platform_endpoint --> subscription for a topic
require 'rubygems'
require 'aws-sdk'
sns = Aws::SNS::Client.new(
access_key_id: 'X',
secret_access_key: 'X',
region: 'X',
ssl_ca_bundle: 'c:\tmp\ca-bundle.crt'
)
# create platform application
platform_app = sns.create_platform_application(
# required
name: "parking-space-web",
# required
platform: "GCM",
# required
attributes:
{ :PlatformCredential => "google_api_key" ,
:PlatformPrincipal => "" }
)
puts platform_app['platform_application_arn']
#create endpoint
endpoint = sns.create_platform_endpoint(
# required
platform_application_arn: platform_app['platform_application_arn'],
# required
token: "app1"
)
# subscribe to topic
subscription = sns.subscribe(
# required
topic_arn: "arn:aws:topic:arn",
# required
#I can choose whatever protocol I want but the physical notification will just be a call made via that specific protocol ( http/email ).
protocol: "application",
endpoint: endpoint['endpoint_arn'],
)
这对我有什么用?我正在通过 http/email
发布一条消息,该消息显然会发送给多个 http/email
订阅者。如果我需要,我会自己提出 http/email
请求。 SNS的优势是什么?
我认为真正处理 SNS 的是 'application' 协议,它使用供应商 API 密钥(GCM、APNS、ADM 等)发送通知 to/from特定平台,但在使用 cordova 时这对我帮助不大。我必须安装一个自定义插件来拦截这些通知。不错,但我认为有更清洁的解决方案。
根据我的发现,似乎 AWS SQS is the best solution。
- AWS SQS 能否将消息传送给多个收件人(类似主题)?
- 当客户端重新联机时,消息是否会保留并传送?
- 是否可以为每个项目创建一个队列,并在每次出价时发布一条消息?这将导致创建大量队列。
您问题的答案:
- 不,这不是您使用 SQS 的方式。当然,可能会有很多很多客户端轮询队列以查找消息,但现在 SQS 就是这样设计的。 SQS 不传递消息,客户端轮询消息。
- SQS 消息会一直保留到它们过期(我认为最长为 14 天)。 SNS 具有可配置的重试策略,但最大生命周期为 60 分钟。
- 是的,这是可能的,但不,你可能不想那样做。
不是 100% 确定您的限制,但在您提到的技术中,我的猜测是 SNS 移动推送 http://docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html 可能最接近您的需要。
编辑:我没有使用过 Cordova,但这篇文章也可能有所帮助:
https://developer.amazon.com/appsandservices/community/post/Tx17CAREHZUWLH9/Getting-started-with-the-Cordova-Push-Notifications-Plugin-for-Amazon-Fire-OS
我正在寻找一种解决方案,用于在特定时间点将服务器端通知从 rails 发送到特定设备集的 cordova 应用程序。
假设用户为某个项目出价。每次对该项目进行出价时,都需要通知发布出价的每个用户。通知需要采用JS回调的形式。
现在我正在研究 AWS SNS 的示例,但我担心它不符合我的目的。 AWS SNS上的流量大致是这样
Platform_applicaton --> Platform_endpoint --> subscription for a topic
require 'rubygems'
require 'aws-sdk'
sns = Aws::SNS::Client.new(
access_key_id: 'X',
secret_access_key: 'X',
region: 'X',
ssl_ca_bundle: 'c:\tmp\ca-bundle.crt'
)
# create platform application
platform_app = sns.create_platform_application(
# required
name: "parking-space-web",
# required
platform: "GCM",
# required
attributes:
{ :PlatformCredential => "google_api_key" ,
:PlatformPrincipal => "" }
)
puts platform_app['platform_application_arn']
#create endpoint
endpoint = sns.create_platform_endpoint(
# required
platform_application_arn: platform_app['platform_application_arn'],
# required
token: "app1"
)
# subscribe to topic
subscription = sns.subscribe(
# required
topic_arn: "arn:aws:topic:arn",
# required
#I can choose whatever protocol I want but the physical notification will just be a call made via that specific protocol ( http/email ).
protocol: "application",
endpoint: endpoint['endpoint_arn'],
)
这对我有什么用?我正在通过 http/email
发布一条消息,该消息显然会发送给多个 http/email
订阅者。如果我需要,我会自己提出 http/email
请求。 SNS的优势是什么?
我认为真正处理 SNS 的是 'application' 协议,它使用供应商 API 密钥(GCM、APNS、ADM 等)发送通知 to/from特定平台,但在使用 cordova 时这对我帮助不大。我必须安装一个自定义插件来拦截这些通知。不错,但我认为有更清洁的解决方案。
根据我的发现,似乎 AWS SQS is the best solution。
- AWS SQS 能否将消息传送给多个收件人(类似主题)?
- 当客户端重新联机时,消息是否会保留并传送?
- 是否可以为每个项目创建一个队列,并在每次出价时发布一条消息?这将导致创建大量队列。
您问题的答案:
- 不,这不是您使用 SQS 的方式。当然,可能会有很多很多客户端轮询队列以查找消息,但现在 SQS 就是这样设计的。 SQS 不传递消息,客户端轮询消息。
- SQS 消息会一直保留到它们过期(我认为最长为 14 天)。 SNS 具有可配置的重试策略,但最大生命周期为 60 分钟。
- 是的,这是可能的,但不,你可能不想那样做。
不是 100% 确定您的限制,但在您提到的技术中,我的猜测是 SNS 移动推送 http://docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html 可能最接近您的需要。
编辑:我没有使用过 Cordova,但这篇文章也可能有所帮助: https://developer.amazon.com/appsandservices/community/post/Tx17CAREHZUWLH9/Getting-started-with-the-Cordova-Push-Notifications-Plugin-for-Amazon-Fire-OS