Я пытаюсь создать проект Android, который может отправлять уведомления с одного устройства Android на другое. Для этого я создал файл node.js, он отлично работает на локальном сервере. Но когда я разместил его на Google Cloud Platform, он показывает страницу не найдена. Невозможно вызвать функцию Google с хостинга. Он ищет или выполняет index.html, но должен выполнить index.js, который находится в каталоге функций, который был создан при инициализации проекта с помощью Firebase.
Я взял ссылку из этого видео: https://youtu.be/pnysHgQvOiM?list=PLk7v1Z2rk4hjM2NPKqtWQ_ndCuoqUj5Hh
index.js file
const functions = require('firebase-functions');
var {google} = require('googleapis')
var MESSAGING_SCOPE ="https://www.googleapis.com/auth/firebase.messaging"
var SCOPES = [MESSAGING_SCOPE]
var express = require('express')
var app = express();
var bodyParser = require('body-parser');
var router = express.Router();
var request = require('request');
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
router.post('/send',function(req,res){
getAccessToken().then(function(access_token){
var title = req.body.title;
var body = req.body.body;
var token = req.body.token;
request.post({
headers:{
Authorization: 'Bearer '+ access_token
}, url:
"https://fcm.googleapis.com/v1/projects/my_project_name/messages:send",
body: JSON.stringify(
{
"message":{
"token" : token,
"notification" : {
"body" : body,
"title" : title
}
}
}
)
},function(error,reponse,body){
res.end(body);
console.log(body);
});
});
});
app.use('/api',router);
function getAccessToken()
{
return new Promise(function(resolve,reject){
var key= require("./service-account.json");
var jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(error,tokens){
if(error)
{
reject(error)
}
resolve(tokens.access_token)
// console.log(tokens.access_token)
});
jwtClient.authorize(function(error,tokens){
if(error)
{
reject(error)
}
resolve(tokens.access_token)
console.log(tokens.access_token)
});
});
}
exports.api = functions.https.onRequest(app);
firebase.json
{
"hosting":
{
"public": "public",
"rewrites": [
{
"source": "/api/send",
"functions": "api"
}
],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Этот код работает нормально с использованием http://localhost:8085/api/send, но не работает как https://my_project_name.firebaseapp.com/api/send