我正在使用 facebook sdk 3.0。
我想在接收器中使用 Facebook 会话。但是如果会话过期我该怎么办?
SDK 的设计目的与您在此处尝试执行的操作略有不同。您根本不需要自己处理Session
对象状态。看看美味的教程。
在它的身份验证部分,清楚地展示了如何处理会话状态更改。
基本上,facebook 为您提供了一堆UI 生命周期帮助程序类,您需要将它们包含在您的应用程序中需要 facebook 功能的任何地方。这些助手将确定会话是否处于活动状态、已过期等,并onSessionStateChanged()
在会话状态发生变化时调用方法。
您需要做的就是在此方法中执行简单的检查并适当地重定向用户。例如,如果会话已过期,您可以将用户重定向到一个登录页面,其中将有一个 facebook 登录按钮(此按钮由 facebook 在 SDK 中提供,它为您处理身份验证流程。它会询问用户权限,验证会话等,而无需执行任何操作)。
完成本教程一次,我相信您会有更好的理解。希望这可以帮助。
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;
}
这将验证会话是否处于活动状态,如果没有 - 创建一个新的。
在 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 和循环机制。
我发现facebook开发者网站是这样写的:</p>
可以为 Facebook 应用程序生成应用程序访问令牌。使用与其他令牌不同的登录流程生成应用访问令牌;这可以在代码中完成。
这种类型的令牌对于修改应用设置、创建和管理测试用户或读取 App Insights 数据很有用。您可以使用应用令牌代表授予您应用权限的用户发布或删除内容。例如,如果用户授予您的应用程序 publish_stream 权限,您的应用程序可以使用应用程序访问令牌代表他们发布状态更新。
除非重置 App Secret,否则 App 令牌不会过期。应用访问令牌对于每个应用都是唯一的。
所以,似乎我们不必处理这个问题。如果需要,您可以在令牌因某些问题过期时在通知栏中显示一条消息。