我的Facebook应用程序有不同的应用程序ID,基于构建所针对的生产/测试环境。因此,我在代码中而不是在清单中设置ApplicationId。
第一次启动应用程序时,Session.openActiveSessionFromCache会抛出NullPointerException(“Argument'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();
}
答案 0 :(得分:1)
在您的情况下,我不会使用openActiveSessionFromCache方法。只需使用第二种方法并使用Builder从头开始创建会话。它仍将首先使用令牌缓存,并且仅在用户之前无法登录时提示用户(或者您通过调用closeAndClearTokenInformation清除了缓存)。