facebook unity sdk 6.0 在第二次登录时崩溃应用程序

Posted

技术标签:

【中文标题】facebook unity sdk 6.0 在第二次登录时崩溃应用程序【英文标题】:facebook unity sdk 6.0 crash app at second login 【发布时间】:2014-09-09 18:02:07 【问题描述】:

使用 facebook unity sdk 6.0 创建了一个简单的应用程序。

在启动函数中调用init facebook。

有一个按钮调用登录,登录回调只是输出字符串。

在装有 android 4.4.2 的三星 Galaxy s5 上运行。

问题(100% 可重复):

 1. First time click login button, get the facebook login screen.
 2. Click exit button, back to app.
 3. Click login button again, app crashed.

故障转储:

W/dalvikvm(16020): threadid=1: thread exiting with uncaught exception (group=0x417f3da0)
V/SmartFaceService - 3rd party pause(  704): onReceive [android.intent.action.ACTIVITY_STATE/com.xxxxx.testfacebook/create]
I/SpenGestureManager(  704): setFocusWindow21055
D/PointerIcon(  704): setMouseIconStyle1 pointerType: 1001iconType:101 flag:0
D/PointerIcon(  704): setMouseCustomIcon IconType is same.101
D/PointerIcon(  704): setHoveringSpenIconStyle1 pointerType: 10001iconType:1 flag:0
D/PointerIcon(  704): setHoveringSpenCustomIcon IconType is same.1
E/AndroidRuntime(16020): FATAL EXCEPTION: main
E/AndroidRuntime(16020): Process: com.xxxxx.testfacebook, PID: 16020
E/AndroidRuntime(16020): java.lang.Error: FATAL EXCEPTION [main]
E/AndroidRuntime(16020): Unity version     : 4.5.3f3
E/AndroidRuntime(16020): Device model      : samsung SAMSUNG-SM-G900A
E/AndroidRuntime(16020): Device fingerprint: samsung/klteuc/klteatt:4.4.2/KOT49H/G900AUCU1ANCE:user/release-keys
E/AndroidRuntime(16020): 
E/AndroidRuntime(16020): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfocom.xxxxx.testfacebook/com.facebook.unity.FBUnityLoginActivity: java.lang.UnsupportedOperationException: Session: an attempt was made to open an already opened session.
E/AndroidRuntime(16020):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328)
E/AndroidRuntime(16020):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
E/AndroidRuntime(16020):    at android.app.ActivityThread.access$900(ActivityThread.java:169)
E/AndroidRuntime(16020):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
E/AndroidRuntime(16020):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(16020):    at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(16020):    at android.app.ActivityThread.main(ActivityThread.java:5476)
E/AndroidRuntime(16020):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(16020):    at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(16020):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
E/AndroidRuntime(16020):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
E/AndroidRuntime(16020):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(16020): Caused by: java.lang.UnsupportedOperationException: Session: an attempt was made to open an already opened session.
E/AndroidRuntime(16020):    at com.facebook.Session.open(Session.java:1223)
E/AndroidRuntime(16020):    at com.facebook.Session.openForPublish(Session.java:519)
E/AndroidRuntime(16020):    at com.facebook.unity.FBLogin.sessionOpenRequest(FBLogin.java:113)
E/AndroidRuntime(16020):    at com.facebook.unity.FBLogin.login(FBLogin.java:98)
E/AndroidRuntime(16020):    at com.facebook.unity.FBUnityLoginActivity.onCreate(FBUnityLoginActivity.java:14)
E/AndroidRuntime(16020):    at android.app.Activity.performCreate(Activity.java:5451)
E/AndroidRuntime(16020):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
E/AndroidRuntime(16020):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
E/AndroidRuntime(16020):    ... 11 more
W/ActivityManager(  704):   Force finishing activity com.xxxxx.testfacebook/com.facebook.unity.FBUnityLoginActivity
I/SQLiteSecureOpenHelper(27856): getWritableDatabase(pwd)
I/SQLiteSecureOpenHelper(27856): getDatabaseLocked(b,b,pwd)...
W/ActivityManager(  704):   Force finishing activity com.xxxxx.testfacebook/com.unity3d.player.UnityPlayerNativeActivity
V/SmartFaceService - 3rd party pause(  704): onReceive [android.intent.action.ACTIVITY_STATE/com.xxxxx.testfacebook/pause]
I/dumpstate(16164): begin
I/SpenGestureManager(  704): setFocusWindow0
D/EnterpriseDeviceManager(  704): ContainerId: 0
D/PointerIcon(  704): setMouseIconStyle1 pointerType: 1001iconType:101 flag:0
D/PointerIcon(  704): setMouseCustomIcon IconType is same.101
D/PointerIcon(  704): setHoveringSpenIconStyle1 pointerType: 10001iconType:1 flag:0
D/CrashAnrDetector(  704): processName: com.xxxxx.testfacebook
D/PointerIcon(  704): setHoveringSpenCustomIcon IconType is same.1
D/CrashAnrDetector(  704): broadcastEvent : com.xxxxx.testfacebook data_app_crash

【问题讨论】:

【参考方案1】:

在我的另一个帐户“Helath”上提供了一个更永久的解决方案:

http://answers.unity3d.com/questions/743523/facebook-sdk-cancelled-login-crash.html

公平点,这是我在其他网站上发布的帖子:

如果状态是“登录失败”和“关闭”,他们基本上忘记刷新会话。

如果你愿意,你可以将 facebook sdk 导入到 eclipse 中,并将 FBLogin.Java 的第 63 行从

if (SessionState.CLOSED.equals(session.getState())) 
            session = new Builder(FB.getUnityActivity()).setApplicationId(session.getApplicationId()).build();
            Session.setActiveSession(session);
        

   if (SessionState.CLOSED.equals(session.getState()) || SessionState.CLOSED_LOGIN_FAILED.equals(session.getState())) 
                session = new Builder(FB.getUnityActivity()).setApplicationId(session.getApplicationId()).build();
                Session.setActiveSession(session);
            

然后将项目导出为 jar,仅包括类文件,作为 Plugins/Android/facebook/bin 文件夹中的 classes.jar。

编辑:如果我上传我正在使用的 classes.jar 可能会更容易...在此处下载:http://speedy.sh/QPgUp/classes.jar 并将其放在 Plugins/Android/facebook/bin 文件夹中。

编辑 2:如果您仍然遇到此问题,Facebook 似乎已在 2014 年 10 月 20 日发布了他们的修复程序。所以现在更新到他们最新的 sdk 解决了这个问题!

【讨论】:

【参考方案2】:

找到了一个有趣的解决方案。

就像我在 James Baxter 的回答中评论的那样,如果您在登录前每次都调用 init,即使您得到“FB.Init() 已经被调用,也不会崩溃。您只需调用一次且仅一次。 "错误。

但是,根据文档,“这个函数在对象的生命周期内只能被调用一次;以后的调用会导致未定义的行为。”。

物体是指场景?还是其他游戏对象?

【讨论】:

这个解决了一个问题。但是,如果您成功登录并注销,然后您再次登录,它会崩溃。它仅适用于登录、取消和登录循环。 所以这似乎是重要的 SDK 错误 - 希望 Facebook Unity 团队尽快修复此问题。感谢您提供部分解决方法。 @LeoLiang,您是否已经向 facebook 开发人员报告了这个错误?可以分享一下这个问题的链接吗?

以上是关于facebook unity sdk 6.0 在第二次登录时崩溃应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Graph C# SDK Ver 6.0:无法在应用页面上创建事件

Facebook UNITY SDK 登录问题

Facebook Unity SDK 如何为(喜欢 Facebook 页面)添加点赞按钮?

Android上的Unity Facebook SDK登录错误

Facebook Unity SDK 测试用户登录

Facebook Unity SDK Invitable_friends API 问题