我集成了当前的 FacebookSDK for Android v3.5 用于跟踪目的。 您可以通过调用跟踪应用程序安装 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 决定刷新其队列中的事件,则会发生相同的错误。
我没有发现任何关于此行为的信息,因此将不胜感激任何帮助。
最佳答案
我初始化 Facebook SDK 的方式与他们文档中给出的示例不同。
Facebook 建议您在 AndroidManifest.xml
中定义 meta-data android:name="com.facebook.sdk.ApplicationId
并为 facebook_app_id 硬编码一个值
在 strings.xml
中。如果您使用源代码管理,通常会 checkin 这些文件,并且作为一般规则,我不喜欢将我的 key 提交到远程存储库。
我使用我的 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 成功跟踪了我的安装事件。但是,我每次尝试记录事件时都会返回以下错误:
Caught unexpected exception while flushing: 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 的优势。
关于java - 刷新时 Facebook SDK Android AppEventsLogger NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18917970/