千锋教育-做有情怀、有良心、有品质的职业教育机构
一. 前言:
当一款游戏发展到一定阶段,必不可少的要接入推送SDK,推送功能,分为以下两种:
本地推送:玩家打开游戏后,给手机系统通知设置推送的倒计时,等游戏关闭后,倒计时结束时,手机会自动打开通知给用户。由于是提前设定死的内容和计时器,所以灵活性差。
远程通知:有一个服务器后台,可以随时随地给玩家发送通知提醒。好处是灵活,但是坏处就是无法根据用户的进度,定制推送内容。所有用户一把抓,走统一逻辑推送。
二.远程推送
我们今天要聊的远程推送,是基于Firebase Cloud Message的,如果你的游戏是发行国内的,可能不太适用,因为Firebase天然是基于google 框架的,而国内的手机基本都是不支持谷歌框架的。
三.Firebase Cloud Message简介
以下简称FCM,FCM是一款由google公司出品,由原google cloud message升级后的产品,适用于提供免费的跨平台的消息推送服务,
主要功能
功能描述
发送通知消息或数据消息向用户发送通知消息或者发送数据消息,并完全在应用代码中决定具体的行动。请参阅消息类型。
通用消息定位拥有三种消息分发方式: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的包即可。
第 5 步:初始化Firebase Cloud Message
Android 版 Firebase Unity SDK 需要使用 Google Play 服务。你必须先将 Google Play 服务更新为最新版本,然后才能使用该 SDK。
你应在应用开头添加以下代码,在调用 SDK 中的任何其他方法之前,你可在此代码段中检查 Google Play 服务版本是否符合 Firebase Unity SDK 的要求,并视情况将其更新为相应版本。
代码如下:
第 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
第 7 步: 防止自动初始化
当为 TokenReceived 或 MessageReceived 事件添加处理函数时,Firebase Cloud Messaging 库将会初始化。初始化时,FCM会生成一个用于设备定位的注册令牌,并上传到firebase。
Android端是默认统一通知授权的,我们直接使用就行,但是iOS端需要让用户选择,所以FCM首次初始化时,就会弹出通知授权弹框。如果我们希望在合适的时机弹出授权弹框,初始化FCM,那么需要通过配置停用FCM的自动初始化。
iOS
在Info.plist中添加键值
Android
在AndroidManirest.xml中添加键值
如需重新启用 FCM,你可以在初始化FCM时调用,此值一经设置,就会在应用重启后持久保存。
第 8 步:修改Android通知图标
首先iOS是不支持修改图标的,也没必要,因为iOS的图标就是我们的默认图标。但是Android就比较恶心了,Firebase通知会默认使用应用的默认图标,但是有部分手机不支持彩色icon。所以可能看到图标显示是灰色方块,那是因为,android系统会忽略通知图标的非alpha通道,所以我们需要重新制作一个通知图标。参考[stackoverflow](android - Why is my smallIcon for Notifications always greyed out? - Stack Overflow)
我们需要按照如下图标方式制作带alpha通道的图标:
当我们图标制作好,需要把图标放到Assets/Plugins/Android/res/drawable/目录下,然后配置AndroidManifest.xml。参考:设置 FCM Android Documentation
第 9 步:FCM多语言推送
如果我们是发往海外的游戏,那么我们肯定是需要做推送的多语言的,要不你让美国人看着中文的推送,他们可能很懵逼。但是说实话,多语言确实不好做。我们也是一个巧合发现通过 订阅主题 功能可能做多语言。订阅功能需要我们有服务器环境,也就是不使用Notifications Composer 而是在我们自己的服务端用java或者go等写逻辑,通过http往google play 的服务器发送推送消息,google play再往手机终端下发通知。详情请看:
在 Unity 上向主题发送消息
如何订阅:
如上述代码所示:就像C#代码中的delegate的事件通知一样,我们在服务器先设定不同的topic主题名称,客户端订阅不同的主题。然后服务端一旦下发某一个主题,那么就只有订阅了该主题的手机终端可以接受到通知。
接下来我们来说如何实现多语言:
我们根据手机的设备类型,语言,渠道等 拼出来几个不同的主题,如下:
那么接下来我像不用我再说你就懂了。不同的国家的不同设备,只要登录游戏就注册不同的主题,我们再后台就可以编辑不同主题的推送内容了,美国的就用英语,中国的就用汉语。
好了,这篇文章就到这里,希望能够对你有所帮助。
相关推荐