Facebook Unity3d расширяет UnityPlayerActivity, ломая другие плагины, которые делают то же самое
Итак, у меня уже есть один сторонний плагин, который расширяет UnityPlayerActivity, плюс мы расширяем его, чтобы посыпать свои собственные вещи, и теперь вместе с Facebook появился SDK для единства с его собственной расширенной UnityPlayerActivity.
Почему все эти сторонние SDK думают, что они настолько чертовски особенные, что могут просто ввести себя в эту драгоценную позицию? Хорошо, напыщенная речь сделана...
Есть ли надежда, что Facebook сможет исправить свой SDK, чтобы не делать этого? Запрашиваемая здесь, так как у них нет собственного форума поддержки...
Между тем, есть ли способ примирить существование двух расширений одного класса? Является ли единственный способ взломать эти сторонние банки и переписать один подкласс UnityPlayerActivity?
Facebook SDK хорош и чист (по сравнению с prime31), но в настоящее время практически недоступен для нас в Android:(
Обновление:
Ну, я пошел дальше и отредактировал свой собственный подкласс, добавив в него один вызов, который имел подкласс facebooks, и это вроде как работает. По крайней мере, дальше.
Теперь я получаю исключение NullPointerException из класса LoginAction в Facebook:
W/System.err( 1166): java.lang.RuntimeException: Unable to pause activity {com.fluik.WordMeisterFree/com.facebook.LoginActivity}: java.lang.NullPointerException
W/System.err( 1166): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3016)
W/System.err( 1166): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2971)
W/System.err( 1166): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2949)
W/System.err( 1166): at android.app.ActivityThread.access$800(ActivityThread.java:141)
W/System.err( 1166): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1251)
W/System.err( 1166): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 1166): at android.os.Looper.loop(Looper.java:137)
W/System.err( 1166): at android.app.ActivityThread.main(ActivityThread.java:5039)
W/System.err( 1166): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 1166): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 1166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
W/System.err( 1166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
W/System.err( 1166): at dalvik.system.NativeStart.main(Native Method)
W/System.err( 1166): Caused by: java.lang.NullPointerException
W/System.err( 1166): at com.facebook.LoginActivity.onPause(LoginActivity.java:121)
W/System.err( 1166): at android.app.Activity.performPause(Activity.java:5206)
Где это выглядит, он пытается установить видимость на индикаторе выполнения, который не может быть найден:
findViewById(R.id.com_facebook_login_activity_progress_bar).setVisibility(8);
Похоже, что он находит его в представлении create, поэтому, возможно, что-то его разрушает, прежде чем этот код вызывается Доступен ли источник для FB SDK, чтобы я мог попробовать исправить это сам?
Обновление:
Только что подтвердил, что даже помещая исходную активность запуска Facebook в com.facebook.unity.FBUnityPlayerActivity, я получаю точно такой же сбой. Я единственный, кто видел это? Тестирование на Nexus7....
2 ответа
Обновить:
Мы все еще застряли в Android, борясь за основную деятельность, но вы можете прикрепить наш код к любой активности на вершине стека, как показано здесь:
Конфликт с тегами активности на манифесте Android: Facebook и Google Play Games в Unity3d
Мы думаем, что решили проблему конфликта ресурсов, поэтому, если вы все еще видите это, дайте нам знать.
У меня та же проблема, и ее можно обойти, используя проект Android в качестве проекта библиотеки в eclipse, содержащем только файлы res из sdk.
Удалите переопределенные файлы классов FBUnityPlayerActivity и R из jar de SDK и свяжите этот библиотечный проект с вашим проектом затмения Unity.
Наконец, переместите код FBUnityPlayerActivity OnActivityResult в свою реализацию UnityActivity OnActivityResult.
Помните, что ваш манифест должен указывать на вашу активность, а не на FBUnityPlayerActivity (тот, который вы удалили), определенный сценариями редактора sdk.
Кроме того, проверьте это http://prime31.com/docs, они утверждают:
Примечание. Существует серьезная проблема, связанная с плагинами Android, в которых внешние ресурсы хранятся в папке res. В настоящее время только 1 плагин с внешними активами может быть развернут в приложении. Это ограничение в отношении того, как активы обрабатываются с помощью Android в целом. Мы всегда ищем решение, которое не требует прямой перекомпиляции Java-кода и пока не нашло его.
Поэтому мы не можем ожидать, что у нас будет чистое решение для этого в ближайшее время.