[Firebase] Messaging 推播訊息 # 2 利用Nodejs發送推播

更新於 發佈於 閱讀時間約 12 分鐘

Firebase 推播訊息 的第二篇文章是在說明當 Firebase 專案建立完成之後,如何利用Nodejs和專案裡的金鑰將message推播出去

本篇會先介紹如何建立一個Nodejs專案,再介紹如何透過程式將訊息推播出去。

  1. 首先建立一個sendMsg的資料夾
mkdir sendMsg

2. 進入sendMsg 資料夾後執行npm init

cd sendMsg
npm init

3. 接下來一直按enter會出現下列command,最後輸入yes

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (sendmsg)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\exampleProject\sendMsg\package.json:

{
"name": "sendmsg",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}


Is this OK? (yes)

4. 再來直接在command line 直接輸入code . ,vscode會直接開啟資料夾,或是開啟vscode再引入sendMsg資料夾也可以,目的是要開啟sendMsg資料夾

raw-image

5. 在sendMsg資料夾內新增index.js

raw-image

6. 再新增key.json,將剛才firebase的私密金鑰內容完整的貼進來

raw-image

7. 再來我們要在資料夾內安裝需要的npm

npm i https googleapis -s

8. 之後在index.js輸入下列程式碼

const https = require('https')
var {google} = require('googleapis')

const key = require('./key.json')
const PROJECT_ID = key.project_id;
const HOST = 'fcm.googleapis.com';
const PATH = '/v1/projects/' + PROJECT_ID + '/messages:send';
const MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
const SCOPES = [MESSAGING_SCOPE];



function getAccessToken() {
return new Promise(function(resolve, reject) {
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
)
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}

/**
* Send HTTP request to FCM with given message.
*
* @param {object} fcmMessage will make up the body of the request.
*/
function sendFcmMessage (fcmMessage) {
getAccessToken().then(function(accessToken) {
const options = {
hostname: HOST,
path: PATH,
method: 'POST',
// [START use_access_token]
headers: {
'Authorization': 'Bearer ' + accessToken
}
// [END use_access_token]
};

const request = https.request(options, function(resp) {
resp.setEncoding('utf8');
resp.on('data', function(data) {
console.log('Message sent to Firebase for delivery, response:');
console.log(data);
});
});

request.on('error', function(err) {
console.log('Unable to send message to Firebase');
console.log(err);
});

request.write(JSON.stringify(fcmMessage));
request.end();
});
}

/**
* Construct a JSON object that will be used to define the
* common parts of a notification message that will be sent
* to any app instance subscribed to the news topic.
*/
function buildCommonMessage() {
return {
'message': {
'topic': 'all',
'notification': {
'title': 'FCM Notification',
'body': 'Notification from FCM',
}
}
};
}


const commonMessage = buildCommonMessage();
console.log('FCM request body for message using common notification object:');
console.log(JSON.stringify(commonMessage, null, 2));
sendFcmMessage(buildCommonMessage());

9. 完成之後,要用node 去執行index.js的程式發送message,在command line下輸入:

node index.js

10. command line就會出現

FCM request body for message using common notification object:
{
"message": {
"topic": "all",
"notification": {
"title": "FCM Notification",
"body": "Notification from FCM",
}
}
}
Message sent to Firebase for delivery, response:
{
"name": "projects/test-18a9a/messages/2560468080093694458"
}

11. 依照firebase官方文件,response出現下列文字就是正常可以發送

{
"name": "projects/test-18a9a/messages/2560468080093694458"
}

參考文件

Firebase Cloud Messaging
The server side of Firebase Cloud Messaging consists of two components: The FCM backend provided by Google. Your app…firebase.google.com

REST Resource: projects.messages | Firebase Cloud Messaging REST API
Discover solutions for use cases in your apps and businessesfirebase.google.com

就如之前所說明的,此方式是針對topic推播訊息,如果需要針對應用程式,就要先將FCM TOKEN全部記錄下來。

留言
avatar-img
留言分享你的想法!
avatar-img
Daniel 的沙龍
4會員
12內容數
所有文章都是將自已工作上的經驗,透過篇章的方式,希望能夠將技術白話文,讓想入門的工程師能夠清楚的理解, 出版的頻率會是幾個月一篇,也有可能是一星期好幾篇,就看當下是否有空閒產出。某些特定文章會希望以付費方式呈現,如果有什麼問題,歡迎大家隨時留言
Daniel 的沙龍的其他內容
2023/09/29
filebeat的作用就像是一隻看門狗(watch dog),當看門狗監測到任何風吹草動(log產生變化)時,就立即事件告訴主人(logstash)。
Thumbnail
2023/09/29
filebeat的作用就像是一隻看門狗(watch dog),當看門狗監測到任何風吹草動(log產生變化)時,就立即事件告訴主人(logstash)。
Thumbnail
2023/09/27
此篇我們會將Nginx log修改成為Logstash可以正確辨識的格式。
Thumbnail
2023/09/27
此篇我們會將Nginx log修改成為Logstash可以正確辨識的格式。
Thumbnail
2023/09/23
這系列要介紹如何使用ELK架構(Elastic)及Filebeat來監控nginx的access.log。我會針對每個步驟寫出一篇文章來介紹系統該如何設定,如果有錯誤的地方,也麻煩多多指教。
Thumbnail
2023/09/23
這系列要介紹如何使用ELK架構(Elastic)及Filebeat來監控nginx的access.log。我會針對每個步驟寫出一篇文章來介紹系統該如何設定,如果有錯誤的地方,也麻煩多多指教。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
firestore 是 google 所提供的雲端文件式資料庫服務,為各種開發工具提供了方便使用的 sdk,python 的套件名稱為 firebase-admin,用 pip 安裝後就可操作了。 pip install firebase-admin
Thumbnail
firestore 是 google 所提供的雲端文件式資料庫服務,為各種開發工具提供了方便使用的 sdk,python 的套件名稱為 firebase-admin,用 pip 安裝後就可操作了。 pip install firebase-admin
Thumbnail
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
這篇想來寫,剛碰到js得時候,為了讓程式可以運作而安裝Node.js 。Node.js 是能夠在伺服器上面運行 JavaScript 的應用平台環境,透過 Node.js 提供的函式庫與執行環境能完成伺服器端服務。此篇幅就直接從純後端的角度切入摟(對不起拉我寫來寫去還是不知道怎麼順順的寫好文章開頭Q
Thumbnail
還在苦惱怎麼樣把你的檔案上傳到Github嗎?這裡教大家簡單上傳你的檔案可以沿用到如何上傳整體專案到Github並展示你的作品集
Thumbnail
還在苦惱怎麼樣把你的檔案上傳到Github嗎?這裡教大家簡單上傳你的檔案可以沿用到如何上傳整體專案到Github並展示你的作品集
Thumbnail
Firebase 推播訊息 的第二篇文章是在說明當 Firebase 專案建立完成之後,如何利用Nodejs和專案裡的金鑰將message推播出去 本篇會先介紹如何建立一個Nodejs專案,再介紹如何透過程式將訊息推播出去。 首先建立一個sendMsg的資料夾 2. 進入sendMsg 資料夾後執行
Thumbnail
Firebase 推播訊息 的第二篇文章是在說明當 Firebase 專案建立完成之後,如何利用Nodejs和專案裡的金鑰將message推播出去 本篇會先介紹如何建立一個Nodejs專案,再介紹如何透過程式將訊息推播出去。 首先建立一個sendMsg的資料夾 2. 進入sendMsg 資料夾後執行
Thumbnail
Firebase Realtime Database 是一個 NoSQL 即時雲端資料庫,支援多平台(JavaScript SDKs、Android、iOS),可以讓使用者即時取得資料庫的資料。
Thumbnail
Firebase Realtime Database 是一個 NoSQL 即時雲端資料庫,支援多平台(JavaScript SDKs、Android、iOS),可以讓使用者即時取得資料庫的資料。
Thumbnail
現行在開發需求上遇到即時推播訊息,其中一個推播方式就是利用firebase發送,並且讓應用程式即刻的收到推播,本篇一步一步的建立專案並且可以發送訊息。 前提: 目前利用程式向firebase 發送推播有三種方式 SEND TO TOKEN (針對device所產生的token) SEND TO TO
Thumbnail
現行在開發需求上遇到即時推播訊息,其中一個推播方式就是利用firebase發送,並且讓應用程式即刻的收到推播,本篇一步一步的建立專案並且可以發送訊息。 前提: 目前利用程式向firebase 發送推播有三種方式 SEND TO TOKEN (針對device所產生的token) SEND TO TO
Thumbnail
不知道你是否有以下困擾呢? 「自己寫好的程式,若要呈現在網路上,該怎麼辦?」 「手上有個html的檔案,但是要如何分享給朋友們?」 「做一個網站要花主機的錢,如何有個免費託管主機的地方呢?」 以上問題,將由github pages來幫你解決喔!
Thumbnail
不知道你是否有以下困擾呢? 「自己寫好的程式,若要呈現在網路上,該怎麼辦?」 「手上有個html的檔案,但是要如何分享給朋友們?」 「做一個網站要花主機的錢,如何有個免費託管主機的地方呢?」 以上問題,將由github pages來幫你解決喔!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News