5

我的应用程序具有在服务器上发送一些内容并(需要)将其发布到 facebook 上的功能。它使用服务进行发送(对于存储数据,我使用 sqlite)。是否可以通过服务处理 facebook 会话等?我需要它,因为内容存储在数据库中的时间和发送时间可能不同(可能连接会在很长一段时间内丢失,并且在连接可用后开始发送,但只有我的应用程序的发送服务将在此激活时间)。对于这种情况,我找不到任何解决方案(好的解决方案会很棒)。请帮忙。

4

1 回答 1

4

用户必须显式授予应用程序权限,Android 服务不支持 Activity.startActivityForResult(),因此无法通过服务重新授权打开 Session 或添加新权限。

但是,如果您在应用程序的某个活动中打开/重新授权 Session,则默认情况下,Session 的状态将保存到 SharedPreferences。如果一个服务在这种情况发生后创建一个会话,它将以 SessionState.CREATED_TOKEN_LOADED 结束。如果 Session.getState() 为 CREATED_TOKEN_LOADED,则保证 Session 可以在没有 UI 的情况下进行 openForRead(),传递 null Activity 是合法的。会话将拥有您的活动保存的所有权限。

为了简化这一切,您的服务可以调用:

Session session = Session.openActiveSession(this);

如果 SharedPreferences 中没有有效令牌,则此调用返回 null。

如果您的应用程序 UI 有一个设置区域,那么首先获取存储令牌的一种简单方法是包含一个 LoginFragment 作为设置面板之一。这将让您的用户登录/注销,并应保存会话状态,以便您的服务可以在同一个应用程序中获取它。

于 2012-11-02T03:55:20.723 回答