在Android中,如何处理Receiver中的facebook会话到期(SDK 3.0)

时间:2013-01-26 15:24:48

标签: android facebook-android-sdk

我正在使用facebook sdk 3.0。

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

4 个答案:

答案 0 :(得分:2)

SDK的设计使用方式与您在此处尝试的方式略有不同。您根本不需要自己处理Session对象状态。看看Scrumptious tutorial

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

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

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

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

答案 1 :(得分: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;
}

这将验证会话是否处于活动状态,如果不是,则创建一个新会话。

答案 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&在实现之前的循环机制。