Unity接入Firebase推送
-
官方文档和参考
/// 相关文档
/// https://firebase.google.cn/docs/unity/setup
/// https://firebase.google.cn/docs/cloud-messaging/unity/client
/// 相关后台
/// https://console.firebase.google.com/
/// 相关下载
/// https://firebase.google.cn/download/unity
-
代码相关
注意在check成功后再添加回调
Assets/Third/Firebase/FirebaseManager.cs(28,16): error CS0246: The type or namespace name \'Firebase\' could not be found (are you missing a using directive or an assembly reference?)
编译报错有两种情况
1是宏相关的文件找不到,注意若是firebase相关文件没有在工程里面,其他相关代码使用#if FIREBASE 来编写的话,要确保先拷贝firebase相关文件,再AssetsDatabase.refresh,再修改宏,注意顺序
2是若无关的其余类找不到,可能是Jenkins切换客户端分支时的bug,连续打两遍同一客户端分支即可
-
导入firebase插件包注意几个选项
Auto-resolution在编辑器下可以打开 但在打包时关闭
避免在打包时修改mainTemplate.gradle带来的不确定性
也可以在菜单中修改设置(ExternalDependencyManager在工程内时才能看到该菜单)
相关设置最后影响的文件如下
导入后的文件,建议生成GeneratedLocalRepo
以上文件目录可以修改,注意修改目录后gradle中也要修改
建议不要引入androidx相关文件
-
XML相关
新增以下service(来自firebase demo中的自动生成的xml)
-
gradle相关
首先切换switch target platform到安卓 导入firebase配置文件(android和ios两份)
以上自动生成 注意改换
-
依赖相关错误
https://developer.android.com/studio/build/dependencies#view-dependency-tree
https://developer.android.com/studio/build/dependencies#duplicate_classes
注意firebase会自动修改gradle中的依赖信息
注意不要与libs下的jar重复
-
生成AAR相关
打开as工程,添加firebase相关代码
注意需要手动引入需要的类(快捷操作双击MessageForwardingService后按住Alt+Enter)
import com.google.firebase.messaging.MessageForwardingService;
另外可能还需要导入(为保证生成AAR成功)
最后生成AAR
生成后的AAR(改名然后替换)
-
打包相关
需要注意Plugins/Android目录在打包时会被拷贝覆盖
因此需要将其中的内容拷到SDK相应目录下
若缺少该文件(尤其是其中的google-services.xml)会报以下错误导致firebase初始化失败
-
测试相关
测试机需要安装谷歌服务
测试第一步要拿到token
只需要手机FQ且配置信息正确(如图)
每次启动token不变,卸载重新安装后token发生改变
token形如cH1uQuLVTwWzXN3K85ovu6:APA91bHZJpjT8Li4VozSVuknH0TDa6BRd_ec9HHLf6FjJU48QuEnA8tVO9mZjyKhIViAitqv_7ZWrwrgC9L9iTlzSrpFeaSFiKXGoqDX-F7rYhowMsSuUSdeqiwbkCTJNRXrlDad7mrd
第二步接收推送并拉起游戏进程
同样需要手机FQ,同时token已上报服务端
当游戏后台运行时,可以收到推送消息,点击后唤起
当游戏未运行时,若需要接收推送消息,需要设置程序自启动,与机型也相关(手动设置可行,自动设置权限还没试过)
有时因为VPN的原因 推送消息可能会延迟收到,建议用一个firebase的参照demo来对照测试排除VPN造成的推送消息延迟(可能延迟很久)