当前位置: 首页 > 知识库问答 >
问题:

在Web服务器上实现Firebase云消息传递

佴博实
2023-03-14

我有一个运行网站的服务器。我需要此服务器能够管理(仅下游)通知到三个独立的设备组,Android,iOS和客户端Web应用程序

我试图使用Firebase云消息传递。对于FCM,我计划使用超文本传输协议来发送json消息。

除此之外,我还很困惑该去哪里。我知道GCM教程应该与FCM教程完全相同,但我很难找到一个教程来确定我需要做什么,因为每个教程似乎都将服务器端和客户端应用程序混合在一起,这让我很困惑。

我经历过

https://firebase.google.com/docs/cloud-messaging/server#choose

相当彻底,但它似乎掩盖了一些必要的知识,我还没有。有谁能建议一个好的起点,如何以我所寻找的方式实施FCM?总体而言,我对web开发非常陌生,不到2个月(使用node、mongo和scss),对如何开始使用FCM感到有些不知所措。

我很感激你们能提供的任何反馈。

共有1个答案

咸正平
2023-03-14

正如您所写的,您计划在android、iOS和客户端web应用程序这三个平台上获取通知。您可以使用firebase获得实时通知或所需的数据,这很好,但您必须记住,每一个都有一点不同的过程来实现这一点。首先,您必须选择其中任何一个并开始实施。让我们从头开始。。。

用于在应用程序中使用Firebase以https://console.firebase.google.com/创建项目的通用流程。

创建项目后,您将能够看到将在应用程序中使用的firebase密钥。你可以在https://console.firebase.google.com/project/project-[您的项目编号]/概述。

我希望您已经这样做了,但不要忘记在https://console.firebase.google.com/project/project-[您的项目编号]/数据库/规则和https://console.firebase.google.com/project/project-[您的项目编号]/存储/规则。

对于数据库,请留下此。。。

{
  "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-[您的项目编号]/身份验证/提供者。

现在从服务器到WEB应用程序通知开始。首先,我想让你知道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可以帮助你。我已经实现了通过应用CURL在服务器端的PHP与CodeIgniter。我附上下面的代码。您可以在这里看到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上改进它。

 类似资料:
  • 我已经从Firebase中导入的Google项目中删除了名为Server key(由Google Service自动创建)的api密钥。 现在,项目设置中的字段服务器密钥-云消息传递为空。我也不能发送通知,我从服务器上得到一个未经授权的401错误。 我能做什么?

  • 我目前正在开发一个Android应用程序,我想包括Firebase云消息传递。我计划让树莓派每5分钟左右检查一个网站,并在发生变化时发送推送通知。在官方留档中,他们说我需要一个应用服务器才能通过Firebase发送消息。 这是否意味着我需要让我的Raspi全天候作为服务器运行,并且需要一个静态的IP/域?还是让我的Raspi通过Api(https://fcm.googleapis.com/fcm/

  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 我们正在使用城市飞艇向我们的Android应用程序发送推送消息。 在此过程中,我们需要使用Firebase控制台中提供的“服务器密钥”配置飞艇- 根据那里的建议,我们正在尝试从GCM迁移到FCM。 问题是“Firebase Cloud Messaging API(V1)”配置中缺少“服务器密钥”。它在“云消息传递API(遗留)”配置中仍然可用,但建议进行迁移。 遵循FCM配置中的链接对这个问题没有

  • 是否有任何API(Python、JS、...)可用于生成和检索Firebase云消息传递服务器令牌? 最终目标应与单击“项目设置”中的“添加服务器密钥”按钮相同。