当前位置: 首页 > 知识库问答 >
问题:

连接到 FCM 的应用程序未收到来自 AWS SNS 的通知

詹钊
2023-03-14

按照这个指南,我将一个Android应用程序连接到了Google Firebase云消息服务(FCM ),

我按照这个答案建立了FCM之间的连接

我可以成功接收从FCM控制台发送的消息,但不能从AWS SNS控制台接收。

AWS上记录的消息传递状态显示我发送的每一条消息都成功,而我的设备上没有显示任何通知。

有没有办法检查发生了什么?

共有3个答案

西门淮晨
2023-03-14

你可以使用这个视频教程https://youtu.be/iBTFLu30dSg与英文字幕的如何使用与AWS SNS的一步一步的FCM和如何从AWS控制台发送推送通知的例子。它对我很有效,我成功地从SNS控制台和我在移动设备上的代码接收了推送通知

史朗
2023-03-14

这里的问题是,AWS SNS发送的是谷歌所称的数据消息。

使用FCM,您可以发送两种类型的消息 - 通知和数据。FCM 会自动显示通知,而数据消息则不会。更多关于这一点在这里: https://firebase.google.com/docs/cloud-messaging/concept-options

通过扩展FirebaseMessagingService并覆盖它的< code>onMessageReceived方法,即使你的应用程序在后台,来自SNS的数据消息仍然可以被处理。更多信息请点击这里:https://firebase . Google . com/docs/reference/Android/com/Google/firebase/messaging/firebasemesagingservice

我假设您希望AWS SNS消息模拟通知体验,即:

  • 看到它们在应用程序在后台弹出
  • 在通知中显示您的文本
  • 当应用程序激活时,您希望从抽屉中清除所有消息

要做到这一点,你需要做三件事。

首先-您需要开始跟踪您的应用程序当前是否可见。有关如何可靠地检测它的详细信息,您可以在此处找到:https://stackoverflow.com/a/18469643/96911

其次,您需要通过发布通知来处理来自AWS SNS的数据消息,但仅当您的应用程序处于后台时:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    static protected int id = 0;

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        if (!MyApplication.isActivityVisible()) {
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
            mBuilder.setContentTitle(getString(R.string.app_name))
                    .setSmallIcon(R.drawable.notification_icon);

            String message = remoteMessage.getData().get("default");
            mBuilder.setContentText(message);

            Intent resultIntent = new Intent(this, MainActivity.class);
            PendingIntent resultPendingIntent =
                    PendingIntent.getActivity(
                            this,
                            0,
                            resultIntent,
                            PendingIntent.FLAG_UPDATE_CURRENT
                    );
            mBuilder.setContentIntent(resultPendingIntent);

            NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

            mNotificationManager.notify(id ++, mBuilder.build());
        }
    }

}

最后-当用户单击其中一个通知时,您需要从抽屉中清除所有通知。结合我在响应通知的活动上方链接的可见性跟踪,应该有以下onResume方法:

@Override
protected void onResume() {
    super.onResume();

    MyApplication.activityResumed();

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    mNotificationManager.cancelAll();
}

你问这个问题已经很久了,但对我来说,追根究底是如此痛苦,我决定无论如何都要回答。我希望这有助于你或那些拼命想让这个东西工作的人(因为让iOS工作是轻而易举的事)。

曹原
2023-03-14

我遇到了完全相同的问题,来自带有设备令牌的Firebase的消息可以正常工作,但不知何故,从SNS到Firebase的消息没有传递。

我也开发了iOS应用程序,在那一刻,只需发送“brabra”即可向iOS发送消息。然而,FCM只接受特定的消息格式,以便从AWS SNS控制台进行测试。

下面是通过 SNS 和 FCM 成功向Android系统发送消息的示例格式。

{
 "GCM": "{\"notification\": { \"body\": \"Sample message for Android endpoints\", \"title\":\"Hello world\" } }"
}

关键是我们必须修改为“通知”,而不是“数据”,并且应该在通知中有正文和标题。

 类似资料:
  • 我已经学习了这篇关于在Windows Phone应用程序中设置解析推送通知的教程。这是我的代码: 当我从Parse dashboard发送推送通知时,它不会被接收到。我试着在模拟器(Windows Phone 8.0)和设备(8.1)上运行,在前景、背景和关闭应用程序时,结果都是相同的。 当我使用像上面的“testchannel”这样的通道并使用segment选项时,通道名称会出现在选项的下拉列表

  • 当我从Firebase发送推送时,如果应用程序在后台或关闭,我会收到通知,但当应用程序打开时,不是... 有什么建议,如何生成通知时,应用程序是前景?

  • 当我的应用程序前台服务被终止时,不会收到FCM通知,更清楚的是,我正试图让我的应用程序始终在后台运行,我使用前台服务来实现这一点,有时应用程序未被ANDROID系统终止,前台通知会出现15个多小时,但其他情况下,当我的前台通知被终止,并且我发送FCM通知时,它在1小时或更短时间内被终止,而我的设备没有收到FCM通知!!这里有什么问题!我怎样才能解决它!

  • 我想在用户收到应用程序上的通知时自动启动应用程序。启动程序图标上不会有点击操作。

  • 当应用程序在前台时不接收推送通知,但当应用程序在后台时接收我已遵循来自https://medium . com/@ ankushaggarwal/GCM-setup-for-Android-push-notifications-656 cf DD 8 adbd的FCM教程

  • 我正在使用Firebase GMS服务开发android应用程序。 我试着按照他们的教程去做,我按照他们说的做了项目,下载了json文件。 但当我尝试将我的应用程序连接到Firebase时。他们告诉我错误 无法解析Android应用程序模块的Gradle配置。解析gardle构建issuse和/或重新同步。 然而,我认为我的等级脚本是完美的(我会把它们写在页面的底部) 这是我的等级构建控制台 这是