Android Firebase实时数据库触发推送通知

时间:2017-03-12 14:11:15

标签: android firebase firebase-cloud-messaging

我创建了一个类似于Instagram的应用,使用Firebase作为我的后端数据库。该应用程序具有所有功能,即用户可以喜欢你的帖子,评论你的帖子等。但是,现在我被困在通知部分。我已经阅读了一些关于FCM的文档并遵循了一些教程。但是,我找不到任何关于如何创建通知的具体教程,标题为喜欢/评论帖子的人的姓名,以及作为评论内容的消息正文。我是否必须使用PHP和mySQL来完成这一切?或者它可以单独使用JAVA完成?

2 个答案:

答案 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();