我的 Facebook 应用程序有不同的应用程序 ID,具体取决于构建所针对的生产/测试环境。因此,我在代码中而不是在清单中设置 ApplicationId。
首次启动应用程序时,Session.openActiveSessionFromCache 会引发 NullPointerException(“Argument 'applicationId' cannot be 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();
}