基于FCM推送消息

游戏中,在玩家离线时,也会发生许多重要的事件,如玩家建筑升级完成、玩家被攻击等事件。若能及时将这些信息同步给玩家,有助于提升用户活跃度,有利于游戏体验。

FCM简介

Firebase Cloud Messaging是Google提供的免费推送消息的服务。我们使用此服务来完成给玩家推送消息的功能。

FCM支持多种消息发送的方式,使用ios、android、c++、js的fcm sdk及服务器fcm sdk发送消息,也可使用服务器直接调用API发送消息

基于项目需求,这里采用服务器调用API发送消息的方式来使用FCM,先来看一下使用FCM时的官方示例

// 这个网址是根据你注册的信息替换其中的myproject-b5ae1即可
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 // 这里是验证信息
// post内容
{
   "message":{
      "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // 设备注册令牌
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}

由示例可知推送1个消息,我们需要以下3点

  • post网址 (根据注册信息来替换即可)
  • 设备注册令牌在手机安装含有FCM SDK的包后生成 (让客户端上报至服务器即可)
  • 验证信息需要我们自己根据相关信息生成 (需自己生成,生成方式见下节OAuth 2.0部分)

基于以上信息,开始FCM接入工作

要使用FCM的WEB API需要先通过OAuth 2.0方法来获取Google的Acess Token

一. Acess Token获取步取如下
  1. OAuth 2.0
    在注册帐号时会获取包含project_id private_key等的OAuth 2.0客户端凭据,将信息保存下来,以备使用
  2. 创建一个JSON Web令牌,其中包括标头,声明集和签名。
{"alg":"RS256","typ":"JWT"}{
  "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
  "scope": "https://www.googleapis.com/auth/prediction",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1328554385, // 过期时间 指定为自1970年1月1日UTC 00:00:00以来的秒数
  "iat": 1328550785 // 开始时间 指定为自1970年1月1日UTC 00:00:00以来的秒数
}
  1. 使用private_key,使用SHA256withRSA对{Base64url encoded header}.{Base64url encoded claim set}进行签名将结果base64后与前面内容用.连在一起
  2. 进行post请求
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=xxx.yyy.zzz
// xxx.yyy.zzz即为上一步中的结果
  1. 处理授权服务器返回的JSON响应。
{
  "access_token": "ya29.c.Kp8xxxxxxxxxx",
  "token_type": "Bearer",
  "expires_in": 3599
}

将返回值中的token_type 和 access_token保存起来

二. 开始消息推送

这一步简单了

  1. 直接对指定地址进行post即可
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

Authorization: Bearer ya29.c.Kp8xxxxxxxxxx

// 推送内容
{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // 这是客户端设备上报的token,相当于收件人
    "notification":{
      "title":"Portugal vs. Denmark",  // 通知标题
      "body":"great match!" // 通知内容
    }
  }
}

推送成功后返回内容如下

{
  "name": "projects/ugame-global/messages/0:1622082421135981%f2a7efe6f2a7efe6"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwao7890

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值