向 Amazon SNS 移动推送服务注册移动/Android 终端节点
Posted
技术标签:
【中文标题】向 Amazon SNS 移动推送服务注册移动/Android 终端节点【英文标题】:Register mobile / Android endpoint with Amazon SNS mobile push service 【发布时间】:2016-09-03 21:18:45 【问题描述】:我想结合使用Amazon SNS Mobile Push Notifications 和GCM 将通知推送到android 设备。
我的应用程序上的 GCM 已启动并正在运行,它会从 Google 接收注册 ID,如果我可以收到通知
通过https://android.googleapis.com/gcm/send向设备发送通知 在我的 AWS / SNS 项目中手动将设备的注册 ID 添加到移动终端节点。下一步是设备将自身注册为 SNS 服务的端点。 为此,documentation 建议:
从将安装您的应用程序的设备注册令牌 未来
您可以使用以下两个选项之一:
使用 Amazon Cognito 服务:您的移动应用程序将需要凭据 创建与您的 Amazon SNS 平台关联的终端节点 应用。我们建议您使用临时凭证 一段时间后过期。对于大多数情况,我们建议 您使用 Amazon Cognito 创建临时安全凭证。为了 更多信息,请参阅创建临时安全凭证 使用身份提供程序的移动应用程序。如果您想收到通知 当应用程序向 Amazon SNS 注册时,您可以注册以接收 将提供新终端节点 ARN 的 Amazon SNS 事件。你也可以 使用 ListEndpointByPlatformApplication API 获取完整列表 向 Amazon SNS 注册的终端节点数。
使用代理服务器:如果您的 已经为您的移动应用程序设置了应用程序基础架构,以 每次安装都来电注册,可以继续使用 这个设置。您的服务器将充当代理并传递设备令牌 到 Amazon SNS 移动推送通知以及您的任何用户数据 想存储。为此,代理服务器将连接 使用您的 AWS 凭证到 Amazon SNS 并使用 CreatePlatformEndpoint API 调用以上传令牌信息。这 将返回新创建的终端节点 Amazon 资源名称 (ARN), 您的服务器可以存储以进行后续发布调用 亚马逊 SNS。
鉴于我不想使用代理服务器,而是让设备直接向 SNS 注册以创建移动端点 (About Web Identity Federation),以下假设是否正确?
我要么必须将访问此 AWS 帐户的凭据直接存储在应用程序中(当然不是一个选项),要么用户必须通过某个 OpenID 帐户来识别自己(我也不想这样做)因为用户不会仅仅为了接收推送消息而表明自己的身份)。
【问题讨论】:
【参考方案1】:Ascorbin - 是的,你会想要使用Cognito Federated Identity。 Cognito Identity 允许您创建临时的受限 AWS 凭证,使应用程序用户无需登录即可创建 SNS 平台端点或订阅 SNS 主题。您首先 create a Cognito Identity Pool 和 Cognito 将为您的应用程序分配两个角色(Auth 和 UnAuth)终端用户。
在未经身份验证的 IAM 角色中,您可以授予 sns:CreatePlatformEndpoint 或 sns:Subscribe 权限,具体取决于您的使用案例。在 AWS 控制台中创建身份池后,您将看到 Android 的“示例代码”,用于在您的 Android 应用程序中实施 Amazon Cognito 凭证提供程序。注意:创建身份池时,请不要忘记选择“启用对未经身份验证的身份的访问”,以便创建未经身份验证的 IAM 角色,并且您的所有应用程序用户都可以在不登录的情况下对您的 AWS 资源进行有限访问。
如果您想查看可运行的示例 Android 应用程序,请查看 AWS Mobile Hub 并创建一个项目并下载/运行使用 Cognito Identity 访问您的 AWS 资源的 Android 示例应用程序。
【讨论】:
以上是关于向 Amazon SNS 移动推送服务注册移动/Android 终端节点的主要内容,如果未能解决你的问题,请参考以下文章
向移动设备推送通知:SNS vs OneSignal vs GCM [关闭]
将 Google Cloud Messaging 的“用户通知”功能与 Amazon SNS 移动推送结合使用