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

Firebase通过POST请求向Android应用主题发送云消息-Google Oauth Playground访问令牌过期

史谦
2023-03-14

背景
我正在尝试通过主题在我的android应用程序中实现推送通知(我的目标用户每次5千)。出于上述目的,我正在使用firebase云消息传递。

我的android应用程序是用firebase安装的,我可以通过firebase web控制台成功发送推送通知(firebase云消息)。(这是测试阶段)

为了使用户友好,我想利用Firebase API并打算开发一个web控制台(基于PHP),从中可以发送这些通知。我需要从那里调用firebase API路由。

目前,我正在使用发送通知消息的邮递员测试Firebase API路由。

API请求经过身份验证,它需要两个身份验证参数

  1. 从Firebase项目获取并在报头中发送的服务器密钥。
  2. 授权承载是从Google Oauth Playground([https://developers.google.com/oauthplayground/][1])创建的访问令牌

我已经成功地验证了API请求,并且邮递员也成功地发送了通知。

问题
从Google Oauth Playground创建的授权承载通常称为访问令牌,过期时间很短(5分钟)。访问令牌最多可以有60分钟的过期时间。

POST请求URL
https://fcm.googleapis.com/v1/projects/fir-notificationsdemo-6996c/messages:发送

标题
内容类型:应用程序/json授权:承载ya29.ElqKBGN2Ri_Uz…HnS_unra

正文(json)

{
 "message" :{
      "topic": "employees",
            "notification" : {
                "title": "Notification: Title of Your Notification",
                "body" : "Notification: Body of Your Notification" , 
                "image": "image url here"              
            }
  } 
}

下面是该POST请求的相应PHP Curl

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://fcm.googleapis.com/v1/projects/fir-notificationsdemo-6996c/messages:send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
 "message" :{
      "topic": "employees",
            "notification" : {
                "title": "Notification: Title of Your Notification",
                "body" : "Notification: Body of Your Notification" , 
                "image": "https://www.imageurl.goeshere/media/2020/10/07.jpg"              
            }
  } 
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer ya29.a0AfH6SMBB.......e8-3'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Oauth游乐场还提供刷新令牌和访问令牌。我需要在访问令牌过期时设置一个机制,刷新令牌用于获取新令牌。或者如果有其他方法可以做到这一点。

谢谢你

注:我没有使用Firebase遗留API,而是使用首选的Firebase HTTP v1 API。旧式API不需要Oauth访问令牌。[1]: https://developers.google.com/oauthplayground/

共有1个答案

田晨
2023-03-14

我在Github上找到了EdwinHoksberg php fcm存储库,达到了这个目的。
Github repo链接:EdwinHoksberg php fcm Github存储库
文档:快速入门文档

GitHub上还有许多其他类似的存储库,它们都可以达到这个目的,但这一个包含了全面的文档。

虽然提到它使用HTTP v1而不是传统的API,但此回购不需要oauth访问密钥。

 类似资料:
  • 我现在已经在我的应用程序中设置了Firebase通知,当我发送消息时,消息会发送给我的应用程序的所有用户。(我目前通过Firebase控制台发送消息。我想用另一种不涉及Firebase控制台的方式发送推送通知,我相信HTTP Post是一种简单的方式。如何使用HTTP POST远程发送推送通知?

  • 我正在尝试为Web设置Firebase云消息传递。我成功地对其进行了正确初始化并获得了令牌: manifest.json与gcm_sender_id 我可以看到我在控制台中得到令牌,所以我试图验证它,并通过邮递员发送我的第一个通知-这里是留档。 发布网址:https://fcm.googleapis.com/v1/projects/PROJECTID/messages:发送授权:无授权 标题 Bo

  • 我试图使用Vapor 1.5和Firebase遗留协议向Firebase Notifications API发出POST请求,但收到失败响应。 编辑通过邮递员发出请求失败,错误为“请求缺少身份验证密钥(FCM令牌)”

  • 我正在研究使用从旧的Google云消息传递应用程序迁移的Firebase云消息传递向项目发送消息的可能性。 旧应用程序仅使用CURL和应用程序在我的服务器上的唯一GCM API密钥从php网页向Android设备发送消息。 因此,每个android设备只需注册代码,例如: 让 Google 服务器使每台设备都可单独寻址。(注册表存储在我的服务器上的MySql数据库中,因此我知道要处理哪个设备。 A

  • 我正在尝试使用Postman通过云消息服务发送一次推送通知。 这是一个用于相同目的的工作命令,我将其用作参考。 到目前为止我所做的。。 1-适当设置标题 2-在Body,我使用 执行时,我返回

  • 我在用Kafka。这是我的代码,在那里我想发送消息到kafka服务器,主题名是“west”,消息是“message1”。我没有收到任何错误,虽然我没有看到我发送的消息在主题中有什么问题吗?