2015-01-06 4 views
0

Я использую следующие коды для инициализации Facebook SDK (в OnGUI()):FB.Init() Проблемы на Facebook для Unity SDK 6.0

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:

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

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

Примечание: Используя Unity 4.6.1, Facebook SDK для Unity 6.0 .0

ответ

2

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

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

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();                   
    }                       
} 
+0

Спасибо. Учебник Facebook устарел (он использует v5.x), возможно, я должен попробовать 6.0.0 и вернуться к вам (стр. Я помогаю исправлять орфографическую ошибку) – Raptor

0

Я думаю, что речь идет о IOS Sdk. See this link

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

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

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

Смежные вопросы