AWS上基于GCM的移动推送的最佳设置

时间:2015-09-29 13:50:53

标签: amazon-web-services google-cloud-messaging apple-push-notifications amazon-sns

我正在创建一个在AWS上运行的后端服务,我将在Android上安装移动客户端,稍后在iOS上安装移动客户端。我需要移动推送功能,以便将事件从后端服务推送到设备。

现在,我对最佳设置有几点关注:

  • 使用AWS SNS实施移动推送有什么好处?对于GCM,我的后端服务代码很容易对GCM API进行publish a message的HTTP调用。

    我知道SNS可以作为包括GCM和APNS在内的多种推送服务实现的包装器,我认为这有助于隐藏后端服务中使用的设备类型等细节,但是因为你需要无论如何,为每个持有者创建一个“SNS平台应用程序”,我不太确定 - 我的后端代码是否仍然需要知道它想要与哪种设备通信,以及针对Android与iOS以不同方式发布下游消息?我可以想象,要编写完全不同的代码来推送GCM与APNS之间的消息会更容易,但它会更简单吗?

  • 如果使用SNS包装GCM,注册设备端点的最佳步骤是什么?我一直在努力寻找一个体面的教程,到目前为止我发现的唯一一个就是这样:

    1. 在设备上运行的Android应用使用Google Play服务API向GCM注册

    2. 在设备上运行的Android应用程序基于GCM令牌注册SNS平台端点,例如使用例如用于访问帐户的AWS Cognito凭据

    3. 在设备上运行的Android应用程序将平台端点ARN存储在后端用户数据库等中,以便在需要将推送消息发送到设备时使用

    4. 我想也可能让设备只执行步骤1)然后将GCM令牌传递给我的后端服务,后端服务会从中创建一个SNS端点并将其存储在数据库中?这会阻止我的设备处理AWS凭证等。但是我必须在我的服务器上实现GCM / APNS特定的功能。

      过期/旋转GCM令牌的处理是否应该设置此程序的因素? 在我的用户数据库中仅存储AWS SNS端点ARN是一个好主意吗?

    5. 使用SNS还有其他好处,而不是直接调用GCM / APNS / ......?

1 个答案:

答案 0 :(得分:1)

我将把答案分为两部分工作流程和好处。

工作流程(在我的项目中)

  1. 移动应用向我的服务器发送通知令牌和设备唯一ID。
  2. 服务器检查此设备是否存在于DB中。
  3. 如果没有创建端点并订阅amazon SNS主题,如果存在则检查令牌是否已更新,然后更新端点属性(令牌)。
  4. 同样在服务器上存在使用amazon SDK发送通知的实现
  5. 在前端存在发送通知的界面。
  6. 优势

    SNS不仅适用于移动推送通知,还适用于电子邮件和其他一些AWS服务。

    另一大好处是SNS topics。您可以在一个主题中对所有端点进行分组,因此您只需发送一个请求,亚马逊将在几秒钟内将其发布到数千台设备