0

我的 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();
}
4

1 回答 1

1

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

于 2013-06-05T16:49:13.050 回答