2017-03-12 41 views
-2

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

+0

juat 5次点击,并在代码变化不大需要安装FCM。我建议你再次检查网站的步骤设置说明 –

回答

4

没有足够的代表评论,所以我会把它放在这里。

最近Firebase发布了Firebase Functions

函数通过让您编写响应事件并调用其他Firebase功能提供的功能的代码来集成Firebase平台。

幸运的是,当您的某个用户关注其他用户时发送通知的问题是Firebase函数的示例用例之一。 你可以看看here

+0

谢谢弗兰克 – TrueKojo

+0

谢谢TrueKojo!我已经使用云功能成功实施了追随者推送通知。但是,您是否有任何想法在一台设备上为不同的用户生成不同的令牌? – Henry

+0

我必须进行调查。我的第一个想法是使用Firebase身份验证流程中用户的唯一ID。 – TrueKojo

2

是的,您需要制作应用服务器才能将设备通知发送给其他设备。您的应用服务器将拥有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(); 
+1

* firebaser here *我们刚刚发布了[适用于Firebase的云功能](https://firebase.google.com/docs/functions),它可以扮演应用服务器的角色。看看这个示例:https://github.com/firebase/functions-samples/tree/master/fcm-notifications。 –

+0

感谢Omair的回答。但是,我选择使用云功能来执行相同的操作,并且更容易! – Henry

相关问题