我有一台运行网站的服务器。我需要此服务器才能管理(仅下游)通知三个独立的设备组,Android,iOS和客户端Web应用程序。
我正在尝试使用firebase云消息传递。 使用FCM,我计划使用http协议发送json消息。
除此之外,我对去哪儿很困惑。我知道GCM教程应该与FCM教程完全相同,但是我很难找到教程来弄清楚我需要做什么,因为每个教程似乎将服务器和客户端应用程序混合在一起,令我困惑。
我经历过
https://firebase.google.com/docs/cloud-messaging/server#choose
非常彻底,但它似乎掩盖了我还没有的一些必要知识。任何人都可以建议如何以我正在寻找的方式实施FCM的良好起点?我对Web开发人员来说非常新,不到2个月,(使用node,mongo和scss)并且对如何开始使用FCM感到有些不知所措。
我感谢你们提供的任何反馈。
答案 0 :(得分:7)
正如您所写,您计划在Android,iOS和客户端Web应用程序的所有三个平台上收到通知。 您可以使用firebase获取实时通知或所需的数据,但您必须牢记这一点,即每个人都有一个不同的过程来实现这一目标。 首先,您必须选择任何一个并开始实施。 让我们从开始......
开始将firebase用于应用程序以在https://console.firebase.google.com/创建项目的常见过程。
创建项目后,您将能够看到将在您的应用程序中使用的firebase密钥。您可以在https://console.firebase.google.com/project/project-[your_project_number]/overview找到此信息。
我希望您已经完成此操作,但请勿忘记在https://console.firebase.google.com/project/project-[your_project_number]/database/rules和https://console.firebase.google.com/project/project-[your_project_number]/storage/rules授予数据库和存储空间权限。
对于数据库,请留下这个......
{
"rules": {
".read": true,
".write": true
}
}
对于存储,请留下这个......
service firebase.storage {
match /b/project-[your_project_number].appspot.com/o {
match /{allPaths=**} {
allow read, write;
}
}
}
它将定义您可以公开使用它,无需在firebase端进行任何验证。如果您想添加任何类型的验证,可以查看https://console.firebase.google.com/project/project-[your_project_number]/authentication/providers。
现在从SERVER到WEB APPLICATION通知开始。首先,我想告诉您FCM(firebase云消息传递)只能通过Android,iOS和Web(指定的Google Chrome)实现。因此,要在所有浏览器上使用它,我们必须实现firebase数据库。 在js方面。你必须在“概述”中提供类似的内容。
<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "your_api_key",
authDomain: "project-[your_project_number].firebaseapp.com",
databaseURL: "https://project-[your_project_number].firebaseio.com",
storageBucket: "project-[your_project_number].appspot.com",
};
firebase.initializeApp(config);
</script>
在服务器端,用于触发事件或通知,您可以使用CURL。正如您所提到的那样,您正在使用Node.js,因此https://firebase.google.com/docs/server/setup#add_firebase_to_your_app可以帮助您。 我通过使用CodeIgniter在PHP服务器端应用CURL来实现它。我附上下面的代码。您可以在此处查看CURL示例https://firebase.google.com/docs/database/rest/save-data#section-put
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
//PHP CURL FOR NOTIFICATION
function booking_notification($notif_arr, $notif_type)
{
//GET CI
$CI =& get_instance();
$url = 'put_your_firebase_database_url_here';
$key = 'put_firebase_key';
$notif_arr = {'Key':'values'};//THIS IS THE DATA WHAT YOU WILL NEED TO SHOW ON FRONT END TO NOTIFY
$notif_type = 'notification'; //THIS IS THE NAME JSON WHICH WILL BE CREATED IF NOT EXIST AT FIREBASE DATABASE
$headers = array(
'Authorization: key=' . $key,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url."/".$notif_type.".json");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notif_arr));
// Execute post
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
// Close connection
curl_close($ch);
return FALSE;
}
else
{
// Close connection
curl_close($ch);
return TRUE;
}
}
现在让我们看看如何从服务器端触发通知。
JAVASCRIPT
var fireBaseJSONref = firebase.database().ref().child("notification"); //BY THIS YOU CAN GET THE JSON OF FIREBASE DATABASE
fireBaseJSONref.on('child_added', function(snapshot) {
if (!ignoreItems) {
console.log(snapshot.val());//THIS WILL PRINT THE DATA WHAT YOU HAVE TRIGGERD FROM SERVER
}
});
/* WHEN FIRST TIME ANY DATA SENT TO DATABASE OF FIREBASE AFTER PAGE LOAD */
fireBaseJSONref.once('value', function(snapshot) {ignoreItems = false}); //THIS WILL HELP YOU TO NOT TO CALL FOR PREVIOUSLY ADDED ITEM IN FIREBASE DATABASE. WHEN NEW DATA WILL BE ONLY THEN IT WILL CALL.
这将帮助您找出您困惑的地方。让我知道这是否适合你,我也会为Android和iOS改进它。