6

我集成了当前的 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 决定刷新其队列中的事件,则会发生相同的错误。

我没有发现这种行为,所以任何帮助将不胜感激。

4

2 回答 2

3

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

Facebook 建议您定义meta-data android:name="com.facebook.sdk.ApplicationIdin并硬编码inAndroidManifest.xml的值。如果您使用源代码控制,这些文件通常会被签入,并且作为一般规则,我不喜欢将我的密钥提交到远程存储库。facebook_app_idstrings.xml

facebook_app_id我使用我的 gradle 构建从外部文件中提取了一个名为 的字符串资源。然后我在初始化 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 应用事件。我可以看到我的安装事件已被 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 的优点。

于 2017-01-25T16:33:45.297 回答
2

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

于 2013-11-04T12:47:45.053 回答