我正在使用facebook sdk 3.0。
我想在接收器中使用Facebook Session。 但如果会话到期,我该怎么办?
答案 0 :(得分:2)
SDK的设计使用方式与您在此处尝试的方式略有不同。您根本不需要自己处理Session
对象状态。看看Scrumptious tutorial。
在它的身份验证部分,清楚地显示了如何处理会话状态更改。
基本上,facebook为您提供了一系列 UI生命周期帮助程序类,您需要在应用程序中的任何位置包含Facebook功能。这些帮助程序将确定会话是否处于活动状态,是否已过期等,并在会话状态发生更改时调用方法onSessionStateChanged()
。
您需要做的就是在此方法中执行简单检查并适当地重定向用户。例如,如果会话已过期,您只需将用户重定向到登录页面,其中将有一个Facebook登录按钮(此按钮由SDK在SDK中提供,它为您处理身份验证流程。它将询问用户权限,在不需要做任何事情的情况下验证会话等。
完成本教程一次,我相信你会有更好的理解。希望这会有所帮助。
答案 1 :(得分:0)
private Session createSession() {
Session activeSession = Session.getActiveSession();
if (activeSession == null || activeSession.getState().isClosed()) {
activeSession = new Session.Builder(this).setApplicationId(applicationId).build();
Session.setActiveSession(activeSession);
}
return activeSession;
}
这将验证会话是否处于活动状态,如果不是,则创建一个新会话。
答案 2 :(得分:0)
我发现facebook开发者网站说了以下内容:
可以为Facebook Apps生成应用访问令牌。使用与其他令牌不同的登录流程生成应用程序访问令牌;这可以在代码中完成。
此类令牌可用于修改应用设置,创建和管理测试用户或阅读App Insights数据。您可以使用应用令牌代表授予您应用权限的用户发布或删除内容。例如,如果用户授予您的app publish_stream权限,则您的应用可以使用应用访问令牌代表他们发布状态更新。
除非重置App Secret,否则App令牌不会过期。应用访问令牌对每个应用都是唯一的。
source web page about access token
所以,似乎我们不必处理这个问题。 如果需要,您可以在令牌过期时由于某些问题在通知栏上显示消息。
答案 3 :(得分:0)
在facebook android sdk 3.0中,如果会话已过期,则需要使用现有令牌重新打开会话。除了活动(ui线程上下文)之外,你也可以这样做。
重新开启已过期的会话
public void openSession(Context context)
{
Looper.prepare()
Session session = new Session(context, APP_ID, null, true);
session.openWithImportedAccessToken(accessToken, new Date(tokenExpiryTime), new Date(tokenExpiryTime), AccessTokenSource.FACEBOOK_APPLICATION, Arrays.asList(APP_PERMISSIONS), null);
Looper.loop()
}
请阅读looper.prepare&在实现之前的循环机制。