本來以為推送是個很簡單的功能,碰了之后才知道是個天坑,誰踩坑誰,這篇帖子會簡要提供測驗過的坑,如果只想看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的列印,類似如下圖:

后面跟著的一串就是注冊令牌, 丟給后臺配置發送測驗資訊即可,
還有就是收到資訊后會有類似如下列印的回呼,然后邏輯中可以在此處處理對應回呼,不過可能是因為我是國產機的原因,只有程式在運行的時候才能收到回呼,
![]()
為了測驗方便,可以開著看列印,其中標題和內容沒問題就行,
結語:其實安卓收不到推送顯示很正常,各種限制真的讓人很無語,先跑通流程再說吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301364.html
標籤:其他
上一篇:292. Nim 游戲【找規律】
