IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity3D Android接入FCM推送 -> 正文阅读

[游戏开发]Unity3D Android接入FCM推送

? 本来以为推送是个很简单的功能,碰了之后才知道是个天坑,谁踩坑谁。这篇帖子会简要提供测试过的坑,如果只想看FCM可以跳到第二部分。

一,目前Unity3D有三种推送方式,

1,用官方自带的插件,包管理器中就可以找到:

这个使用很简单,去查官方API即可。缺点就是基本只有程序启动时候才能收到推送,不知道是不是因为国产手机的原因。

2,用Android长链接的方式,定点开启推送。

这个网上有不少帖子,但基本都是两年前的。总结下来为啥呢,因为这几年的国产机型在这块搞事儿。不在白名单的应用压根就无法常驻后台。最终实现的结果和Unity3D官方提供的插件没卵区别。

3,使用第三方

国内搞了什么推送联盟、极光推送之类,说白了都是云推送消息,本地推送实际上还是受限。

因为我们游戏要发海外市场,所以选择Google官方的firebase推送服务。

二,FCM推送

这个得翻墙找到firebase官网说明文档,这儿左侧有关于Unity3D的系列文章,右上角有控制台。

?1,后台配置

去控制台注册应用,填写相关信息,找到FCM测试发送,这些按下不表。这里有个技术点就是拿到注册令牌。如果点击问号会跳转到安卓说明界面,但其实unity3D文档中是有说明的。

2,Unity3D配置

这里建议没接过的,先搞个空包直接将SDK丢里面,然后默认更新选择开启。在它自动更新库文件后基本不用管。

然后找到后台创建项目时候给的那个json,丢到Assets下面任意位置。然后写个测试脚本:

using UnityEngine;
using Firebase;
using Firebase.Messaging;
public class FirebaseManager : MonoBehaviour
{ 
    FirebaseApp _app;
    AndroidJavaClass unityPlayer;
    AndroidJavaObject currentActivity;
    AndroidJavaClass andriodCall;//安卓定义的CallMethod类 需要Activity联系上下文 unity与安卓互相调用就是通过com.unity3d.player.UnityPlayer类下的currentActivity

    void Start()
    {
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
        {
            if (task.Result == DependencyStatus.Available)
            {
                _app = FirebaseApp.DefaultInstance;
                FirebaseMessaging.TokenReceived += OnTokenReceived;
                FirebaseMessaging.MessageReceived += OnMessageReceived;

                unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
                andriodCall = new AndroidJavaClass("com.fbstudio.fbstudiosdk.CallMethod");
                andriodCall.CallStatic("init", currentActivity);
            }
            else
                Debug.LogError("[FIREBASE] Could not resolve all dependencies :" + task.Result);
        });
    }

    void OnTokenReceived(object sender, TokenReceivedEventArgs e)
    {
        if (e != null)
            Debug.LogFormat("[FIREBASE] Token: {0}", e.Token);
    }

    void OnMessageReceived(object sender, MessageReceivedEventArgs e)
    {
        if (e != null && e.Message != null && e.Message.Notification != null)
        {
            Debug.LogFormat(" [FIREBASE] From: {0}, Title: {1}, Text: {2}",e.Message.From,e.Message.Notification.Title,e.Message.Notification.Body);
        }
    }
}

打个demo包,注意包名要和后台一致。然后测试的时候有几点要注意的。

3,测试

初次装包的时候,会有个token的打印,类似如下图:

后面跟着的一串就是注册令牌, 丢给后台配置发送测试信息即可。

还有就是收到信息后会有类似如下打印的回调,然后逻辑中可以在此处处理对应回调。不过可能是因为我是国产机的原因,只有程序在运行的时候才能收到回调。

为了测试方便,可以开着看打印,其中标题和内容没问题就行。

结语:其实安卓收不到推送显示很正常,各种限制真的让人很无语,先跑通流程再说吧。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 08:17:57  更:2021-09-19 08:19:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 4:34:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码