Как выполнить облачные функции Google с хостинга Firebase? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать проект 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...