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

如何使用Firebase云消息传递通过Web浏览器订阅主题

金阳华
2023-03-14

我正试图找到一种方法,使用Firebase云消息发送通知给我的应用程序的所有用户,但我有一个仅限web的应用程序。我见过一些针对Android/iOS的解决方案,基本上是让用户自动订阅一个名为“allDevices”的主题,然后向订阅该主题的所有用户发送通知。我似乎找不到任何关于如何让基于web的用户订阅主题的文档。有人知道这是否可能吗?如果有,是否有我遗漏的文件可以涵盖这一点?

谢谢!

共有3个答案

沈翰
2023-03-14

弗兰克斯解仍然有效。但是,您需要有一个服务器为您进行订阅。

function subscribeTokenToTopic(token, topic) {
  fetch('https://myserver.com/'+token+'/rel/topics/'+topic, {
    method: 'POST',
    headers: new Headers({
      'Authorization': 'Bearer '+ oauthToken
    })
  }).then(response => {
    if (response.status < 200 || response.status >= 400) {
      throw 'Error subscribing to topic: '+response.status + ' - ' + response.text();
    }
    console.log('Subscribed to "'+topic+'"');
  }).catch(error => {
    console.error(error);
  })
}

然后您的服务器有一个rest调用,如下所示:

(爪哇之春)

@RequestMapping(value = "/{token}/rel/topics/{topic}", method = RequestMethod.POST)
public ResponseEntity<?> subscribeTokenToTopic(@PathVariable("token") String token, @PathVariable("topic") String topic)  throws ServletException {
  URL url = new URL("https://iid.googleapis.com/iid/v1/"+token+"/rel/topics/"+topic);
  // make https post call here.. 
  ...
}

希望这有意义。

丁嘉庆
2023-03-14

任何一个寻找PHP解决方案找到下面,因为你要使用服务器的Api密钥,所以不要在客户端这样做

客户端Firebase js代码

// Initialize Firebase
var config = {
    apiKey: "xxxx",
    authDomain: "yyy",
    databaseURL: "zzzz",
    projectId: "aaaa",
    storageBucket: "bbbbb",
    messagingSenderId: "ccc"
  };
firebase.initializeApp(config);

const messaging = firebase.messaging();

messaging.requestPermission()
.then(function() {
  console.log('Notification permission granted.');
  return messaging.getToken();
})
.then(function(token) {

//send this token to server
  console.log(token); // Display user token
})
.catch(function(err) { // Happen if user deney permission

  console.log('Unable to get permission to notify.', err);
});

messaging.onMessage(function(payload){
    console.log('onMessage',payload);
})

php编写的服务器端代码

$headers = array
    ('Authorization: key=' . API_ACCESS_KEY,
    'Content-Type: application/json');

$ch = curl_init();
// browser token you can get it via ajax from client side
$token = 'drVdtCt82qY:APA91bEZb99GvoS9knv-cp5ThVBiYGBjUwl_Ewj2tKaRFwp7HoG347utaNKbgLWmkxpGadABtIg-DspPUh5sC_bc2JrBKVw10Ejg72nYxZgD2wBU-adYJo0yi03lX22s5K2UEp6gwnMv';
curl_setopt($ch, CURLOPT_URL, "https://iid.googleapis.com/iid/v1/$token/rel/topics/testIshakTopic");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, array());
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo "The Result : " . $result;

希望对PHP开发人员有所帮助

高经艺
2023-03-14

Firebase Cloud Messaging SDK for JavaScript中没有用于向客户端订阅主题的直接API。相反,您可以通过RESTAPI向主题订阅令牌。调用此API需要指定FCM服务器密钥,这意味着您只能在受信任的环境中执行此操作,例如您的开发机器、您控制的服务器或云功能。这是必要的,因为使用FCM服务器密钥可以代表应用程序向所有应用程序用户发送消息。

事实证明,在我的测试中,我使用的是一个较旧的项目,其中允许客户端API键订阅主题。出于安全原因,此功能已从较新的项目中删除。

例如,在Node.js中,您可以调用REST API为应用程序实例创建关系映射,如下所示:

function subscribeTokenToTopic(token, topic) {
  fetch('https://iid.googleapis.com/iid/v1/'+token+'/rel/topics/'+topic, {
    method: 'POST',
    headers: new Headers({
      'Authorization': 'key='+fcm_server_key
    })
  }).then(response => {
    if (response.status < 200 || response.status >= 400) {
      throw 'Error subscribing to topic: '+response.status + ' - ' + response.text();
    }
    console.log('Subscribed to "'+topic+'"');
  }).catch(error => {
    console.error(error);
  })
}

其中fcm_server_key是从项目的Firebase控制台获取的fcm服务器密钥。

 类似资料:
  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 我正在尝试为Web设置Firebase云消息传递。我成功地对其进行了正确初始化并获得了令牌: manifest.json与gcm_sender_id 我可以看到我在控制台中得到令牌,所以我试图验证它,并通过邮递员发送我的第一个通知-这里是留档。 发布网址:https://fcm.googleapis.com/v1/projects/PROJECTID/messages:发送授权:无授权 标题 Bo

  • 我有一个运行网站的服务器。我需要此服务器能够管理(仅下游)通知到三个独立的设备组,Android,iOS和客户端Web应用程序。 我试图使用Firebase云消息传递。对于FCM,我计划使用超文本传输协议来发送json消息。 除此之外,我还很困惑该去哪里。我知道GCM教程应该与FCM教程完全相同,但我很难找到一个教程来确定我需要做什么,因为每个教程似乎都将服务器端和客户端应用程序混合在一起,这让我

  • 我必须在SpringJava中为多层架构制作一个RESTAPI,其中需要为Firebase云消息传递(FCM)构建DAO、控制器和服务管理器,以向android应用程序发送推送通知消息,但我无法在Java中配置服务器以向设备发送通知。我怎么能?

  • 使用用于web套接字消息传递的Stomp broker中继,我可以订阅目标。这将创建一个代理订阅,并接收系统中的某些内容为此代理目标触发的所有消息,这将在系统中发生某些事件时发生。 我可以订阅一个目标,将调用带有的控制器方法,并且返回值仅在该套接字上作为消息发送回。据我所知,这是唯一的消息,将永远发送此订阅。 有没有一种方法可以将其合并到一个订阅中,即为某个目的地创建一个代理订阅,并触发一些直接将

  • FCM服务未向我的iOS应用程序发送消息。 > App CAN成功接收APNs令牌和实例ID令牌 App CAN使用推送通知实用程序利用. p8令牌在后台成功接收来自APN的推送 #2中使用的相同APNs密钥上传到Firebase控制台 应用程序无法接收Firebase控制台中Notification Composer发送的消息,也无法使用CURL请求接收消息。 应用程序在通过FCM发送时不显示任