ParseFacebookUtils.LogInAsync выдает ошибку только в WebPlayer

Я использую Parse Unity SDK вместе с Facebook Unity SDK в своей игре, чтобы пользователи могли входить в систему со своей учетной записью Facebook.

Он хорошо работает на мобильных устройствах (Android и iOS) и в редакторе.

В Facebook Canvas (WebPlayer), на моей машине (Mac Mini), с моим основным сеансом (администратор), со всеми браузерами (Chrome, Safari, Firefox) я получаю сообщение об ошибке при вызове этого кода:

Debug.Log("ABOUT TO LOGIN");
ParseFacebookUtils.LogInAsync(  FB.UserId,FB.AccessToken, 
                                      FB.AccessTokenExpiresAt).ContinueWith(x => 
{ 
    Debug.Log("IN TASK");
    if(x.IsFaulted || x.IsCanceled)
    {
        Debug.LogError("[FacebookManager] Error LogInAsync");
        Debug.Log(x.Exception);
    }
    else
    {
         // Connection successful
         // ...
    }
} 

// CODE CONTINUES...

Результат выглядит следующим образом:

ABOUT TO LOGIN

TrySetSetString can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.

IN TASK

[FacebookManager] Error LogInAsync

System.AggregateException: Exception of type 'System.AggregateException' was thrown.
---------
System.ArgumentException: TrySetSetString can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
  at (wrapper managed-to-native) UnityEngine.PlayerPrefs:TrySetSetString (string,string)
  at UnityEngine.PlayerPrefs.SetString(System.String key, System.String value)[0x00000] in /Applications/buildAgent/work/___SOME_ID____/artifacts/WebPlayerGenerated/PlayerPrefsBinding.cs:62
  at Parse.PlatformHooks+SettingWrapper.Save()[0x00000] in <filename unknown>:0
  at Parse.PlatformHooks+SettingWrapper.set_Item (System.String key, System.Object value) [0x00000] in <filename_unknown>:0
  at Parse.ParseUser.SaveCurrentUser(Parse.ParseUser user) [0x00000] in <filename unkwnown>:0
  at Parse.ParseUser.<SignUpAsync>b__0 (Sustem.Threading.Tasks.Task _) [0x00000] in <filename unknown>:0
  at Parse.Internal.InternalExtensions+<>c__DisplayClassa.<OnSuccess>b__9 (System.Threading.Tasks.Task t) [0x00000] in <filename unknown>:0
  at Parse.Internal.InternalExtensions+<>c__DisplayClass7`1[System.Object].<OnSuccess>b__6 (System.Threading.Tasks.Task t) [0x00000] in <filename unknown>:0
  at System.Threading.Tasks.Task+<>c__DisplayClass3`1+<>c__DisplayClass5[System.Threading.Tasks.Task`1[System.Object]].<ContinueWith>b__2 () [0x00000] in <filename unknown>:0

Эта ошибка не появляется в других сеансах на моей машине и не появляется на машинах моих товарищей по команде.

Вот что я пробовал до сих пор (не обязательно в таком порядке):

  • Очистил кеши браузеров
  • Пробовал в режиме приватной навигации
  • Перейдите на unity3d.com/webplayer/setup, чтобы удалить все кешированные файлы.
  • Перейдите на unity3d.com/webplayer/setup, чтобы отключить кеширование файлов.
  • Удаление и новая установка веб-плеера Unity (загруженного из Chrome)
  • Удаление и новая установка веб-плеера Unity (загруженного из Firefox)
  • Удалил все WebPlayerPrefs на моей машине
  • Изменены права доступа к папке и файлам PlayerPrefs на rw для всех.
  • Удаление Unity Web Player, копирование файлов Unity Web Player с Mac, где ошибка не появляется, для установки вручную
  • Включение PlayerPrefs.DeleteAll()` в мой код перед LogInAsync

Кроме того, во многих случаях игра даже не загружается (пустой холст вместо логотипа игры + полоса загрузки). Пустой веб-плеер также иногда появляется при переходе на unity3d.com/webplayer/setup.

Я совершенно уверен, что проблема возникает либо из-за конфликта разрешений, либо из-за кеша, о котором я не знаю.

Любая идея, что я могу попробовать сейчас?


person Ergo    schedule 30.09.2014    source источник


Ответы (2)


Я столкнулся с той же проблемой. В моем случае проблема была в канале разработки веб-плеера. Попробуйте переключиться с канала разработки на канал выпуска.

из документов Unity

http://docs.unity3d.com/Manual/WebPlayerChannels.html

person Sat    schedule 10.10.2014
comment
Спасибо за помощь. В настоящее время у меня есть другая проблема с веб-плеером, которая может быть связана (белая страница, когда я пытаюсь загрузить холст Unity). Я отправлю сообщение, как только смогу подтвердить, решило ли это решение мою проблему. - person Ergo; 13.10.2014

Я получил эту ошибку для чего-то другого, и оказалось, что TrySetSetString срабатывает, когда вы пытаетесь сделать объявление и назначение одновременно. У вас, вероятно, есть что-то подобное в верхней части объявлений вашего класса.

ParseObject userInfo = новый ParseObject("UserInfo");

Это дало мне ту же ошибку, но когда я ее удалил, ошибка исчезла. Надеюсь, это решит вашу проблему.

person Tufan ALIN    schedule 14.10.2014
comment
У меня есть такие объявления в моих классах. Я попробую ваше решение и опубликую свой результат. Спасибо ! - person Ergo; 14.10.2014