facebook unity sdk - FB.PublishInstall() on Android



在用户登录之前,此代码:

FB.Init(() =>
{
    FB.PublishInstall();
});

导致错误:

03-14 10:55:01.241: I/Unity(6662): (Filename: ./Runtime/ExportGenerated/AndroidManaged/UnityEngineDebug.cpp Line: 54)
03-14 10:55:01.326: I/Unity(6662): Exception: java.lang.ExceptionInInitializerError
03-14 10:55:01.326: I/Unity(6662):   at UnityEngine.AndroidJNISafe.CheckException () [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at UnityEngine.AndroidJNISafe.CallStaticVoidMethod (IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args) [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at UnityEngine.AndroidJavaObject._CallStatic (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at UnityEngine.AndroidJavaObject.CallStatic (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at Facebook.AndroidFacebook.CallFB (System.String method, System.String args) [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at Facebook.AndroidFacebook.PublishInstall (System.String appId, Facebook.FacebookDelegate callback) [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at FB.PublishInstall (Facebook.FacebookDelegate callback) [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at PublishInstallController.<PublishInstall>m__87 () [0x00000] in <filename unknown>:0 
03-14 10:55:01.326: I/Unity(6662):   at Facebook.AndroidFacebook.OnInitComplete

如果用户在执行此代码之前已登录:

FB.PublishInstall();

一切顺利。

文档(步骤2:添加Facebook SDK)说:

安装SDK后,包括以下代码,当你的应用程序在前台执行。这将允许应用程序在用户第一次打开应用程序时将安装事件返回到Facebook,如果将来出现网络错误,也可以再次返回。我们的客户端代码一旦从服务器获得成功代码就会停止发送安装,而我们的后端只会在接收到同一设备的多次点击时计算一次安装:

问题:

  1. 我理解对了吗,你可以打电话给FB。PublishInstall ()在facebook用户授权之前?
  2. 是否有可能修复此错误?

[EDIT]:

我和一个同事找到了一个变通办法,至少对我们的情况是这样。我们检查了logcat日志,并注意到"AsyncTask"的错误。从我可以检查,Facebook Android SDK试图调用publishInstall在另一个线程,如果这是第一次调用你在你的应用程序使用AsyncTask崩溃发生。

根据这篇文章:http://grokbase.com/p/gg/android-developers/11ajf99wrs/possible-bug-in-asynctask的解决办法可能是执行一个虚拟任务通过AsyncTask"愚弄系统"。这对我们有用,应用程序不再崩溃了。希望能有所帮助。

(/编辑)

如果你还在寻找答案:

FB。PublishInstall需要AuthToken?

  1. benp说publishInstall不需要访问令牌,所以我猜根据他说的publishInstall可以在授权之前调用。

  2. 我有同样的问题,但崩溃只发生在某些设备上。有些设备只是打印错误信息而不会崩溃。

看起来,我找到了这个问题的解决方案,但为此我不得不更改facebook SDK的一个插件的源代码。在FB.java (com.facebook.unity.FB)文件中:

@UnityCallable
    public static void PublishInstall(String params_str) 
    {
        final UnityMessage unityMessage = new UnityMessage("OnPublishInstallComplete");
        final UnityParams unity_params = UnityParams.parse(params_str);
        if (unity_params.hasString("callback_id")) {
            unityMessage.put("callback_id", unity_params.getString("callback_id"));
        }
        if (Looper.myLooper() == null)
        {
            Looper.prepare();
        }
        AppEventsLogger.activateApp(getUnityActivity().getApplicationContext());
        unityMessage.send();
    }

最新更新