Android Session.openActiveSessionFromCache引发NullPointerException

Android Session.openActiveSessionFromCache引发NullPointerException,android,facebook,authentication,Android,Facebook,Authentication,我的Facebook应用程序有不同的应用程序Id,基于构建的目标生产/测试环境。因此,我在代码中而不是在清单中设置ApplicationId 首次启动应用程序时,Session.openActiveSessionFromCache抛出NullPointerException(“参数'applicationId'不能为null”)。我捕获错误并继续使用SessionBuilder创建会话,用户登录、批准权限等 但是,在应用程序的所有后续启动中,Session.openActiveSessionFr

我的Facebook应用程序有不同的应用程序Id,基于构建的目标生产/测试环境。因此,我在代码中而不是在清单中设置ApplicationId

首次启动应用程序时,Session.openActiveSessionFromCache抛出NullPointerException(“参数'applicationId'不能为null”)。我捕获错误并继续使用SessionBuilder创建会话,用户登录、批准权限等

但是,在应用程序的所有后续启动中,Session.openActiveSessionFromCache继续抛出NullPointerException。我希望它在随后的所有启动中都能以静默方式登录用户。当ApplicationId是在代码而不是元数据中设置的时,为什么我不能访问缓存的会话

//in MyActivity.onStart()
Session session = null;
if (BuildConfig.DEBUG == true) {
    MY_FACEBOOK_APP_ID = "my debug applicationId";
} else {
    MY_FACEBOOK_APP_ID = "my release applicationId";
}

try {
    session = Session.openActiveSessionFromCache(getApplicationContext());
} catch (NullPointerException e) {
    Log.e(TAG, e.getMessage());
}
if (session == null) {
    session = new Session.Builder(getApplicationContext())
        .setApplicationId(MY_FACEBOOK_APP_ID)
        .build();
}

在您的情况下,我不会使用openActiveSessionFromCache方法。只需使用第二种方法,并使用生成器从头开始创建会话。它仍将首先使用令牌缓存,并且仅在用户之前未登录(或者您已通过调用closeAndClearTokenInformation清除了缓存)时才会提示用户。

感谢您的反馈。那么openActiveSessionFromCache的目的是什么?openActiveSessionFromCache是一种方便的方法,允许您以静默方式(无需用户交互)打开会话。它主要用于使用推荐的设置(包括在清单中设置应用程序id)。如果你有不同的情况,那么你可能不应该使用它。明白了。非常感谢你的帮助!