在用户登录之前,此代码:
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,如果将来出现网络错误,也可以再次返回。我们的客户端代码一旦从服务器获得成功代码就会停止发送安装,而我们的后端只会在接收到同一设备的多次点击时计算一次安装:
问题:
- 我理解对了吗,你可以打电话给FB。PublishInstall ()在facebook用户授权之前?
- 是否有可能修复此错误?
[EDIT]:
我和一个同事找到了一个变通办法,至少对我们的情况是这样。我们检查了logcat日志,并注意到"AsyncTask"的错误。从我可以检查,Facebook Android SDK试图调用publishInstall在另一个线程,如果这是第一次调用你在你的应用程序使用AsyncTask崩溃发生。
根据这篇文章:http://grokbase.com/p/gg/android-developers/11ajf99wrs/possible-bug-in-asynctask的解决办法可能是执行一个虚拟任务通过AsyncTask"愚弄系统"。这对我们有用,应用程序不再崩溃了。希望能有所帮助。
(/编辑)如果你还在寻找答案:
FB。PublishInstall需要AuthToken?
benp说publishInstall不需要访问令牌,所以我猜根据他说的publishInstall可以在授权之前调用。
我有同样的问题,但崩溃只发生在某些设备上。有些设备只是打印错误信息而不会崩溃。
看起来,我找到了这个问题的解决方案,但为此我不得不更改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();
}