【发布时间】:2017-02-18 07:36:54
【问题描述】:
我使用 Lambda 到 Firebase 消息。我参考this。但是 lambda 函数仍然超时,因为它无法连接到谷歌服务器。
Handler.js
/ [START imports]
const firebase = require('firebase-admin');
const serviceAccount = require("../serviceAccount.json");
module.exports.message = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
const registrationToken = "xxxxxxx";
const payload = {
data: {
score: "850",
time: "2:45"
}
};
// [START initialize]
if(firebase.apps.length == 0) { // <---Important!!! In lambda, it will cause double initialization.
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: 'https://messaging-xxxxx.firebaseio.com'
});
}
// Send a message to the device corresponding to the provided
// registration token.
firebase.messaging().sendToDevice(registrationToken, payload)
.then(function(response) {
// See the MessagingDevicesResponse reference documentation for
// the contents of response.
console.log("Successfully sent message:", response);
callback(null, {
statusCode: 200,
body: JSON.stringify("Successful!"),
});
})
.catch(function(error) {
console.log("Error sending message:", error);
callback(null, {
statusCode: 500,
body: JSON.stringify({
"status": "error",
"message": error
})
})
});
};
云观察
[错误:通过“credential”属性提供给 initializeApp() 的凭据实现未能获取有效的 Google OAuth2 访问令牌,并出现以下错误:“connect ETIMEDOUT 172.217.26.45:443”。]
但我使用相同的 serviceAccount.json 在我的 ec2 上运行并找到工作。 有人遇到过吗?
【问题讨论】:
-
您是如何添加您的
serviceAccount.json文件的?我假设你上传了一个 zip 到 Lambda,它不仅仅是内联代码? -
@Deif 我使用无服务器上传我的 serviceAccount.json 文件。
-
@jacobawenger 谢谢你的链接。你给了我正确的方向!
标签: amazon-web-services firebase aws-lambda firebase-cloud-messaging firebase-admin