在 PHP 中设置通知的 FCM 通道 ID

2024-05-10

我正在尝试使用 PHP 向 Android 设备发送 FCM 通知。我的代码适用于 Android O 之前的设备。

在Android O中,我们还需要在请求中设置通道ID来接收通知,我不知道该怎么做。

我已在应用程序中完成了必要的设置,并使用 Firebase 控制台我可以收到通知,但当我尝试通过 PHP 脚本发送通知时,通知失败。

我还查看了下面的链接,但它对我不起作用。

Android FCM定义通道ID并通过PHP向该通道发送通知 https://stackoverflow.com/questions/54246893/android-fcm-define-channel-id-and-send-notification-to-this-channel-through-php

我的 PHP 代码:

    $notification = new Notification();
    $notification->setTitle("startSession");
    $notification->setBody($_POST['child_id']);
    $notification->setNotificationChannel('my_channel_id');
    $requestData = $notification->getNotification();

    $firebase_token = $_POST['token'];
    $firebase_api = 'my_value';
    $fields = array(
                     'to' => $firebase_token,
                     'data' => $requestData,
                   );
    $url = 'https://fcm.googleapis.com/fcm/send';

    $headers = array(
        'Authorization: key=' . $firebase_api,
        'Content-Type: application/json'
    );
    $ch = curl_init();
    // Set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    // Execute post
    $result = curl_exec($ch);

    if($result === FALSE){

        die('Curl failed: ' . curl_error($ch));
        $return_obj = array('responseCode'=>'0' , 'responseMsg'=> 'Error inserting, please try 
         again.', 'errorCode'=>'1');
    }else{
        $return_obj = array('responseCode'=>'1' , 'responseMsg'=> 'Successfully inserted.', 
        'errorCode'=>'0');
    }

    // Close connection
    echo json_encode($return_obj);
    curl_close($ch);

我的通知类代码是:

<?php
class Notification{
    private $title;
    private $body;
    private $answer_value;
    private $android_channel_id;


    function __construct(){

    }

    public function setTitle($title){
        $this->title = $title;
    }

    public function setBody($body){
        $this->body = $body;
    }

    public function setAnswer($answer){
        $this->answer_value = $answer;
    }

    public function setNotificationChannel($channel){
        $this->android_channel_id = $channel;
    }


    public function getNotificatin(){
        $notification = array();
        $notification['title'] = $this->title;
        $notification['body'] = $this->body;
        $notification['answer'] = $this->answer_value;
        $notification['android_channel_id'] = $this->android_channel_id;

        return $notification;
    }
}
?>

我确信语法是正确的,因为通知仍然适用于 Android

任何帮助将不胜感激。谢谢!


您可以在服务器端 PHP 设置频道 ID

PHP服务器端

<?php
  function Notify($title,$body,$target,$chid)
   {

    define( 'API_ACCESS_KEY', 'enter here your API Key' );

  $fcmMsg = array(
    'title' => $title,
    'body' => $body,
    'channelId' => $chid,

  );
  $fcmFields = array(
    'to' => $target, //tokens sending for notification
    'notification' => $fcmMsg,

  );

  $headers = array(
    'Authorization: key=' . API_ACCESS_KEY,
    'Content-Type: application/json'
  );

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fcmFields ) );
$result = curl_exec($ch );
curl_close( $ch );
echo $result . "\n\n";

}

?>

我定义函数Notify有 4 个参数title,body,target,chid要使用它,只需调用该函数并定义其参数,

您必须在客户端(Android 部分)添加您的channelId,并使用 out channelId 您无法在 Android 8.0 及更高版本中收到通知

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中设置通知的 FCM 通道 ID 的相关文章

随机推荐

  • 如何在一行中输出多个变量

    我试图确定 CSV 中的用户是否处于活动状态 此外 我想知道它们是否是服务帐户 用户帐户或基于 OU 的计算机帐户 一切都在膨胀 直到我尝试输出它 输出分为几行 每个变量一行 我希望输出在一行上 中间有逗号 这样我完成后就会有一个 CSV
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • 如何从 IOS 应用程序中的自定义捆绑包加载故事板文件?

    我有一个 ios 应用程序 我正在修改它 以便它可以作为静态库简单地插入到一系列其他应用程序中 但是 我还需要拥有所有相应的资源 因此我创建了一个自定义捆绑包来包含这些资源 该捆绑包包括所有选项卡栏图像 可本地化字符串 默认图像 以及对于这
  • 使用正则表达式解析日志文件

    我目前正在为我们的内部日志文件 由 log4php log4net 和 log4j 生成 开发一个解析器 到目前为止 我有一个很好的正则表达式来解析日志 除了一个烦人的一点 一些日志消息跨越多行 我无法正确匹配 我现在的正则表达式是这样的
  • facebook og:image 不会从与 URL 相呼应的 php 文件中获取图像

    facebook OG 从回显 URL 获取图像 这可能吗 因为我包含了一个 php 文件 它将回显图像 URL 但是当我签入共享调试器时 内容为空 我的元标签 gt 和 php 文件
  • 没有设备的设备驱动程序?

    我正在创建一个需要使用一些内核级模块的应用程序 为此我将应用程序分为 2 个 一个用户级程序和一个内核级程序 在阅读了有关设备驱动程序并浏览一些教程后 我有点困惑 是否可以存在没有任何特定设备与之关联的设备驱动程序 除了设备驱动程序 内核代
  • google.maps.Geocoder.geocode() Geometry.location lat/lng 属性名称经常更改

    我有一个应用程序 我正在使用 Google Javascript 地理编码 API 来获取地址的纬度 经度 代码是这样的 geocoder new google maps Geocoder geocoder geocode address
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • 作为服务运行时未找到 PowerShell 模块

    我有一个项目 我将 Office 365 许可证分配给用户 有一个 Web 项目允许管理员查看可用许可证并为用户选择许可证 在后台 有一项服务每 15 分钟执行一次实际的许可证分配 以及许多其他任务 我们不直接分配许可证的原因是用户可能尚未
  • 我们什么时候应该在.NET中使用NativeMemory.Alloc()? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 NET6 C 引入NativeMemory类 但我不知道什么时候应该使用NativeMemory Alloc 而不是普通的数组实例化
  • 这可能是因为 cuDNN 初始化失败,因此请尝试查看上面是否打印了警告日志消息。 [操作:Conv2D]

    我在 anaconda 中安装了 TensorFlow GPU 2 0 当我安装它并导入包 然后运行我的 CNN 模型时 它工作正常 但当我尝试运行训练模型时 出现错误 这是我的错误报告 Epoch 1 50 UnknownError Tr
  • .class 与 .java

    class 文件和 java 文件有什么区别 我正在尝试让我的小程序工作 但目前我只能在 Eclipse 中运行它 还不能嵌入 HTML 谢谢 编辑 那么如何使用 JVM 进行编译呢 class 文件是编译后的 java 文件 java 都
  • Android - 测试另一个活动是否已开始

    我正在尝试测试以下场景 在自动完成文本视图中输入一个字母 向下滚动并选择其中一个选项 然后单击一个按钮 单击按钮将启动一个新活动 我想检查新活动是否已经开始 这是测试方法 public void testSpinnerUI mActivit
  • Android 上的 Jetty 上的 Jersey 抛出 ContainerException:“不存在 WebApplication 提供程序”

    我正在尝试在 Android 上的 Jetty 上运行 Jersey 我创建了一个 Android 它使用 Jersey Servlet 实例化 Jetty 服务器 无论如何 当我启动 Jetty 并访问 REST 资源时 在我的例子中 h
  • 将 DIV 转换为单击并拖动视口

    有人知道一种不显眼的 基于原型或无框架的方法将具有大内容 例如地图 的 DIV 转换为具有固定尺寸的可点击和可拖动的 地图 容器 非常像 Google 地图 我想在大型输入表单中显示 HTML 块 这些块可能会超出可用空间 每个块可以有大约
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • Pandas,按最大返回值进行分组 AssertionError:

    熊猫有问题 我想听听你的意见 我有这个数据框 我需要在其中获取最大值 代码就在下面 df stack pd DataFrame 1 0 2016 0 NonResidential Hotel 98101 0 DOWNTOWN 47 6122
  • 自动 IIS6 403.4 重定向到 SSL 不起作用

    我的 ASP Net 网站中有一个目录需要启用 SSL 对于所有其他目录 我不希望启用 SSL 使用 IIS 我为我想要需要 SSL 的文件夹选中了 需要安全通道 SS 和 128 位加密复选框 现在 当用户在我的安全目录中输入 http
  • 在 PHP 中设置通知的 FCM 通道 ID

    我正在尝试使用 PHP 向 Android 设备发送 FCM 通知 我的代码适用于 Android O 之前的设备 在Android O中 我们还需要在请求中设置通道ID来接收通知 我不知道该怎么做 我已在应用程序中完成了必要的设置 并使用