[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資料夾
5. 在sendMsg資料夾內新增index.js
6. 再新增key.json,將剛才firebase的私密金鑰內容完整的貼進來
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"
}
參考文件
就如之前所說明的,此方式是針對topic推播訊息,如果需要針對應用程式,就要先將FCM TOKEN全部記錄下來。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
4會員
12內容數
所有文章都是將自已工作上的經驗,透過篇章的方式,希望能夠將技術白話文,讓想入門的工程師能夠清楚的理解, 出版的頻率會是幾個月一篇,也有可能是一星期好幾篇,就看當下是否有空閒產出。某些特定文章會希望以付費方式呈現,如果有什麼問題,歡迎大家隨時留言
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Daniel 的沙龍 的其他內容
現行在開發需求上遇到即時推播訊息,其中一個推播方式就是利用firebase發送,並且讓應用程式即刻的收到推播,本篇一步一步的建立專案並且可以發送訊息。 前提: 目前利用程式向firebase 發送推播有三種方式 SEND TO TOKEN (針對device所產生的token) SEND TO TO
現行在開發需求上遇到即時推播訊息,其中一個推播方式就是利用firebase發送,並且讓應用程式即刻的收到推播,本篇一步一步的建立專案並且可以發送訊息。 前提: 目前利用程式向firebase 發送推播有三種方式 SEND TO TOKEN (針對device所產生的token) SEND TO TO
你可能也想看
Google News 追蹤
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
從youtube推播的影片延伸找到一些似是而非的影片開始,接著找一些內部、外部的判斷真偽可能方法,簡言之,若沒有相關知識背景,可能就得從講的人是否可信、講的人是否真的講了這些話來判斷。
Thumbnail
前一篇講到看科普影片想說多看一些結果找到一堆真偽難辨的影片。這邊繼續討論歸納一下有什麼辨別的可能性。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
xhr 在下面的例子裡,我們首先建立了一個 XMLHttpRequest 物件,並使用 .open() 開啟一個 URL,最後使用 .send() 發出 request。 具體來說步驟有四個: 建立XMLHttpReque 開啟一個請求。 送出請求。 拿到回應後去處理畫面要如何呈現。
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
Thumbnail
最近碰到個神奇的需求,App啟動時,才要用firebase remoteConfig去決定初始畫面。該文章詳細介紹了在App啟動時如何利用firebase remoteConfig去決定初始畫面,以及解決在推播的情況下造成跳轉無效的問題。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
欲傳送之內容,由使用者輸入於文字檔內,執行本執行檔後,指定之LINE群組全員,將會收到推播訊息
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
從youtube推播的影片延伸找到一些似是而非的影片開始,接著找一些內部、外部的判斷真偽可能方法,簡言之,若沒有相關知識背景,可能就得從講的人是否可信、講的人是否真的講了這些話來判斷。
Thumbnail
前一篇講到看科普影片想說多看一些結果找到一堆真偽難辨的影片。這邊繼續討論歸納一下有什麼辨別的可能性。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
xhr 在下面的例子裡,我們首先建立了一個 XMLHttpRequest 物件,並使用 .open() 開啟一個 URL,最後使用 .send() 發出 request。 具體來說步驟有四個: 建立XMLHttpReque 開啟一個請求。 送出請求。 拿到回應後去處理畫面要如何呈現。
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
Thumbnail
最近碰到個神奇的需求,App啟動時,才要用firebase remoteConfig去決定初始畫面。該文章詳細介紹了在App啟動時如何利用firebase remoteConfig去決定初始畫面,以及解決在推播的情況下造成跳轉無效的問題。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
欲傳送之內容,由使用者輸入於文字檔內,執行本執行檔後,指定之LINE群組全員,將會收到推播訊息