我的Facebook应用程序具有不同的应用程序标识,它基于构建的目标生产/测试环境。因此,我将ApplicationId设置为代码而不是清单。Session.openActiveSessionFromCache抛出NullPointerException
应用程序第一次启动时,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的目的是什么?是否旨在恢复已手动缓存的会话(如在方向更改期间)? –
openActiveSessionFromCache是一个简便的方法,它允许您以静默方式(无需用户交互)打开会话。如果您使用推荐的设置(其中包括在清单中设置应用程序ID),则主要使用该功能。如果你有不同的情况,那么你可能不应该使用它。 –
明白了。十分感谢你的帮助! –