千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  Unity技术干货  >  正文

Unity如何接入Firebase Cloud Message远程推送

来源:千锋教育
发布时间:2022-09-28 17:21:50
分享

  一. 前言:

  当一款游戏发展到一定阶段,必不可少的要接入推送SDK,推送功能,分为以下两种:

  本地推送:玩家打开游戏后,给手机系统通知设置推送的倒计时,等游戏关闭后,倒计时结束时,手机会自动打开通知给用户。由于是提前设定死的内容和计时器,所以灵活性差。

  远程通知:有一个服务器后台,可以随时随地给玩家发送通知提醒。好处是灵活,但是坏处就是无法根据用户的进度,定制推送内容。所有用户一把抓,走统一逻辑推送。

  二.远程推送

  我们今天要聊的远程推送,是基于Firebase Cloud Message的,如果你的游戏是发行国内的,可能不太适用,因为Firebase天然是基于google 框架的,而国内的手机基本都是不支持谷歌框架的。

  三.Firebase Cloud Message简介

  以下简称FCM,FCM是一款由google公司出品,由原google cloud message升级后的产品,适用于提供免费的跨平台的消息推送服务,

  主要功能

Unity如何接入Firebase Cloud Message远程推送1

  功能描述

  发送通知消息或数据消息向用户发送通知消息或者发送数据消息,并完全在应用代码中决定具体的行动。请参阅消息类型。

  通用消息定位拥有三种消息分发方式:1.分发至单一设备、2.分发至设备组、3.分发至订阅了主题的设备。

  客户端回传消息通过 FCM 可将确认消息、聊天信息及其他消息从设备发回至你的服务器。

  官网文档教程:Untiy FIrebase Cloud Messaging Documentation

  官方FCM API:Firebase Cloud Messaging API

  官方快速入门示例:https://github.com/firebase/quickstart-unity

  四.Firebase Cloud Message接入

  第 1 步:创建 Firebase 项目

  必须在firebase后台,创建一个项目,获取到相应的然后才能将 Firebase 添加到该 Unity 项目。请访问了解 Firebase 项目以了解详情。

  第 2 步:在 Firebase 中注册你的应用

  不详细说了

  第 3 步:添加 Firebase 配置文件到Unity

  在 Firebase 控制台设置工作流中,获取针对具体平台的 Firebase 配置文件。

  打开 Unity 项目的 Project 窗口,然后将你的配置文件移到 Assets 文件夹中。。

  ** iOS** - 点击下载 GoogleService-Info.plist。

  ** Android** - 点击下载 google-services.json。

  第 4 步:添加 Firebase Unity SDK

  Firebase的SDK是一个很大的集合压缩包,里面有所有googleplay的不同服务的sdk包,如下图所示,我们需要需要导入FirebaseMesssaging.unitypackage即可,其他的大家根据需要导入,我们使用2019版本的,直接导入dotnet4的包即可。

Unity如何接入Firebase Cloud Message远程推送2

 

  第 5 步:初始化Firebase Cloud Message

  Android 版 Firebase Unity SDK 需要使用 Google Play 服务。你必须先将 Google Play 服务更新为最新版本,然后才能使用该 SDK。

  你应在应用开头添加以下代码,在调用 SDK 中的任何其他方法之前,你可在此代码段中检查 Google Play 服务版本是否符合 Firebase Unity SDK 的要求,并视情况将其更新为相应版本。

  代码如下:

Unity如何接入Firebase Cloud Message远程推送444

  第 6 步:添加通知配置

  iOS,配置

  1.添加UserNotifications.framework

  2.添加Capabilities标签:Push Notifications和Background Modes。Background Modes 下选择 Remote notifications 复选框。

  Android

  1.配置 Android 入口点 Activity

  在 Android 上,Firebase Cloud Messaging 附带了自定义入口点 Activity,用以替换默认的 UnityPlayerActivity。如果你使用默认的Activity,则系统会自动进行此替换,无需你执行任何其他操作。但是如果有自定义的Activity的,则需要扩展你自己的Activity,添加FCM需要的函数,

  配置自定义入口点 Activity:

  详情参考:https://firebase.google.com/docs/cloud-messaging/unity/client#configuring_an_android_entry_point_activity

Unity如何接入Firebase Cloud Message远程推送555

  第 7 步: 防止自动初始化

  当为 TokenReceived 或 MessageReceived 事件添加处理函数时,Firebase Cloud Messaging 库将会初始化。初始化时,FCM会生成一个用于设备定位的注册令牌,并上传到firebase。

  Android端是默认统一通知授权的,我们直接使用就行,但是iOS端需要让用户选择,所以FCM首次初始化时,就会弹出通知授权弹框。如果我们希望在合适的时机弹出授权弹框,初始化FCM,那么需要通过配置停用FCM的自动初始化。

  iOS

  在Info.plist中添加键值

Unity如何接入Firebase Cloud Message远程推送666

  Android

  在AndroidManirest.xml中添加键值

Unity如何接入Firebase Cloud Message远程推送777

  如需重新启用 FCM,你可以在初始化FCM时调用,此值一经设置,就会在应用重启后持久保存。

Unity如何接入Firebase Cloud Message远程推送888

  第 8 步:修改Android通知图标

  首先iOS是不支持修改图标的,也没必要,因为iOS的图标就是我们的默认图标。但是Android就比较恶心了,Firebase通知会默认使用应用的默认图标,但是有部分手机不支持彩色icon。所以可能看到图标显示是灰色方块,那是因为,android系统会忽略通知图标的非alpha通道,所以我们需要重新制作一个通知图标。参考[stackoverflow](android - Why is my smallIcon for Notifications always greyed out? - Stack Overflow)

  我们需要按照如下图标方式制作带alpha通道的图标:

Unity如何接入Firebase Cloud Message远程推送3

 

  当我们图标制作好,需要把图标放到Assets/Plugins/Android/res/drawable/目录下,然后配置AndroidManifest.xml。参考:设置 FCM Android Documentation

Unity如何接入Firebase Cloud Message远程推送999

  第 9 步:FCM多语言推送

  如果我们是发往海外的游戏,那么我们肯定是需要做推送的多语言的,要不你让美国人看着中文的推送,他们可能很懵逼。但是说实话,多语言确实不好做。我们也是一个巧合发现通过 订阅主题 功能可能做多语言。订阅功能需要我们有服务器环境,也就是不使用Notifications Composer 而是在我们自己的服务端用java或者go等写逻辑,通过http往google play 的服务器发送推送消息,google play再往手机终端下发通知。详情请看:

  在 Unity 上向主题发送消息

  如何订阅:

Unity如何接入Firebase Cloud Message远程推送1111

  如上述代码所示:就像C#代码中的delegate的事件通知一样,我们在服务器先设定不同的topic主题名称,客户端订阅不同的主题。然后服务端一旦下发某一个主题,那么就只有订阅了该主题的手机终端可以接受到通知。

  接下来我们来说如何实现多语言:

  我们根据手机的设备类型,语言,渠道等 拼出来几个不同的主题,如下:

Unity如何接入Firebase Cloud Message远程推送2222

  那么接下来我像不用我再说你就懂了。不同的国家的不同设备,只要登录游戏就注册不同的主题,我们再后台就可以编辑不同主题的推送内容了,美国的就用英语,中国的就用汉语。

  好了,这篇文章就到这里,希望能够对你有所帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • fps低怎么办?什么原因导致的? 低帧率(FPS)通常是指在实时图像渲染或视频播放过程中,每秒显示的帧数较低,导致画面不流畅或卡顿。下面是一些可能导致低帧率的原因和相应的解决方法:1.硬件性能不足:如果计算机或设备的处理能力不够强大,
  • fps低了怎么调高 要提高FPS(FramesPerSecond,每秒帧数)的性能,可以尝试以下方法:1.优化图形设置:降低图形质量和特效,如分辨率、纹理质量、阴影等。这会减少图形渲染的工作量,提高性能。2.关闭后台进程
  • 反射的实现原理? Load(“程序集”)加载程序集,返回类型是一个Assembly,得到程序集中所有类的名称,foreach (Type type in assembly.Type type = assembly.创建此类型实例,MethodInfo mInfo = type.
  • unity如何接入puerts webpack适用于我们执行ts编译为js用的插件,把需要的依赖加入到dependencies标签中,然后在vscode的终端输入npm install 拉取依赖即可,拉取成功后,会生成一-个node_ modules的文件夹,里面就是我们拉取的依赖库,可能很大,这个文件夹最好加入到忽略列表中。代码如下所示:
  • xlua-framework之UI框架 我们前面说过xlua-framework这个框架,是一个纯lua的一个框架,也就是说我们所有的逻辑都可以在lua中实现,只有资源模块和网络模块是c#原生写的,但是也在lua中给我们包装的工具类,让我们更方便的使用。在框架的纯lua代码中,不得不说,ui框架是我最喜欢的,一套基于mvc的一套ui框架。
  • xlua-framework之网络框架 一般我们说到网络框架,主要是指Socket网络框架,如果是Http的话,我们没有必要单独介绍了,简单用可以直接使用WWW或者UnityWebRequest,如果稍微复杂的使用,可以使用RestSharp库。所以我们本章主要讨论的是xlua-framework框架是如何实现socket网络框架的。