【问题标题】:Facebook SDK Android AppEventsLogger NullPointerException on flushFacebook SDK Android AppEventsLogger NullPointerException on flush
【发布时间】:2013-09-25 21:54:15
【问题描述】:

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

我没有发现任何这种行为,因此我们将不胜感激。

【问题讨论】:

  • 我也面临同样的问题。你找到解决方案了吗

标签: java android facebook nullpointerexception event-tracking


【解决方案1】:

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

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

我使用我的 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 的优点。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这并没有为我删除 NPE。
    • 您使用的是哪个 Facebook-Android-SDK-Version?我这里还有一个具有相同 id 的常量:AppEventsLogger.newLogger(getApplicationContext(), Consts.FACEBOOK_APP_ID);
    猜你喜欢
    • 1970-01-01
    • 2017-03-22
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多