FB.Init() Facebook 上针对 Unity SDK 6.0 的问题
FB.Init() Issues on Facebook for Unity SDK 6.0
我使用以下代码初始化 Facebook SDK(在 OnGUI()
中):
if(GUI.Button(buttonRect, "Login")) {
if(!FB.IsInitialized) {
FB.Init(OnInitComplete, OnHideUnity);
} else {
OnInitComplete();
}
}
及其回调函数:
private void OnInitComplete() {
Debug.Log("FB.Init completed: Is user logged in? " + FB.IsLoggedIn);
Application.LoadLevel("NextScreen");
}
private void OnHideUnity(bool isGameShown) {
Debug.Log("Is game showing? " + isGameShown);
}
然后,我用 iOS 8.1.2 在真正的 iPhone 5 秒内运行应用程序,日志显示在 Xcode 6:
FB.Init() has already been called. You only need to call this once and only once.
NullReferenceException: Facebook object is not yet loaded. Did you call FB.Init()?
at FB.get_FacebookImpl () [0x00000] in <filename unknown>:0
at FB.Init (Facebook.InitDelegate onInitComplete, System.String appId, Boolean cookie, Boolean logging, Boolean status, Boolean xfbml, Boolean frictionlessRequests, Facebook.HideUnityDelegate onHideUnity, System.String authResponse) [0x00000] in <filename unknown>:0
at FB.Init (Facebook.InitDelegate onInitComplete, Facebook.HideUnityDelegate onHideUnity, System.String authResponse) [0x00000] in <filename unknown>:0
at TitleScreen.StartGame () [0x00000] in <filename unknown>:0
at TitleScreen.Update () [0x00000] in <filename unknown>:0
(Filename: Line: -1)
FB.Init completed: Is user logged in? True
此问题不会发生在 Android 中,也不会在 Unity 中运行。我该如何解决这个问题?
p.s。此错误并不禁止我登录 Facebook。其他都正常。
参考其他类似问题(this and that),版本不同,情况不同(使用的GraphAPI版本也不同)
注意:使用 Unity 4.6.1,适用于 Unity 6.0.0 的 Facebook SDK
我在 this question 中看到有人建议不要依赖 FB.IsInitalized 因为它总是 returns 正确。
我可以告诉你对我有用的是在 Awake() 函数中调用 FB.Init,就像在 Facebook Unity Games Integration Tutorial 中所做的那样。我在自定义 class 中创建了一个单例,所以我知道它只初始化了一次。
private void Awake() {
// Initialize FB SDK
enabled = false;
FB.Init(SetInit, OnHideUnity);
}
private void SetInit()
{
Util.Log("SetInit");
enabled = true; // "enabled" is a property inherited from MonoBehaviour
if (FB.IsLoggedIn)
{
Util.Log("Already logged in");
OnLoggedIn();
}
}
我认为是关于 IOS Sdk。 See this link
所以现在我认为这个解决方案有效。
1-) 用记事本或其他工具打开 FBUnityInterface.mm。
2-9) 在第 110 行 "UnitySendMessage(g_fbObjName, "OnInitComplete", "");
之前添加 "self.isInitializing = NO; "
我使用以下代码初始化 Facebook SDK(在 OnGUI()
中):
if(GUI.Button(buttonRect, "Login")) {
if(!FB.IsInitialized) {
FB.Init(OnInitComplete, OnHideUnity);
} else {
OnInitComplete();
}
}
及其回调函数:
private void OnInitComplete() {
Debug.Log("FB.Init completed: Is user logged in? " + FB.IsLoggedIn);
Application.LoadLevel("NextScreen");
}
private void OnHideUnity(bool isGameShown) {
Debug.Log("Is game showing? " + isGameShown);
}
然后,我用 iOS 8.1.2 在真正的 iPhone 5 秒内运行应用程序,日志显示在 Xcode 6:
FB.Init() has already been called. You only need to call this once and only once.
NullReferenceException: Facebook object is not yet loaded. Did you call FB.Init()?
at FB.get_FacebookImpl () [0x00000] in <filename unknown>:0
at FB.Init (Facebook.InitDelegate onInitComplete, System.String appId, Boolean cookie, Boolean logging, Boolean status, Boolean xfbml, Boolean frictionlessRequests, Facebook.HideUnityDelegate onHideUnity, System.String authResponse) [0x00000] in <filename unknown>:0
at FB.Init (Facebook.InitDelegate onInitComplete, Facebook.HideUnityDelegate onHideUnity, System.String authResponse) [0x00000] in <filename unknown>:0
at TitleScreen.StartGame () [0x00000] in <filename unknown>:0
at TitleScreen.Update () [0x00000] in <filename unknown>:0
(Filename: Line: -1)
FB.Init completed: Is user logged in? True
此问题不会发生在 Android 中,也不会在 Unity 中运行。我该如何解决这个问题?
p.s。此错误并不禁止我登录 Facebook。其他都正常。
参考其他类似问题(this and that),版本不同,情况不同(使用的GraphAPI版本也不同)
注意:使用 Unity 4.6.1,适用于 Unity 6.0.0 的 Facebook SDK
我在 this question 中看到有人建议不要依赖 FB.IsInitalized 因为它总是 returns 正确。
我可以告诉你对我有用的是在 Awake() 函数中调用 FB.Init,就像在 Facebook Unity Games Integration Tutorial 中所做的那样。我在自定义 class 中创建了一个单例,所以我知道它只初始化了一次。
private void Awake() {
// Initialize FB SDK
enabled = false;
FB.Init(SetInit, OnHideUnity);
}
private void SetInit()
{
Util.Log("SetInit");
enabled = true; // "enabled" is a property inherited from MonoBehaviour
if (FB.IsLoggedIn)
{
Util.Log("Already logged in");
OnLoggedIn();
}
}
我认为是关于 IOS Sdk。 See this link
所以现在我认为这个解决方案有效。
1-) 用记事本或其他工具打开 FBUnityInterface.mm。
2-9) 在第 110 行 "UnitySendMessage(g_fbObjName, "OnInitComplete", "");
之前添加 "self.isInitializing = NO; "