這個問題已被問過幾次,但沒有合適的答案:
如何從 Unity iOS 版本中排除 Firebase Messaging,而不是 Android 版本
如何在 Unity for iOS 中禁用 Firebase?
我正在構建一個使用 PlayFab 的游戲,我需要為 iOS 使用 Apple 的本機 APNS,為 Android 使用 Firebase Messaging。但是 Firebase 在我的 iOS 版本中搞砸了一些事情,無論如何我都沒有使用它的任何功能。
我嘗試從 podfile 中洗掉所有 Firebase 參考,并嘗試選擇 Assets/Firebase/Plugins 檔案夾中的所有檔案并取消選中“選擇插件平臺”下的“iOS”。但兩者都導致 Xcode 構建失敗。
為同一個游戲維護兩個單獨的專案(一個用于 iOS,一個用于 Android)不是我想要做的事情,所以我需要一種方法來將它保留在專案中而不包含在 iOS 版本中。
編輯:我對 Firebase 的問題是,在用戶在 iOS 上啟用推送通知后,完全關閉應用程式(強制退出),應用程式每次啟動時都會崩潰。根據日志,它就在 FCM(Firebase Cloud Messaging)除錯輸出之前。
根據PlayFab 論壇上的這條評論,FCM 會竊取推送通知,這也是我需要禁用它的原因。
uj5u.com熱心網友回復:
終于想通了。發布我的解決方案以幫助其他人搜索(從 Google 搜索看來,很多人都在尋找這個但沒有答案)。
要從您的 iOS 版本中僅洗掉Firebase Cloud Messaging (FCM):
- 為 Android 添加您想要的任何 Firebase 模塊。
- 我添加了分析、身份驗證和訊息傳遞。
- 將您的
google-services.json和GoogleService-info.plist檔案添加到 Assets 檔案夾中的某處(我將我的放在 Assets/Firebase 檔案夾中)。 - 在檢查器中取消選中訊息插件的“iOS”(在“選擇插件平臺”下)。插件位于兩個地方:
- 資產/Firebase/插件/iOS/Firebase.Messaging
- 資產/插件/iOS/Firebase/libFirebaseCppMessaging
- 從依賴檔案中洗掉 pod。
- 打開檔案 Assets/Firebase/Editor/MessagingDependencies 并洗掉以下幾行(
<iosPods>標簽內的所有內容):
- 打開檔案 Assets/Firebase/Editor/MessagingDependencies 并洗掉以下幾行(
<iosPod name="Firebase/Messaging" version="8.9.1" minTargetSdk="9.0">
- 在您的代碼(通常
FirebaseApp.CheckAndFixDependenciesAsync())中進行Firebase 初始化后,請確保#if UNITY_ANDROID對這些行使用條件:
#if UNITY_ANDROID
FirebaseMessaging.TokenReceived = OnTokenReceived;
FirebaseMessaging.MessageReceived = OnMessageReceived;
#endif
要從iOS 版本中洗掉所有Firebase:
- 為 Android 添加您想要的任何 Firebase 模塊。
- 我添加了分析、身份驗證和訊息傳遞。
- 將您的
google-services.json和GoogleService-info.plist檔案添加到 Assets 檔案夾中的某處(我將我的放在 Assets/Firebase 檔案夾中)。 - 在位于以下檔案夾的檢查器(在“選擇插件平臺”下)中取消選中所有插件模塊的“iOS”:
- 資產/Firebase/插件/iOS/
- 就我而言,
Firebase.Analytics,Firebase.App,Firebase.Auth, 和Firebase.Messaging
- 就我而言,
- 資產/插件/iOS/Firebase/
- 就我而言,
libFirebaseCppAnalytics,libFirebaseCppApp,libFirebaseCppAuth, 和libFirebaseCppMessaging
- 就我而言,
- 資產/Firebase/插件/iOS/
- 您還需要取消選中以下檔案的“iOS”:
- 資產/Firebase/插件/Firebase.Platform
- 資產/Firebase/插件/Firebase.TaskExtension
- 從所有依賴檔案中洗掉 pod。
- Assets/Firebase/Editor/ 檔案夾中有幾個依賴檔案。打開它們中的每一個(您添加的每個模塊都應該有一個,加上一個應用程式)并洗掉
<iosPods>標簽內的所有內容。 - 就我而言,
AnalyticsDependencies,AppDependencies,AuthDependencies, 和MessagingDependencies
- Assets/Firebase/Editor/ 檔案夾中有幾個依賴檔案。打開它們中的每一個(您添加的每個模塊都應該有一個,加上一個應用程式)并洗掉
- 使用該
#if UNITY_ANDROID條件可確保針對 iOS 構建洗掉了對 Firebase 的任何參考。
#if UNITY_ANDROID
using Firebase;
using Firebase.Messaging;
#endif
#if UNITY_ANDROID
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == DependencyStatus.Available) {
app = FirebaseApp.DefaultInstance;
firebaseAPIReady = true;
FirebaseMessaging.TokenReceived = OnTokenReceived;
FirebaseMessaging.MessageReceived = OnMessageReceived;
} else {
Debug.LogError(string.Format(
"GameManager: Could not resolve all Firebase dependencies: {0}", dependencyStatus));
}
});
#endif
我的應用程式崩潰的原因:
如上所述,我的應用程式會在啟動時崩潰,在游戲中啟用推送通知,然后退出應用程式。
事實證明,iOS 15 上的 Unity IPA(應用內購買)包版本 1.4.2 存在一個錯誤。它已被標記為一個問題,應該在 1.4.3 版中修復,但目前,有一個解決方法此處顯示:https : //github.com/Unity-Technologies/com.unity.mobile.notifications/issues/121#issuecomment-956703241
請務必在您創建的檔案頂部添加以下指令:
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/362087.html
下一篇:如何平滑基于游標位置的旋轉?
