Android Facebook Unity SDK登录速度非常慢,有时会崩溃

Android Facebook Unity SDK登录速度非常慢,有时会崩溃,android,unity3d,facebook-unity-sdk,Android,Unity3d,Facebook Unity Sdk,我在6.1中注意到了这个问题,但它在降级到6.0后仍然存在 在一些Android设备上,Facebook登录窗口需要很长时间才能显示。加载图标间歇性显示,然后Facebook窗口最终显示,或者游戏崩溃 问题是前后不一致的,但我认为有时它在试图显示Facebook窗口时崩溃,有时它在返回游戏时崩溃 下面是我的一个测试人员的崩溃报告: java.lang.Error:致命异常[main]Unity版本:4.6.0b21 设备型号:摩托罗拉XT1032设备指纹: 摩托罗拉/falcon_retgb/f

我在6.1中注意到了这个问题,但它在降级到6.0后仍然存在

在一些Android设备上,Facebook登录窗口需要很长时间才能显示。加载图标间歇性显示,然后Facebook窗口最终显示,或者游戏崩溃

问题是前后不一致的,但我认为有时它在试图显示Facebook窗口时崩溃,有时它在返回游戏时崩溃

下面是我的一个测试人员的崩溃报告:

java.lang.Error:致命异常[main]Unity版本:4.6.0b21 设备型号:摩托罗拉XT1032设备指纹: 摩托罗拉/falcon_retgb/falcon_umts:4.4.4/KXB21.14-L1.40/36:用户/发布密钥

原因:java.lang.RuntimeException:传递结果失败 ResultInfo{who=null,request=64206,result=-1,data=Intent{(has) 附加)}}}到活动 {com.companyname.gamename/com.facebook.unity.FBUnityLoginActivity}: java.lang.NullPointerException:尝试调用虚拟方法 'boolean com.facebook.Session.onActivityResult(android.app.Activity, int,int,android.content.Intent)“”在 android.app.ActivityThread.deliverResults(ActivityThread.java:3432)位于 android.app.ActivityThread.handleSendResult(ActivityThread.java:3475) 在android.app.ActivityThread.access$1300(ActivityThread.java:139) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258) 位于android.os.Handler.dispatchMessage(Handler.java:102) Looper.loop(Looper.java:136)位于 android.app.ActivityThread.main(ActivityThread.java:5086)位于 java.lang.reflect.Method.invoke(本机方法)位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)的 by:java.lang.NullPointerException:尝试调用虚拟方法 'boolean com.facebook.Session.onActivityResult(android.app.Activity, int,int,android.content.Intent)“”在 com.facebook.unity.FBLogin.onActivityResult(FBLogin.java:245)位于 com.facebook.unity.FBUnityLoginActivity.onActivityResult(FBUnityLoginActivity.java:25) 位于android.app.Activity.dispatchActivityResult(Activity.java:5446) android.app.ActivityThread.deliverResults(ActivityThread.java:3428) ... 9更多

以下是登录在我的设备上崩溃时出现的logcat警告和错误:


p、 很抱歉,这个问题读起来像一个bug报告,而不是一个问题。Facebook要求用户通过堆栈溢出报告反馈和错误。

我找出了导致此问题的原因。虽然我不确定我所做的是否是错误的,或者是否有bug

我通过引用MonoBehavior的实例和方法来传递回调方法。似乎对回调的引用有时会以这种方式丢失。如果我只是传递一个对该方法的引用,它就可以正常工作

// instance is a reference to this instance of monobehaviour

// this sometimes crashes
public static void TryFBLogin() {
    if (instance != null && FB.IsInitialized) {
        FB.Login("public_profile,user_friends", instance.OnFBLoginAttempted);
    }
}

// this works
public void TryFacebookLogin() {
    if (FB.IsInitialized) {
        FB.Login("public_profile,user_friends", OnFBLoginAttempted);
    }
}

这是可行的还是问题有时还会重现?根据您发布的错误,这听起来与您更改的代码完全无关。在这种情况下,它似乎起了作用。你可能是对的。我从错误信息中认为这可能是相关的,但这只是一个猜测。我想更改这段代码的唯一原因是因为错误显示它找不到回调,而这是我代码中唯一相关的回调,否则可能是Facebook代码中的问题?这不是问题的原因。我们也遇到了这个问题;要复制它,请启用“不保留活动”开发人员选项。对于“干净”复制,使用Unity FB SDK包中的调试控制台示例,其中包含一个空的Unity项目;它将重现,尽管使用了第二种方法(无实例引用)。