使用 Firebase 消息通过 Postman 发送推送

Posted

技术标签:

【中文标题】使用 Firebase 消息通过 Postman 发送推送【英文标题】:Sending Push via Postman using Firebase Messaging 【发布时间】:2016-12-14 12:18:30 【问题描述】:

我正在尝试使用Postman 通过Firebase 云消息服务发送单个推送通知。

这是用于同一目的的有效cURL 命令,我将其用作参考。

curl -X POST --header "Authorization: key=<API_ACCESS_KEY>" --Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "\"to\":\"<YOUR_DEVICE_ID_TOKEN>\",\"notification\":\"body\":\"Firebase\" \"priority":\"10""

到目前为止我做了什么..

1 - 适当设置标题

2- 在 Body ,我使用的是raw


    "to" : "<YOUR_DEVICE_ID_TOKEN>"
    , 

    "notification": 
    "body": "Firebase Cloud Message"
  

  

执行时,我会返回401 - Unauthorized

正确发送推送通知缺少什么?

【问题讨论】:

"multicast_id": 4790719999662534961, "success": 0, "failure": 1, "canonical_ids": 0, "results": [ "error": "InvalidRegistration" ] 这个错误 这篇文章对你有帮助:medium.com/android-school/… 这个答案可以提供帮助:***.com/a/62670409/1151916 你可以在这篇文章中找到,how to fcm send push notifications with postman via firebase messaging API 【参考方案1】:

在Header处设置Authorization键的正确方法是

key=&lt;API_ACCESS_KEY&gt;

不仅如此

&lt;API_ACCESS_KEY&gt;

愚蠢的错误,但由于这对于使用 Postman 测试 Firebase 消息传递的人可能有用,所以我将问题悬而未决。

【讨论】:

我明白了,你已经有 --header "Authorization: key=&lt;API_ACCESS_KEY&gt; 卷曲和邮递员错误的标题。【参考方案2】:

通过 POSTMAN 发布 FCM

Body - to 是token id(应该通过instance token 生成) 在原始二进制应用程序/json中写入正文


   "to": "cpa8cZPjq-w:APA91bF122f1Rnhu9v47bL
   YMajaNTHAIU5SzItDwTy9o2MCIveG0PlK78VPvp3d
   CqjwnUKZ4
   ngi1trSyM3_aXttW62iknFfbPGtjRLhZr6wq-3qFdboz8gzdOGPz**********",

   "notification": 

    "body": "Hello",
    "title": "This is test message."
   
   

header:应该有授权:服务器密钥

内容类型:应用程序/json 在此处发布成功消息后:

【讨论】:

如何获取token?有 API 吗? 阅读 firebase android 开发者文档 我得到了 sucess=1 但在移动设备上没有收到通知 phpdroid,您需要检查完整的正文,消息正在传递到您的手机,但它无法选择正文 如何发送给所有安装了应用的用户,而不是发送到主题?【参考方案3】:

打开Postman,点击Enter request URL文本框,输入firebase url

https://fcm.googleapis.com/fcm/send

比将请求类型更改为POST。看下面的截图:

现在点击标题并添加两个paramsContent-TypeAuthorization

Content-Type= application/json
Authorization=AIzaSyAEb3NhsfGw1ih5mn8cmrGUAXMp86waQ //FCM SERVER KEY

见下图:

现在点击Body而不是选择Row并添加值作为对象,如下所示

 
"to":"eB5papU2Xdc:APA91bFFvc3dXru1fN5JY8U19oHIpfGhPUx7Ll7v9vJYTsIGZ15mDwB2Wpep3flLK85IUqqs2WqJwjYHSDYX28oJ1wTP0R2TDc2ba_uVjUauDcp3pCNKr_0KlghOnS", 
 "notification" : 
 "body" : "New announcement assigned",
 "OrganizationId":"2",
 "content_available" : true,
 "priority" : "high",
 "subtitle":"Elementary School",
 "Title":"hello"
 ,
 "data" : 
 "priority" : "high",
 "sound":"app_sound.wav",
 "content_available" : true,
 "bodyText" : "New Announcement assigned",
 "organization" :"Elementary school"


现在你的邮递员应该是这样的。点击右上角的发送按钮。

祝你好运!

【讨论】:

谢谢,但目前它在 html 中显示错误:“Invalid (legacy) Server-key Delivered or Sender is not authorized to perform request.”。 如果您使用云消息设置中的服务器密钥或旧服务器密钥(从“AAAA”或“Alza”开始),则此方法有效。 这仅发送到给定的令牌。如何从邮递员将其发送给所有用户? 这就像一个魅力,并立即发送通知。应该改变的是 Title 到 title ! 这对我有用。谢谢....【参考方案4】:

对于新的 FCM HTTP v1 API,通过 Postman 测试推送通知的方法发生了变化,现有解决方案仅解决了测试推送通知的旧方法:https://firebase.google.com/docs/cloud-messaging/send-message

要使用 FCM HTTP v1 API 在 Postman 上进行测试,您需要先获取一个短期 Oauth 2 令牌。您可以在此处根据 Firebase 站点上的信息生成一个:https://firebase.google.com/docs/cloud-messaging/auth-server

我使用以下代码使用 Python 生成了我的 - 请记住 pip 安装包,以便您可以成功地将包导入到代码中:

from oauth2client.service_account import ServiceAccountCredentials

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', FCM_SCOPE)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

获得令牌后,您可以在授权下将其插入您的邮递员:

重要提示:

在我的例子中,我尝试测试一个计划任务,该任务将每隔几分钟向 FCM 发送一次推送通知,因此我很难让它工作。 我已将令牌打印到日志中,然后将该令牌交给我的邮递员进行测试,但没有意识到它已在预定的 FCM 调用中使用。

在这种情况下,因为它已经被使用,令牌将不再有效,我的邮递员测试都失败了。在这种情况下,您需要为 Postman 测试生成新的令牌。

【讨论】:

我收到此响应,但没有收到 Android 应用程序的通知。有什么想法吗?【参考方案5】:

看下面的截图授权密钥是如何设置的

授权:**key=**abcdefghijklmnopr2qrst253uv124wxyz_9shg

【讨论】:

【参考方案6】:

发布

https://fcm.googleapis.com/fcm/send

标题

Content-Type : application/json 
Authorization : key=your_server_key

身体

 
    "to" : "your_token",
    "priority": "high",
    "notification": 
        "title": "Title",
        "body" : "First Notification",
        "text": "Text"
    

【讨论】:

这个方法允许它发送到指定的token。我们如何发送给所有用户?【参考方案7】:

你检查了吗:Test FCM Notification with POSTMAN!

使用带有 POSTMAN 的 HTTP 协议发送数据消息

您必须从 Firebase 控制台 > 项目设置 > 云消息传递复制旧版服务器密钥

注意:Firebase 已将我们的服务器密钥升级到新版本。你可以 继续使用您的旧服务器密钥,但建议您 升级到最新版本。

选择 POST。输入请求地址为https://fcm.googleapis.com/fcm/send

添加标头授权:key=&lt;legacy_server_key&gt;Authorization: key=&lt;server_key&gt;Content-Type: application/json.

现在选择 Body > raw > JSON (application/json) 并添加以下代码:

    
         "to" : "YOUR_FCM_TOKEN_WILL_BE_HERE",
         "collapse_key" : "type_a",
         "notification" : 
             "body" : "Body of Your Notification",
             "title": "Title of Your Notification"
         ,
         "data" : 
             "body" : "Body of Your Notification in Data",
             "title": "Title of Your Notification in Title",
             "key_1" : "Value for key_1",
             "key_2" : "Value for key_2"
         
    

我已经为你创建了 POSTMAN 收藏,Run in Postman directly.

希望对你有帮助。

【讨论】:

谢谢!至少,它显示了比“无效(旧)服务器密钥...”更合适的错误。 如果您使用云消息设置中的服务器密钥或旧服务器密钥(从“AAAA”或“Alza”开始),则此方法有效。 通知和数据对象有什么区别?你为什么同时使用这两个?【参考方案8】:
POST https://fcm.googleapis.com/v1/projects/projectID/messages:send

标题

Authorization:Bearer ya29.c.ElrXBjdxUzOI................o7_Y2shX2Je4tEe0

正文

  
      "message": 
        "token": "dlqj05MCnNI:APA91bGhCX6NhT.................QDpKhGheHyhhJ6T",
        "android": 
          "notification": 
            "title": "New Content!",
            "body": "A new video has been uploaded.",
            "icon": "your_icon"
          
        
      
    

【讨论】:

您从哪里获得此 Bearer 令牌?如果我获取服务器密钥,FCM 会抛出 401 此令牌由 Firebase Admin SDK 生成。【参考方案9】:

发送FCM throw Postman的步骤:

    要发送的 URL: https://fcm.googleapis.com/v1/projects/projectid-34543/messages:send 请求类型:POST 标题:内容类型 -> 应用程序/json & 授权 -> 承载 在正文部分输入 APS 有效载荷 正确的设备令牌。 点击发送。

更多信息在这里:https://***.com/a/62670409/1151916

【讨论】:

【参考方案10】:

一定要包含 content-type : application/json header

如果您不包含内容类型标头,它会失败并出现误导性错误: 错误=缺少注册

【讨论】:

【参考方案11】:

如果您想将通知发送到多个设备,您应该在正文中使用“registration_ids”而不是“to”;

  
    "registration_ids":[
"somethingTokens7234134143",
"somethingTokens3452343185"
], 

     "notification" : 
     "body" : "New announcement assigned",
     "content_available" : true,
     "priority" : "high",
     "subtitle":"Elementary School",
     "Title":"hello"
     ,
     "data" : 
     "priority" : "high",
     "sound":"app_sound.wav",
     "content_available" : true,
     "bodyText" : "New Announcement assigned",
     "organization" :"Elementary school"
    
    

【讨论】:

【参考方案12】:

什么是服务器密钥?我使用(在上面的图片中)服务器密钥和旧服务器密钥,但它们都不起作用。

有人知道出了什么问题吗?对于令牌-> 我使用了从 firebase 消息中获得的 FCM 令牌,如下所示:

firestoreMessaging.getToken()

【讨论】:

我想,你有正确的标题,但可能 Firebase 项目的配置没有完成。您是否添加了 Android 或 ios 应用程序? 您还应该在您的 Android 应用程序中检查 google-services.json。您需要从 Firebase 控制台下载并粘贴到 Android 应用程序中,然后在设备上运行。 这个答案是你的问题:***.com/questions/56723045/…。

以上是关于使用 Firebase 消息通过 Postman 发送推送的主要内容,如果未能解决你的问题,请参考以下文章

无法读取邮递员的 Firebase 通知

Postman - Firebase 通知 ios

使用 Firebase 云消息传递,还是让应用通过 API 请求事件和触发通知?

是否可以通过 Firebase 云消息传递中断级别(iOS)?

通过 firebase 云消息检查设备是不是离线

iOS Swift 使用 Firebase 云消息发送丰富的推送通知