2013-05-31 118 views
0

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

回答

1

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

+0

感谢您的反馈意见。那么openActiveSessionFromCache的目的是什么?是否旨在恢复已手动缓存的会话(如在方向更改期间)? –

+0

openActiveSessionFromCache是​​一个简便的方法,它允许您以静默方式(无需用户交互)打开会话。如果您使用推荐的设置(其中包括在清单中设置应用程序ID),则主要使用该功能。如果你有不同的情况,那么你可能不应该使用它。 –

+0

明白了。十分感谢你的帮助! –

相关问题