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

使用firebase api打开特定页面

陶沛
2023-03-14

我正在使用下面的代码向设备发送推送通知。

      var nTitle = "New message from " + $rootScope.clients_firstName;
      var to = "DeviceToken is here";
      var notification = {
        'title': nTitle,
        //'body': 'Click here to more details...',
        'icon': 'firebase-logo.png',
        'click_action': 'openapp'
      };

      var key = 'your key';
      fetch('https://fcm.googleapis.com/fcm/send', {
      'method': 'POST',
        'headers': {
        'Authorization': 'key=' + key,
        'Content-Type': 'application/json'
      },
      'body': JSON.stringify({
        'notification': data,
        'to': to
      })
      }).then(function(response) {
        //console.log("res ", response);
      }).catch(function(error) {
        console.error("err ", error);
     });

推送通知已成功发送到设备上。

但是当我点击通知时,特定的页面应该是打开的。

例如“click_action”:“openapp/somepage”

<activity android:name="MainActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">

        <intent-filter>
            <action android:name="openapp" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

</activity>
--platforms
--plugins
--www
  --app
    --about
      --about.html
      --about.ctrl.js
    --product
      --product.html
      --product.ctrl.js
  --css
  --js
  --lib
  index.html

如果我点击通知,我想打开产品或关于页面,那么我必须做什么?

这里怎么了?请告诉我正确的解决方法。

共有1个答案

燕和裕
2023-03-14

要使应用程序在后台时可以单击通知,您需要通知负载中的click_action属性。

请检查Firebase文档的这一部分。

此外,当您定义click_action属性时,您还需要在要启动的活动的 中有一个相应的 属性。

这段视频用相当详细的方式解释了它。

但是,请注意,如果从Firebase控制台发送通知,则不能设置click__action属性。只有当您从自己的管理服务器或使用Firebase云功能发送通知时,才能这样做。

最后,在启动的活动中,您可以使用data属性设置其他data(也显示在上面链接的同一文档中)。当您通过单击通知启动应用程序时,您可以使用getIntent()获取通知数据。请查看此答案以了解更多关于如何做到这一点的详细信息。

问题更新后编辑:-

与其将 放入mainactivity中,不如将筛选器放入要在单击通知时打开的活动的 标记中。一个例子如下:-

<activity android:name="ProductDetailsActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">

    <intent-filter>
        <action android:name="openapp" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>

现在指定的活动打开了,您可以使用getIntent()从通知的数据部分获取信息。

例如,如果通知负载具有以下结构,

payload = {
  notification: {
    title: `You ordered a new product`,
    click_action : 'HANDLE_NOTIFICATION',

  },
  data : {
        product_id : 'ABC98292',
        type : `Clothes`,
        product_name : 'Cotton spring shirt'
    }
};

然后,您可以使用getIntent().getStringsExtra(“PRODUCT_ID”)等从通知中获取PRODUCT_ID

这样,您将打开所需的活动,并且可以用从通知中获得的相关细节填充它,而不需要使用任何其他框架。

 类似资料:
  • 我正在尝试在https页面上运行负载测试。然而,即使是在一个简单的GET请求上,我也会不断收到一个错误。例如,我试着打开https://www.google.com,效果很好。我试图捕获请求,但似乎没有发送任何内容。另外,当我尝试用jmeter证书记录https页面时,我也会收到相同的错误。 在http上打开同一页效果很好。我试图打开的页面是一个错误。网页。有人知道怎么回事吗?我用头在墙上跺了很久

  • 本文向大家介绍运用Python的webbrowser实现定时打开特定网页,包括了运用Python的webbrowser实现定时打开特定网页的使用技巧和注意事项,需要的朋友参考一下 运用webbrowser库中的一个函数实现自动打开浏览器: 运用time库中的函数获取当前时间以及实现定时功能: 完整代码: 以上这篇运用Python的webbrowser实现定时打开特定网页就是小编分享给大家的全部内容

  • 我在Windows 10上使用Vim80。使用Netrw命令,默认情况下它会打开我的路径。我想在我的计算机上打开特定的磁盘驱动器,如使用netrw的。我在Stack Overflow上搜索了类似的问题,并找到了使用或的答案,但它不会更改默认目录。什么是netrw vim命令,使我能够更改我正在使用的驱动器?

  • 我正在使用Asgard CMS,这是一个基于Laravel 5.1构建的模块化CMS,并且在我创建的特定模块中面临上述问题。 整个站点都有很多post请求和重定向,这很好,但是当涉及到配置文件模块时,我遇到了这个问题。 我将一个编辑请求发布到一个路由,在完成一些工作后,我重定向回路由。当我重定向时,它会显示一个空白页面,上面写着“重定向到”http://www...“首先写入,然后在2-3秒后重定

  • 我正在尝试使用gallery打开特定文件夹,并参考了gallery中的其他类似问题open image form Build\u,并实现了以下代码,但仍然失败并报告错误(如以下logcat所示): 选择特定文件夹: 活动结果: 在Logcat中,它报告android。所容纳之物ActivityNotFoundException:找不到可处理意图的活动{act=android.Intent.acti

  • 我有一个如下数组: 我想做的是找到重复的值,并打印它们。 所以我这样做的方法是转换到,然后转换到,并在上使用。 然后,我使用一个循环通过它,并使用。 这当然会把它们全部打印出来,即使计数是一。 我想加入