Firebase 控制台:如何指定通知的 click_action

2023-12-26

我实现了 Firebase 并测试了 Firebase 通知。 当应用程序位于前台时,我没有问题,我实现了一项扩展的服务Firebase消息服务并处理消息和数据收到消息时

当应用程序在后台运行时,我遇到问题,我想发送一条通知,打开特定活动并执行我计划执行的操作,而不仅仅是打开应用程序。

我按照 Firebase 指南中的说明进行操作,但无法启动特定活动。

这里是清单:

<activity android:name=".BasicNotificationActivity">
            <intent-filter>
                <action android:name="OPEN_ACTIVITY_1" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

这里是 Firebase 控制台。我必须在这些字段中写什么才能打开我的“BasicNotificationActivity”?


这是这个问题的重复:Firebase FCM 通知 click_action 有效负载 https://stackoverflow.com/q/37407366/5433102

但是这个问题的作者接受的答案只是表明 Firebase Console 不可能,但它是 - 有一个简单的解决方法。此回答来自 diidu https://stackoverflow.com/a/37836984/5433102对同一个问题解释了我将使用的解决方法。

UPDATE:
详细说明他的答案:

添加一个辅助类(或实现startActivity()方法以某种方式):

public class ClickActionHelper {
    public static void startActivity(String className, Bundle extras, Context context){
        Class cls;
        try {
            cls = Class.forName(className);
        }catch(ClassNotFoundException e){
            //means you made a wrong input in firebase console
        }
        Intent i = new Intent(context, cls);
        i.putExtras(extras);
        context.startActivity(i);
    }
}

在应用程序的启动器活动中,调用一个方法来检查中的任何新意图onCreate() and onNewIntent() (onNewIntent()仅被调用而不是onCreate()如果 Activity 使用单顶标志启动):

@Override
protected void onCreate(Bundle bundle) {
    [...]
    checkIntent(getIntent());
 }

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    [...]
    checkIntent(intent);
}

public void checkIntent(Intent intent) {
       if (intent.hasExtra("click_action")) {
        ClickActionHelper.startActivity(intent.getStringExtra("click_action"), intent.getExtras(), this);
       }
}

And in onMessageReceived():

 public void onMessageReceived(RemoteMessage remoteMessage) {
     Map<String, String> data = remoteMessage.getData();        
     if (data.containsKey("click_action")) {
         ClickActionHelper.startActivity(data.get("click_action"), null, this);
     }
 }

要使用 firebase 控制台发送通知,请将键值对作为自定义数据,如下所示:

Key: click_action
Value: <fully qualified classname of your activity>

现在,当收到通知并单击时,它将打开您的活动。如果您的应用程序位于前台,它也会立即更改为该活动 - 最好询问用户是否想要进入该活动(通过在onMessageReceived()).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 控制台:如何指定通知的 click_action 的相关文章

随机推荐

  • 将文件从服务器下载到 Ionic2 应用程序中

    我需要在我的中实现一个功能Ionic2用户可以将特定视频文件下载到 Ionic2 应用程序中 经检查Ionic Native部分 我发现以下插件可用 File 文件选择器 文件开启器 文件路径 但找不到诸如 cordova 插件 文件传输
  • 如何在Windows 10上更改Node JS进程名称?

    我有一个node js在 Windows 10 上运行的进程 我想更改进程的名称 以便可以获得一些性能详细信息 我尝试改变流程 标题的财产process对象但是 它不会反映在电源外壳中 我只能找到node作为进程名称 有没有其他方法可以更改
  • Exhaustive-deps 规则无法将自定义挂钩的结果识别为 React 参考

    想象一个钩子 export function useMounted const mounted React useRef
  • Spring Boot 多数据库:没有 EntityManagerFactoryBuilder 类型的合格 bean

    我们的 Spring Boot 应用程序中有两个数据库 称为源数据库和目标数据库 这是这些的配置 源配置 package com alex myapp config import javax persistence EntityManage
  • PHP 字符串类型提示 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在另一个线程完成时停止一个线程

    我有这个代码 Thread thread1 new Thread this DoSomething1 Thread thread2 new Thread this DoSomething2 thread1 Start thread2 Sta
  • OpenSSL:加密/解密例程的输入和输出缓冲区可以相同吗?

    例如 在 int EVP EncryptUpdate EVP CIPHER CTX ctx unsigned char out int outl unsigned char in int inl can out in 我只是偶然发现这个问题
  • 如何限制临时表的大小?

    我的数据库中有较大的 InnoDB 表 显然 用户能够使用 JOIN 进行 SELECT 从而生成临时的大型 因此位于磁盘上 表 有时 它们太大以至于耗尽了磁盘空间 导致各种奇怪的问题 有没有办法限制临时表的最大大小对于磁盘上的表 这样表就
  • 将参数值作为rails中的查询字符串传递给redirect_to

    这应该很简单 但我似乎找不到简单的答案 如何将当前请求中的参数值传递到redirect to 调用中 我想将一些表单值传递到 GET 重定向的查询字符串中 我想做这样的事情 redirect to thing foo gt params f
  • 查找多个 NumPy 数组的中值

    我有一个创建大约 50 个数组的 for 循环 数组的长度为 240 我试图找出计算数组每个元素的中值的最佳方法 本质上 我想获取循环中创建的每个数组的第一个元素 将它们放入列表中 然后找到中位数 然后对其他 239 个元素执行相同的操作
  • jit 会优化新对象吗

    我创建这个类是为了不可变并且具有流畅的 API public final class Message public final String email public final String escalationEmail public
  • 唤醒 Heroku 应用程序

    因此 我的 heroku NODE js 应用程序一直在运行 今天我通过我的 url 再次尝试它 但由于某种原因 它给了我一条应用程序错误消息 我阅读并登录到我的仪表板 它说该应用程序正在睡眠 我有 Heroku 的免费套餐 我知道该应用程
  • 如何删除 ExpandableListView 中父级和子级之间的特定空间

    Can you help me identify why there is a space between the group and the child In my case I want spaces between all group
  • Java矩阵运行时错误

    练习信 给定一个 m x n 元素的矩阵 m 行 n 列 按螺旋顺序返回矩阵的所有元素 例如 给定以下矩阵 1 2 3 4 5 6 7 8 9 You should return 1 2 3 6 9 8 7 4 5 给定代码 public
  • 按住按钮时运行代码

    我是 Unity 和构建游戏的新手 我使用 2 个按钮 IncreaseButton DecreaseButton 我遇到的问题是按钮回调函数仅在用户单击按钮时调用一次 但在按住按钮时不会调用 如何让按钮在按住时重复调用 Code publ
  • 如何以编程方式为 Django 中的给定模型生成 CREATE TABLE SQL 语句?

    我需要以编程方式生成给定的 CREATE TABLE 语句不受管理的我的 Django 应用程序中的模型 managed False 由于我正在处理旧数据库 因此我不想创建迁移并使用sqlmigrate The manage py sql命
  • Discord.py 机器人可以不区分大小写吗?

    我现在正在制作一个不和谐的机器人 如果我使用大写字母 不使用大写字母 它不会响应 有没有办法让机器人检测消息 即使它们是大写 小写 还有一种方法可以让机器人对空格做同样的事情 如果我不小心忘记放空格 或者不小心将两个单词合并在一起 或者我是
  • 如何在 QTextEdit 中为 QTextFrame 或 QTextBlock 提供背景图像?

    我正在开发一个 IM 工具 作为它的一部分 我必须开发一个BubbleChatWidget所有消息项都有一个bubble like背景图像 我以为我可以实现我的目标QTextEidt 但我不知道如何给出 QTextFrame 或QTextB
  • 在 Git hook 中获取提交消息

    我想在 Git 提交之前检查提交消息 我使用预提交挂钩来执行此操作 但我找不到在中获取提交消息的方法 git 预提交脚本 我怎样才能得到它 In the pre commit hook the commit message usually
  • Firebase 控制台:如何指定通知的 click_action

    我实现了 Firebase 并测试了 Firebase 通知 当应用程序位于前台时 我没有问题 我实现了一项扩展的服务Firebase消息服务并处理消息和数据收到消息时 当应用程序在后台运行时 我遇到问题 我想发送一条通知 打开特定活动并执