关于flush的Facebook SDK Android AppEventsLogger NullPointerException

时间:2013-09-20 13:24:59

标签: java android facebook nullpointerexception event-tracking

我整合了当前用于Android v3.5的FacebookSDK以进行跟踪。 您可以通过致电跟踪应用安装     com.facebook.AppEventsLogger.activateApp(context,YOUR_APP_ID);

到目前为止没有问题,我可以看到这些事件显示在facebook仪表板上。 在跟踪活动或购买活动时,Facebook建议执行以下操作:

m_fbAppEventsLogger = com.facebook.AppEventsLogger.newLogger(applicationcontext);
m_fbAppEventsLogger.logPurchase(BigDecimal.valueOf(4.99), Currency.getInstance("USD"));

购买事件似乎立即被刷新,导致

09-22 15:10:04.680: D/com.facebook.AppEventsLogger(31691): Caught unexpected exception while flushing: java.lang.NullPointerException

如果我尝试发送自定义事件,如果facebook SDK决定刷新其队列中的事件,则会出现同样的错误。

我没有发现这种行为,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

你应该添加     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 到您的AndroidManifest.xml

答案 1 :(得分:2)

我对Facebook SDK的初始化与其文档中给出的示例不同。

Facebook建议您在meta-data android:name="com.facebook.sdk.ApplicationId中定义AndroidManifest.xml并在facebook_app_id中对strings.xml的值进行硬编码。如果您使用源代码管理,则通常会检入这些文件,并且通常我不想将密钥提交到远程存储库。

我使用gradle构建从外部文件中提取名为facebook_app_id的字符串资源。然后我在初始化Facebook SDK时手动定义facebook_app_id,而不是依靠库来查找它。

初始化Facebook SDK

初始化Facebook SDK(支持跟踪安装事件):

private void initialiseFacebook(Application application) {
        FacebookSdk.sdkInitialize(application);
        AppEventsLogger.activateApp(application, application.getString(R.string.facebook_app_id));
}

初始化Facebook AppEventsLogger

随后,我想记录一些Facebook App Events。我可以看到Facebook Analytics正在成功跟踪我的安装事件。但是,我每次尝试记录事件时都会返回以下错误:

  

刷新时发生意外异常:   显示java.lang.NullPointerException

对我来说,解决方案是在我的方法调用中再次手动定义facebook_app_id以创建AppEventsLogger。这解决了我的问题。

AppEventsLogger.newLogger(application, application.getString(R.string.facebook_app_id));

另外:启用SDK调试:

我发现在解决此问题时,从Facebook SDK获取更详细的日志非常有帮助。您可以使用以下代码进行配置:

FacebookSdk.setIsDebugEnabled(true);
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);

此方法还具有以下优点:允许您为每种构建类型和/或风格使用不同的facebook_app_id。