【问题标题】:Sending Push via Postman using Firebase Messaging使用 Firebase 消息通过 Postman 发送推送
【发布时间】: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。

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

【问题讨论】:

标签: curl firebase postman firebase-cloud-messaging


【解决方案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-Type和Authorization。

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的步骤:

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

    更多信息在这里:https://stackoverflow.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 应用程序中,然后在设备上运行。
          • 这个答案是你的问题:stackoverflow.com/questions/56723045/…。
          猜你喜欢
          • 2016-09-21
          • 2020-06-05
          • 2021-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-04
          相关资源
          最近更新 更多