向后台应用发送您的第一条消息

要开始使用 FCM,可构建最简单的使用情形:当应用在设备后台运行时,向某位特定用户的设备发送一条通知消息。本页面列出了实现上述目标所需的从设置到验证的所有步骤。如果您已针对 FCM 设置了 JavaScript 客户端应用,则这些步骤中可能也包括您已经完成的步骤。

设置 SDK

如果您尚未将 Firebase 添加到您的 JavaScript 项目,请先添加。

申请接收通知的权限

messaging.requestPermission() 方法可显示一个征询用户同意的对话框,让用户在浏览器中向您的应用授予接收通知的权限。如果权限被拒绝,FCM 注册令牌请求会导致错误。

messaging.requestPermission().then(function() {
  console.log('Notification permission granted.');
  // TODO(developer): Retrieve an Instance ID token for use with FCM.
  // ...
}).catch(function(err) {
  console.log('Unable to get permission to notify.', err);
});

获取注册令牌

本部分介绍如何检索应用实例的注册令牌以及如何监控令牌刷新事件。因为令牌可能会在初次启用后发生轮替,所以您应该监控令牌刷新并始终检索最新更新的注册令牌。

注册令牌可能会在发生下列情况时更改:

  • 网页应用删除注册令牌时。
  • 用户清除浏览器数据时。在这种情况下,调用 getToken 可检索新令牌。

检索当前的注册令牌

如果需要检索当前令牌,请调用 getToken。 当尚未获得授权时,此方法返回 null。在其他情况下,它会返回一个令牌,或由于出现错误而拒绝该 Promise。

  // Get Instance ID token. Initially this makes a network call, once retrieved
  // subsequent calls to getToken will return from cache.
  messaging.getToken().then(function(currentToken) {
    if (currentToken) {
      sendTokenToServer(currentToken);
      updateUIForPushEnabled(currentToken);
    } else {
      // Show permission request.
      console.log('No Instance ID token available. Request permission to generate one.');
      // Show permission UI.
      updateUIForPushPermissionRequired();
      setTokenSentToServer(false);
    }
  }).catch(function(err) {
    console.log('An error occurred while retrieving token. ', err);
    showToken('Error retrieving Instance ID token. ', err);
    setTokenSentToServer(false);
  });
}

监控令牌刷新

每当生成新的令牌,系统都会触发 onTokenRefresh 回调函数,因此,在该回调函数的上下文中调用 getToken 可以确保您获取的是当前可用的注册令牌。

// Callback fired if Instance ID token is updated.
messaging.onTokenRefresh(function() {
  messaging.getToken().then(function(refreshedToken) {
    console.log('Token refreshed.');
    // Indicate that the new Instance ID token has not yet been sent to the
    // app server.
    setTokenSentToServer(false);
    // Send Instance ID token to app server.
    sendTokenToServer(refreshedToken);
    // ...
  }).catch(function(err) {
    console.log('Unable to retrieve refreshed token ', err);
    showToken('Unable to retrieve refreshed token ', err);
  });
});

获取令牌后,将其发送到您的应用服务器,并使用您首选的方法进行存储。您可以使用 Instance ID server API 来获取有关订阅的信息

发送通知消息

在请求正文中,将 message 对象内的 token 键设为您要定位的具体应用实例的注册令牌。请查看适用于您的平台的客户端设置信息,以详细了解注册令牌。

HTTP POST 请求

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
  "message":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : {
      "body" : "This is an FCM notification message!",
      "title" : "FCM Message",
      }
   }
}

cURL

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
  "notification": {
    "title": "FCM Message",
    "body": "This is an FCM Message",
  },
  "token": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
  }
}' "https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send"

HTTP 响应

{
    "name": "projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
}

请参阅构建应用服务器发送请求以详细了解 FCM 消息。

后续步骤

向前台应用发送消息

向在后台运行的应用成功发送通知消息后,您可参阅在 JavaScript 客户端中接收消息,尝试向前台应用发送消息。

除通知消息之外的其他功能

如果除了通知消息之外,您还要向应用添加其他更高级的行为,请参阅以下内容:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面