【问题标题】:How can I send a firebase cloud messaging notification from javascript?如何从 javascript 发送 firebase 云消息通知?
【发布时间】:2017-02-25 05:32:07
【问题描述】:

我有一个这样的javascript函数:

function sendNotification(){
    var url = 'https://fcm.googleapis.com/fcm/send';
    var contentType = 'application/json';
    var data = {"notification":
                {
                  "title": 'Hello'
                 },
                 "to": '/topics/breaking_news'
                };

    var xhr = new XMLHttpRequest();
    xhr.onload = function(){
    alert (xhr.responseXML);
    }
    xhr.open("POST", url, false);
    xhr.setRequestHeader('Content-Type', contentType);
    xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
    xhr.setRequestHeader('Access-Control-Allow-Methods', 'POST');
    xhr.onreadystatechange = function () {
        if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
            console.log(xhr.responseText);
        } else {
            console.log(xhr.responseXML);
        }
    };
    xhr.setRequestHeader('Authorization', 'key=XXXXXXXX');
    xhr.send();
}

但是调用发送返回 400。我有一段时间没有编程有点生疏,所以如果它是微不足道的,我道歉。这两天一直在想这件事。

【问题讨论】:

  • 您是否尝试过将正文添加到通知中,即使它是空白的?
  • 是的。我得到:XMLHttpRequest 无法加载fcm.googleapis.com/fcm/send。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'localhost:5000'。
  • 您是否修复了“不存在'Access-Control-Allow-Origin'标头...”问题@Sanjay?

标签: javascript firebase


【解决方案1】:

我使用 chrome 扩展做了同样的事情。 这是我的js代码:-

function send_notification(){

// Set up an asynchronous AJAX POST request
var hr = new XMLHttpRequest();
var url="https://fcm.googleapis.com/fcm/send";

hr.open("POST", url, true);
  hr.setRequestHeader('Content-Type','application/json');
hr.setRequestHeader('Authorization','key=your-server-key-here');      
var data='{"to" : "your-device-token-here","notification" : {"body" : "great 
match!","title" : "Portugal vs. Denmark","content_available" : 
true,"priority" : "high"},"data" : {"body" : "great match!","title" : 
"Portugal vs. Denmark","content_available" : true,"priority" : "high"}}';

// Handle request state change events
hr.onreadystatechange = function() { 
  // If the request completed
if (hr.readyState == 4) {
    if (hr.status == 200) {
        // success
        resp=JSON.parse(hr.responseText);
        console.log('Response Sent with params '+data );
    } else {
        // Show what went wrong
        console.log('Something went wrong '+ hr.responseText);
  }}};          hr.send(data);}

And manifest.json 

{
"manifest_version": 2,
"name": "Firebase Auth in Chrome Extension Sample",
"description": "This sample shows how to authorize Firebase in a Chrome 
extension using a Google account.",
"version": "2.1",
"icons": {
"128": "firebase.png"
},
"browser_action": {
"default_icon": "firebase.png",
"default_popup": "credentials.html"
},
"background": {
"page": "background.html"
},
"permissions": [
"identity"
],
"content_security_policy":"script-src 'self' https://www.gstatic.com/ 
https://*.firebaseio.com https://www.googleapis.com; object-src 'self'",
"oauth2": {
"client_id": "oauth-client-id",
"scopes": [
  "https://www.googleapis.com/auth/userinfo.email",
  "https://www.googleapis.com/auth/userinfo.profile"
]
},
"key": "token-here"
}

这应该可行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2019-08-25
    • 2021-09-02
    • 2017-10-04
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多