Проблемы FB.Init() на Facebook для 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);
}

Затем я запускаю приложение на настоящем iPhone 5s с iOS 8.1.2. Журнал показывает в Xcode 6:

FB.Init() уже был вызван. Вам нужно вызвать это только один раз и только один раз.

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. Все остальное нормально.

Ссылка на другие подобные вопросы (это и что), дело обстоит иначе, поскольку версия отличается (используемые версии Graph API также отличаются )

Примечание. Использование Unity 4.6.1, Facebook SDK для Unity 6.0.0


person Raptor    schedule 06.01.2015    source источник


Ответы (2)


Я вижу в этот вопрос, что кто-то предлагает не полагаться на FB .IsInitalized, потому что он всегда возвращает true.

Я могу сказать вам, что мне помогло вызвать FB.Init в функции Awake(), как это сделано в Facebook Учебник по интеграции игр Unity. Я сделал это в пользовательском классе, созданном как синглтон, поэтому я знаю, что он инициализируется только один раз.

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();                                                                        
    }                                                                                        
} 
person Ted B    schedule 06.01.2015
comment
Спасибо. Учебник Facebook устарел (используется v5.x), возможно, мне стоит попробовать 6.0.0 и вернуться к вам (p.s. помогу исправить орфографическую ошибку) - person Raptor; 07.01.2015

Я думаю, что речь идет о IOS Sdk. По этой ссылке

Так что на данный момент я думаю, что это решение работает.

1-) Откройте свой FBUnityInterface.mm с помощью блокнота или чего-то еще.

2-9) Добавьте "self.isInitializing = NO; " в строку 110 перед "UnitySendMessage(g_fbObjName, "OnInitComplete", "");"

person archengineer    schedule 16.01.2015