Firebase云消息传递教程

介绍

本文的重点不是要教您如何从头开始制作Firebase应用,其目的是要揭开神秘面纱,并说明设置Firebase Cloud Messages的过程有多么简单。 当我第一次阅读文档时,它看起来相当艰巨,并且似乎要花很多时间才能完成工作,而实际上我花了不到20分钟的时间就可以开始工作。 我会稍微介绍一下客户端的设置,但由于文档非常善于解释这一点,因此我并没有太多涉及,并且我的复制粘贴毫无意义。

注意 Firebase Cloud Messages是新的。 Google Cloud Messages不是。 我以前从未看过GCM,所以我不知道区别/相似之处。

如果本文/指南中的内容有误,请在下面的评论中对我进行纠正。 我讨厌别人卡住,因为我犯了一个错误。

本指南非常简单,不适合生产环境。 只是为了说明如何设置简单的FCM服务。

先决条件

显然,您需要一个正常运行的Firebase项目。 您还需要了解以下内容:

  • 节点JS
  • Java脚本
  • 基本的HTTP知识
  • 客户端实现(我是iOS开发人员,因此我的示例将在iOS中完成)
  • 能够在实际设备上运行示例应用程序

客户端和Firebase设置说明

虽然Firebase文档非常出色,但我建议您按照它们进行操作,以在客户端进行设置,但我会提到两点。

除了客户端安装指南告诉您的内容外,您的应用还需要注册推送通知并请求用户许可,在您的应用委托中,您可以执行以下操作:

  func应用程序(应用程序:UIApplication,didFinishLaunchingWithOptions launchOptions:[NSObject:AnyObject]?)-> Bool { 
 让notificationSettings = UIUserNotificationSettings(forTypes:[。Badge,.Sound,.Alert],类别:nil) 
  application.registerUserNotificationSettings(notificationSettings) 
返回真
}
  func应用程序(应用程序:UIApplication,didFailToRegisterForRemoteNotificationsWithError错误:NSError){ 
 打印(错误) 
  } 
  func应用程序(应用程序:UIApplication,didReceiveRemoteNotification userInfo:[NSObject:AnyObject]){ 
 打印(userInfo) 
  } 
  func应用程序(应用程序:UIApplication,didRegisterUserNotificationSettings notificationSettings:UIUserNotificationSettings){ 
 如果notificationSettings.types!=。无{ 
application.registerForRemoteNotifications()
}
}

您显然可以跳过print()语句,但是在调试时提供了很好的信息。

另外,如果您打算在要在后台获取的通知中包括有效负载,则应在.plist中包括它

我在文档中错过的另一件事是,在创建Provisioning APNs SSL证书后,您需要将它们上传到Firebase控制台。 您可以在控制台中的“齿轮菜单”>“项目设置”>“云消息传递”下进行操作,然后选择您的iOS应用。

这也是您稍后将找到API密钥的地方。

检查您的配置

到此为止一切正常,请通过在控制台的“通知”选项卡中向自己发送推送通知来确认这一点。

在执行此操作之前,请锁定手机或退出应用程序,以便可以看到手机正确注册了通知。 在进行测试时,最好将“优先级”字段设置为高。 这样,通知就或多或少地得到保证可以立即推送。 不过,在生产中请谨慎使用,因为它会延长电池寿命。 请参阅我的SO答案以进行澄清

服务器端设置

服务器端设置需要一些javascript / NodeJS知识,但不是很多。

我正在使用Node> 6.0.0,因此可以使用ES2015语法(我还使用Babel转换了我的代码)。 如果您使用的是其他版本,请使用适当的语法。

 更换: 
  somefunction() 
.then((response)=> {
做点什么
})
 带有: 
  somefunction() 
.then(function(response){
做点什么
})
 对于较旧的Javascript语法 

首先,在新目录中运行npm init。 按照说明进行设置。

然后安装axios 使用npm install-保存axios。 根据文档,axios是一个

基于Promise的HTTP客户端,用于浏览器和node.js

现在,在项目的根目录中创建一个index.js ,并用以下内容填充它:

  var axios = require('axios'); 
const fcmKey ='YOUR_FCM_SERVER_KEY'
const fcmUrl ='https://fcm.googleapis.com/fcm/send'
const phoneToken ='MY_PHONE_TOKEN'

在这里,我们只是导入axios,设置我们的服务器api密钥,并为将要发布通知的服务器设置一个变量。 phoneToken常数就是您的电话的通知ID。 在这里查看如何获取它。

为了使我们的通知能够响应事件,我们将使其监听Firebase数据库中的测试端点:

  ref.child('test')。on('child_added',(snapshot)=> { 
const通知= buildNotification(snapshot.val())
sendNotification(通知)
})

如您所见,这只是监视端点/ test的新孩子。 子项只是一个简单的键/值,键为“名称”。

继续我们的buildNotification()函数:

 函数buildNotification(数据){ 
const {name} =数据
返回{
“通知”:{
“ title”:“新名称”,
“ text”:`$ {name}很棒,
“声音”:“默认”
},
“至”:phoneToken,
“优先级”:“高”
}
}

在开发过程中,请记住将优先级设置为高,否则通知可能要花一些时间。

接下来,我们的sendNotification()函数包含两个步骤:

 函数buildRequest(通知){ 
返回{
网址:fcmURL,
方法:“发布”,
标头:{
“ Content-Type”:“ application / json”,
“授权”:`key = $ {fcmKey}`
},
数据:通知
}
}
 函数sendNotification(notification){ 
const request = buildRequest(通知)
  axios(request).then((r)=> { 
console.log(r)
})。catch((错误)=> {
console.log(错误)
})
}

首先,我们在请求标头中使用通知和FCM令牌构建请求。 然后,我们将该请求传递到Axios,并监听响应或错误。 如此简单……您现在应该在设备上看到一条通知弹出。

如果您不这样做,那么有几件事需要检查

  • 确保将优先级设置为高
  • 确保您已将推送通知证书上传到Firebase控制台(这将在iOS 10中更改)

如果您有任何评论/更正或建议,请在评论中告知我。