3

我正在使用 facebook sdk 3.0。

我想在接收器中使用 Facebook 会话。但是如果会话过期我该怎么办?

4

4 回答 4

2

SDK 的设计目的与您在此处尝试执行的操作略有不同。您根本不需要自己处理Session对象状态。看看美味的教程

在它的身份验证部分,清楚地展示了如何处理会话状态更改。

基本上,facebook 为您提供了一堆UI 生命周期帮助程序类,您需要将它们包含在您的应用程序中需要 facebook 功能的任何地方。这些助手将确定会话是否处于活动状态、已过期等,并onSessionStateChanged()在会话状态发生变化时调用方法。

您需要做的就是在此方法中执行简单的检查并适当地重定向用户。例如,如果会话已过期,您可以将用户重定向到一个登录页面,其中将有一个 facebook 登录按钮(此按钮由 facebook 在 SDK 中提供,它为您处理身份验证流程。它会询问用户权限,验证会话等,而无需执行任何操作)。

完成本教程一次,我相信您会有更好的理解。希望这可以帮助。

于 2013-02-19T06:50:19.887 回答
0

您是否尝试过https://github.com/facebook/facebook-android-sdk/blob/master/samples/GraphApiSample/src/com/facebook/samples/graphapi/GraphApiSampleActivity.java#L136-L142的代码

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;
}

这将验证会话是否处于活动状态,如果没有 - 创建一个新的。

于 2013-02-16T14:25:07.307 回答
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 和循环机制。

于 2013-02-18T10:23:37.457 回答
0

我发现facebook开发者网站是这样写的:</p>

可以为 Facebook 应用程序生成应用程序访问令牌。使用与其他令牌不同的登录流程生成应用访问令牌;这可以在代码中完成。

这种类型的令牌对于修改应用设置、创建和管理测试用户或读取 App Insights 数据很有用。您可以使用应用令牌代表授予您应用权限的用户发布或删除内容。例如,如果用户授予您的应用程序 publish_stream 权限,您的应用程序可以使用应用程序访问令牌代表他们发布状态更新。

除非重置 App Secret,否则 App 令牌不会过期。应用访问令牌对于每个应用都是唯一的。

关于访问令牌的源网页

所以,似乎我们不必处理这个问题。如果需要,您可以在令牌因某些问题过期时在通知栏中显示一条消息。

于 2013-02-17T14:44:06.700 回答