我创建了一个类似于Instagram的应用,使用Firebase作为我的后端数据库。该应用程序具有所有功能,即用户可以喜欢你的帖子,评论你的帖子等。但是,现在我被困在通知部分。我已经阅读了一些关于FCM的文档并遵循了一些教程。但是,我找不到任何关于如何创建通知的具体教程,标题为喜欢/评论帖子的人的姓名,以及作为评论内容的消息正文。我是否必须使用PHP和mySQL来完成这一切?或者它可以单独使用JAVA完成?
答案 0 :(得分:4)
没有足够的代表评论,所以我会把它放在这里。
Firebase最近发布了Firebase Functions。
功能集成了Firebase平台,允许您编写响应事件的代码并调用其他Firebase功能公开的功能。
幸运的是,当您的某个用户关注其他用户时发送通知的问题是Firebase功能的示例用例之一。 您可以查看here。
答案 1 :(得分:2)
是的,你需要让app服务器从设备发送通知到另一个。您的应用服务器将具有firebase FCM的API和Firebase数据库的服务帐户。
以下是node.js代码。函数listenForNotifications()是一个附加到您的数据库的侦听器,无论何时您想要发送都可以说跟随请求。在应用程序中单击跟随按钮,您将在“以下”根节点中添加数据库中的条目。然后,当您的移动应用程序添加条目时,request.on(“child_added”..)会因为有条目而被触发。然后,该函数将消息路由到您要通过令牌发送请求的人。即request.requestToToken
“关注”节点的数据库结构:
+--Root
+-.
+--.
+----Following
+---------pushKey /auto-generated
+----------------requestToToken /token of device you want to send notification
+---------------- requestFromToken / token of device that sent the notification
var firebase = require('firebase-admin');
var request = require('request');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.status(200).send('Hello, world!');
});
// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
var API_KEY = ".......your key"; // Your Firebase Cloud Messaging Server API
// Fetch the service account key JSON file contents
var serviceAccount = require("....your database service account.json");
// Initialize the app with a service account, granting admin privileges
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: "https://dropit-b357a.firebaseio.com"
});
ref = firebase.database().ref();
process.stdout.write("I AM HERE... SERVER RUNNING MAYBE: ");
function listenForNotificationRequests() {
var requests = ref.child('Following');
requests.on('child_added', function(requestSnapshot) {
var request = requestSnapshot.val();
sendNotificationToUser(
request.requestToToken,
request.requestFrom,
function() {
return;
}
);
}, function(error) {
console.error(error);
});
};
function sendNotificationToUser(username, message, onSuccess) {
request({
url: 'https://fcm.googleapis.com/fcm/send',
method: 'POST',
headers: {
'Content-Type' :' application/json',
'Authorization': 'key='+API_KEY
},
body: JSON.stringify({
notification: {
title: message
},
to : username
})
}, function(error, response, body) {
if (error) { console.error(error); }
else if (response.statusCode >= 400) {
console.error('HTTP Error: '+response.statusCode+' '+response.statusMessage);
}
else {
onSuccess();
}
});
}
// start listening
listenForNotificationRequests();