Firebase:使用 REST API 发送通知

问题描述 投票:0回答:9

是否可以在 Firebase 上使用 REST API 发送推送通知?我可以使用 Firebase 控制台发送通知,但我需要使用 REST API 发送通知。

android rest push-notification firebase
9个回答
126
投票

只是为了帮助,

如果有人想使用 REST POST API,就在这里,使用具有以下配置的 Postman

网址:

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

标题:

"Content-Type": "application/json",
"Authorization": "key=<Server_key>"

身体:

{
    "to": "<Device FCM token>",
    "notification": {
      "title": "Check this Mobile (title)",
      "body": "Rich Notification testing (body)",
      "mutable_content": true,
      "sound": "Tri-tone"
      },

   "data": {
    "url": "<url of media image>",
    "dl": "<deeplink action on tap of notification>"
      }
}

就是这样。谢谢!!!

如果您想了解有关 FCM 的丰富通知的更多详细信息,可以查看我在 Medium 上的文章 iOS 平台上使用 Firebase Cloud Messaging (FCM) 和 Pusher 的丰富推送通知


20
投票

我使用下面的 REST API 来发送通知。

curl -X POST \
  https://fcm.googleapis.com/fcm/send \
  -H 'Authorization: key=AAAAG-oB4hk:APA91bFUilE6XqGzlqtr-M-LRl1JisWgEaSDfMZfHuJq3fs7IuvwhjoGM50i0YgU_qayJA8FKk15Uvkuo7SQtQlVt4qdcrrhvnfZyk_8zRGAskzalFUjr2nA2P_2QYNTfK6X8GbY0rni' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: c8af5355-dbf2-4762-9b37-a6b89484cf07' \
  -H 'cache-control: no-cache' \
  -d '{
    "to": "ey_Bl_xs-8o:APA91bERoA5mXVfkzvV6I1I8r1rDXzPjq610twte8SUpsKyCuiz3itcIBgJ7MyGRkjmymhfsceYDV9Ck-__ObFbf0Guy-P_Pa5110vS0Z6cXBH2ThnnPVCg-img4lAEDfRE5I9gd849d",
    "data":{
        "body":"Test Notification !!!",
        "title":"Test Title !!!"
    }

}'

授权:key=AAAAG-oB4hk:APA91bFUilE6XqGzlqtr-M-LRl1JisWgEaSDfMZfHuJq3fs7IuvwhjoGM50i0YgU_qayJA8FKk15Uvkuo7SQtQlVt4qdcrrvnfZyk_8zRGAskzalFUjr2nA2P_2 QYNTfK6X8GbY0rni

其中密钥是来自控制台的web_server_key,您需要指定从应用程序中获取的唯一注册密钥。

enter image description here

to”:“ey_Bl_xs-8o:APA91bERoA5mXVfkzvV6I1I8r1rDXzPjq610twte8SUpsKyCuiz3itcIBgJ7MyGRkjmymhfsceYDV9Ck-__ObFbf0Guy-P_Pa5110vS0Z6cXBH2ThnnPVCg- img4lAEDfRE5I9gd849d”是来自设备的 FCM 注册令牌。请参考以下链接。

https://firebase.google.com/docs/cloud-messaging/android/client?authuser=0


16
投票

这可能会有所帮助 - https://firebase.google.com/docs/cloud-messaging/http-server-ref 您可以在此处找到示例消息 - https://firebase.google.com/docs/cloud-messaging/downstream

从 Firebase 控制台,您可以获取服务器密钥作为授权,您可以将其放入 http 标头的云消息传递选项卡中。


10
投票

试试这个,

网址 - https://fcm.googleapis.com/fcm/send

方法 - 发布

标题

  • 授权 -> key= 服务器密钥,您可以从控制台获取它
  • 内容类型 -> application/json

身体

{
 "to" : "FCM Token goes here",
 "notification" : {
     "body" : "New Lesson Added 1",
     "title": "Lokesh"
 }
}

9
投票

新版本的 API(称为 v1)为通过 ARC 发送消息带来了更多挑战。您需要一个特殊的令牌,该令牌将会过期。您必须在 firebase 控制台中创建 firebase admin sdk 密钥(服务帐户密钥):

Firebase 管理 sdk

它们的密钥以 json 格式存储,如下所示:

 {
  "type": "service_account",
  "project_id": "<your project ID>",
  "private_key_id": "8b..............................37",
  "private_key": "-----BEGIN PRIVATE KEY-----
  MIIE.....
  ....
  -----END PRIVATE KEY-----\n",
  "client_email": "firebase-adminsdk-6fzie@<yourprojectID>.iam.gserviceaccount.com",
  "client_id": "1...................4",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": 
  "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk- 
  6fzie%40<yourprojectID>.iam.gserviceaccount.com"
  } 

该密钥用于在获取http通信的token时识别您的身份。您需要一种对 firebase 的服务器访问权限。我在 WSL 中使用了 python 和这段代码:

import requests
import google.auth.transport.requests

from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/firebase.messaging']

credentials = service_account.Credentials.from_service_account_file('service-account.json', scopes=SCOPES)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
print(credentials.token)

service-account.json 是运行 python 的文件系统上的文件中的私钥。您将获得令牌并可以在 ARC 内使用:

ya29.c.b0Aa9VdylWfrAFWysdUeh3m7cGF-Cow1OAyyE4bEqFL....................48Ye7w

ARC 配置与旧版 API 类似,但有一些变化。 URL 已更改,其中包含您的项目 ID:

https://fcm.googleapis.com/v1/projects/<your project ID>/messages:send

我们仍然使用 POST 方法,并且标头只有一行 Content-Type application/json。身份验证有一个单独的选项卡,我们应该使用 python 中的 Bearer + token:

Firebase 身份验证

选择 Bearer 并启用它非常重要,因为默认情况下它是禁用的。

身体也发生了变化。这是基于应用程序令牌向单个应用程序发送消息的示例:

   {
      "message" : {
        "token" : "e6e....FurF",
        "notification" : {
          "body" : "Great deal!",
          "title" : " Buy everything"
       }
     }
    }

其中关键字“to”已更改为“token”。这就是全部,我们可以将消息发送到应用程序。我希望将它放在这里,以便能够按照 Goggle 目前的要求迁移到 API v1。最后一段代码是用于curl的:-)

curl " https://fcm.googleapis.com/v1/projects/<your project id>/messages:send" \
  -X POST \
  -d "{\r\n  \"message\" : {\r\n    \"token\" : \"e6e....FurF\",\r\n    \"notification\" : {\r\n      \"body\" : \"Great deal!\",\r\n      \"title\" : \" Buy everything\"\r\n   }\r\n }\r\n}" \
  -H "Content-Type: application/json" \
  -H "authorization: Bearer ya29.c.b...."

这是我使用过的来源:

Firebase 云消息传递文档

用于消息传递的 GIT HUB 代码


8
投票

使用 ARC 向 Firebase 控制台发送请求以发送通知 Using ARC For Sending Request to Firebase Console To Send Notification

您可以使用 ARC OR Postman 或您自己的服务器发送通知。 您需要从控制台收集 web_server_key,并且需要指定在调用

onRefreshToken()
方法时从应用程序获取的唯一注册密钥。

您需要将请求发送到 https://fcm.googleapis.com/fcm/send,并使用 Content-Type :jsonAuthorization:web_server_key。 开启 为用户评价您的 app_registration_token 。


3
投票

我们使用以下文档从网络客户端发送通知。

有一种简单的方法可以通过 Chrome 应用程序或扩展程序发送通知。

function sendMessage() {
  var message = {
    messageId: getMessageId(),
    destinationId: senderId + "@gcm.googleapis.com",
    timeToLive: 86400,    // 1 day
    data: {
      "key1": "value1",
      "key2": "value2"
    }
  };
  chrome.gcm.send(message, function(messageId) {
    if (chrome.runtime.lastError) {
      // Some error occurred. Fail gracefully or try to send
      // again.
      return;
    }

3
投票

对于 C# 应用程序(Xamarin.Forms 等),您只需复制以下代码:

 public async static void SendPushToTokenID(string tokenID, string title, string body)
        {

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");

            var url = serverURL;
            client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=" + serverKey);


            var notification = new
            {
                title = title,
                body = body

            };

            var postModel = new
            {
                to = tokenID,
                notification = notification

            };


            var response = await client.PostAsJsonAsync(url, postModel);

            // format result json into object 
            string content = await response.Content.ReadAsStringAsync();
            string xw = (response.Content.ReadAsStringAsync().Result);

        }

对于网址使用:https://fcm.googleapis.com/fcm/send 对于您的服务器密钥,请使用您的 firebase 服务器密钥。这就是全部。只是不要忘记将设备令牌 ID 存储在您的服务器上,然后您就可以全天免费向个人用户发送消息。非常简单。


0
投票

对于新版本的 fcm api v1 Http kotlin 代码获取服务器身份验证密钥

class FcmAccessTokenManager(){

    private val firebaseMessagingScope = "https://www.googleapis.com/auth/firebase.messaging"

    fun getAccessToken(): String? {
     return try {
        val jsonString = """
            //past your firebase service generated key gson content here
        """.trimIndent()

        val stream = ByteArrayInputStream(jsonString.toByteArray(StandardCharsets.UTF_8))
        val googleCredentials = GoogleCredentials.fromStream(stream)
            .createScoped(Lists.newArrayList(firebaseMessagingScope))
        googleCredentials.refresh()
        googleCredentials.accessToken.tokenValue
    } catch (e: IOException) {
        Log.d("access token error", e.localizedMessage ?: "Error occurred")
        null
    }
}}
© www.soinside.com 2019 - 2024. All rights reserved.