Nar*_*oju 91 android amazon-web-services amazon-sns google-cloud-messaging firebase-cloud-messaging
我正在AWS为我的android项目使用资源,我打算为我的项目添加推送通知服务AWS SNS.有几个问题困扰我.我没有发现任何关于这些的问题,除了一两个但解释不清楚.
1. AWS支持FCM吗?SNS与...合作GCM.但谷歌建议使用FCM代替GCM.我没有找到AWS支持FCM.
2. AWS即使在发送推送通知后,还是将消息(或数据)存储到他们的数据库中?
3.我试过把FCM api密钥放在SNS应用平台上,显示无效参数为什么?
Nat*_*unn 180
FCM向后兼容GCM.在AWS上设置FCM的步骤与GCM设置过程相同,并且(至少暂时)FCM与GCM和SNS在服务器端配置方面透明地工作.
但是,如果data要将有效负载发送到Android设备,除非您实现扩展的客户端服务,否则不会处理它们FirebaseMessagingService.AWS控制台中的默认JSON消息生成器data会发送消息,除非实现上述服务,否则应用程序将忽略这些消息.要解决此问题以进行初始测试,您可以提供notification设备将接收的自定义有效负载(只要您的应用不在前台)
有GCM-FCM迁移说明由谷歌提供的,但是你需要做的改变主要是在应用程序方面.
使用SNS在您的应用上测试GCM/FCM时需要遵循的步骤如下:
FirebaseInstanceIDService和覆盖onTokenRefresh方法才能在Android应用中查看此内容.一旦你这样做了,请卸载并重新安装您的应用,您的令牌应打印到Android Studio中第一次启动调试控制台.SNS生成的消息将采用以下形式:
{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
Run Code Online (Sandbox Code Playgroud)
如前所述,data如果没有实现接收服务,则将忽略有效负载.我们想在不编写太多代码的情况下进行测试,因此我们应该发送一个notification有效负载.要执行此操作,只需将JSON消息更改为:
{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}
Run Code Online (Sandbox Code Playgroud)
完成此操作后,请确保您的应用未在设备上运行,然后点击" 发布消息"按钮.您现在应该会在设备上看到一个通知.
您当然可以通过Amazon SNS API以编程方式执行所有这些操作,但是所有示例似乎都使用了data有效负载,因此您需要牢记这一点并生成适合您的用例的有效负载.
Rez*_*eza 13
现在您可以访问您的firebase控制台(https://console.firebase.google.com/)选择您的项目,单击齿轮图标并选择项目设置,然后单击云消息传递选项卡...
您将看到作为GCM API密钥的旧版服务器密钥,您可以选择生成新的服务器密钥,这些密钥是FCM版本
SNS将接受这两个版本,但其菜单选项仍在GCM下进行分类
这是图片供您参考:
请注意,您可以"意外"删除服务器密钥,但旧版服务器密钥不可删除.此外,如果单击添加服务器密钥按钮,您将获得一个新的服务器密钥,而不是第一个,没有警告!...好工作谷歌;)
小智 5
我尝试使用带有通知有效负载的解决方案而不是数据,但我没有在移动设备上收到推送通知.我找到了本教程https://youtu.be/iBTFLu30dSg,其中有英文字幕,介绍了如何逐步使用FCM和AWS SNS,以及如何从AWS控制台发送推送通知并使用aws php sdk在php上实现它的示例.这对我帮助很大.
内森·邓恩(Nathan Dunn)的出色回答再增加了一个注释。如何将带有通知的数据从SNS发送到Firebase。
我们需要向Json添加数据(在通知内部):
{
"default": “any value",
"GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}
Run Code Online (Sandbox Code Playgroud)
在您的FirebaseMessagingService实现中(Xamarin示例)
public override void OnMessageReceived(RemoteMessage message)
{
try
{
var body = message?.GetNotification()?.Body;
var title = message?.GetNotification()?.Title;
var tag = message?.GetNotification()?.Tag;
var sound = message?.GetNotification()?.Sound;
var data = message?.Data
foreach (string key in data.Keys)
{
// get your data values here
}
}
catch (Exception e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51792 次 |
| 最近记录: |