AWS 移动推送通知示例
AWS Mobile Push Notification by Example
我正在努力思考 AWS Mobile Push Notification 的工作原理。具体来说,我正在构建一个 Web 服务,该服务能够将通知发送到我用户设备上的移动应用程序 运行。在阅读了他们所有的文档之后,听起来高级流程是:
- 配置
- 我需要进入我各自的推送通知服务(Android 的 GCM 和 iOS 的 APNS)并配置它们以获取我的凭据配置我的后端服务以用于在运行时连接到它们
- 我需要登录到 AWS SNS 控制台并生成一个平台应用程序 ARN (
PlatformApplicationARN
),我还配置了我的后端以使用
- 代码流(运行时)
- 当新用户首次注册时,或现有用户在新设备上登录时,我让应用向我的服务发送他们的设备信息。此设备信息的一个关键部分是它们的 设备令牌 (在 AWS 文档中也称为 "registration ID")。此令牌由他们的 OS 生成,并在各自的推送通知服务中唯一标识他们的设备(对我来说还是 GCM 或 APNS)
- 当我的服务收到这个新的设备信息时,我保存它,我还使用设备令牌访问 AWS SNS API(连同我配置的
PlatformApplicationARN
)生成一个唯一的EndpointARN
对于该特定设备
- 现在,每当我的后端决定它需要向该用户发送通知时,我可以查找与该用户关联的所有设备(我之前存储在我的数据库中),并获取每个设备的
EndpointARN
.然后只需点击 AWS SNS API 将我的通知消息发送到那个 EndpointARN
,它 听起来 就像 AWS SNS 会处理其他一切(并将实际消息传送到设备)
所以在我继续之前,我只是想找人帮助检查我的理解并在我误解任何内容或遗漏任何重要部分时提供任何课程更正 config/flow! 假设我或多或少走上正轨...
一旦我向 EndpointARN
发送通知消息,我仍然没有看到 SNS 如何能够连接到 GCM 和 APNS。他们是否使用这些服务维护自己的 integration/connection?或者我是否以某种方式将自己的 GCM/APNS 凭据注入 AWS SNS API 调用?
此外,我知道推送通知可以相当可配置,允许您执行以下操作:
- 确定设备在收到通知时应播放的声音
- 确定收到通知时闪烁的 LED 颜色 on/off(在我的 Android phone 上,不同的应用程序会导致绿色、蓝色甚至紫色 LED 闪烁!)
- 确定Android/iOS OS 本身是否收到通知(在这种情况下,如果我在离开 phone 几分钟后回到我的 phone,我可以按任何按钮并查看我收到的任何新通知的高级列表摘要); 或通知是否纯粹是"in-app"通知,在这种情况下,只有当我实际打开我的应用程序时,我才会看到我收到了它。
我想知道所有这些配置发生在哪里?有什么想法吗?
我可以确认高级流量是:
- 登录 AWS SNS 并创建 2 个不同的 平台应用程序 ,一个用于 Android(FCM -- Firebase 云消息传递),另一个用于 iOS (APNS -- Apple 推送通知服务)
- 对于每个平台应用程序,您将获得一个
PlatformApplicationArn
并要求您提供凭据,以便 SNS 可以连接到您各自的 FCM/APNS 帐户
- 对于 FCM,您只需要您的服务器 API 密钥(这可以从 Firebase Cloud Manager 获得)
- 对于 APNS,您需要通过 Mac 上的 Key Chain Access 工具完成创建证书的真正 labor-intensive 过程,这是不好玩...
- 将这 2 个
PlaformApplicationArn
添加到代码的配置中
- 当用户在您的应用程序中注册新设备时,他们会向您发送一个设备令牌(由 FCM 或 APNS 提供)以唯一标识他们 FCM/APNS
- 获取此设备令牌,结合您的
PlatformApplicationArn
用于 FCM 或 APNS,并使用 AWS SNS SDK 为设备创建一个 EndpointArn
。随心所欲地存储此 EndpointArn
。
- 现在您可以随时使用 AWS SNS SDK 将消息推送到您的
EndpointArn
(特定设备)。
我正在努力思考 AWS Mobile Push Notification 的工作原理。具体来说,我正在构建一个 Web 服务,该服务能够将通知发送到我用户设备上的移动应用程序 运行。在阅读了他们所有的文档之后,听起来高级流程是:
- 配置
- 我需要进入我各自的推送通知服务(Android 的 GCM 和 iOS 的 APNS)并配置它们以获取我的凭据配置我的后端服务以用于在运行时连接到它们
- 我需要登录到 AWS SNS 控制台并生成一个平台应用程序 ARN (
PlatformApplicationARN
),我还配置了我的后端以使用
- 代码流(运行时)
- 当新用户首次注册时,或现有用户在新设备上登录时,我让应用向我的服务发送他们的设备信息。此设备信息的一个关键部分是它们的 设备令牌 (在 AWS 文档中也称为 "registration ID")。此令牌由他们的 OS 生成,并在各自的推送通知服务中唯一标识他们的设备(对我来说还是 GCM 或 APNS)
- 当我的服务收到这个新的设备信息时,我保存它,我还使用设备令牌访问 AWS SNS API(连同我配置的
PlatformApplicationARN
)生成一个唯一的EndpointARN
对于该特定设备 - 现在,每当我的后端决定它需要向该用户发送通知时,我可以查找与该用户关联的所有设备(我之前存储在我的数据库中),并获取每个设备的
EndpointARN
.然后只需点击 AWS SNS API 将我的通知消息发送到那个EndpointARN
,它 听起来 就像 AWS SNS 会处理其他一切(并将实际消息传送到设备)
所以在我继续之前,我只是想找人帮助检查我的理解并在我误解任何内容或遗漏任何重要部分时提供任何课程更正 config/flow! 假设我或多或少走上正轨...
一旦我向 EndpointARN
发送通知消息,我仍然没有看到 SNS 如何能够连接到 GCM 和 APNS。他们是否使用这些服务维护自己的 integration/connection?或者我是否以某种方式将自己的 GCM/APNS 凭据注入 AWS SNS API 调用?
此外,我知道推送通知可以相当可配置,允许您执行以下操作:
- 确定设备在收到通知时应播放的声音
- 确定收到通知时闪烁的 LED 颜色 on/off(在我的 Android phone 上,不同的应用程序会导致绿色、蓝色甚至紫色 LED 闪烁!)
- 确定Android/iOS OS 本身是否收到通知(在这种情况下,如果我在离开 phone 几分钟后回到我的 phone,我可以按任何按钮并查看我收到的任何新通知的高级列表摘要); 或通知是否纯粹是"in-app"通知,在这种情况下,只有当我实际打开我的应用程序时,我才会看到我收到了它。
我想知道所有这些配置发生在哪里?有什么想法吗?
我可以确认高级流量是:
- 登录 AWS SNS 并创建 2 个不同的 平台应用程序 ,一个用于 Android(FCM -- Firebase 云消息传递),另一个用于 iOS (APNS -- Apple 推送通知服务)
- 对于每个平台应用程序,您将获得一个
PlatformApplicationArn
并要求您提供凭据,以便 SNS 可以连接到您各自的 FCM/APNS 帐户- 对于 FCM,您只需要您的服务器 API 密钥(这可以从 Firebase Cloud Manager 获得)
- 对于 APNS,您需要通过 Mac 上的 Key Chain Access 工具完成创建证书的真正 labor-intensive 过程,这是不好玩...
- 将这 2 个
PlaformApplicationArn
添加到代码的配置中 - 当用户在您的应用程序中注册新设备时,他们会向您发送一个设备令牌(由 FCM 或 APNS 提供)以唯一标识他们 FCM/APNS
- 获取此设备令牌,结合您的
PlatformApplicationArn
用于 FCM 或 APNS,并使用 AWS SNS SDK 为设备创建一个EndpointArn
。随心所欲地存储此EndpointArn
。 - 现在您可以随时使用 AWS SNS SDK 将消息推送到您的
EndpointArn
(特定设备)。