我正在使用适用于 Android 的 FB API 3.0,并且正在尝试以正确的方式设置会话。
但是,似乎我做错了什么,或者说我错过了一些东西。
在我的启动器活动中,我检查是否已经有一个会话,如果它不存在我创建一个新的(如 FB 示例):
Settings.addLoggingBehavior(LoggingBehaviors.INCLUDE_ACCESS_TOKENS);
Session session = Session.getActiveSession();
if (session != null){
String sesija = session.toString();
Log.w ("ss", sesija);}
if (session == null) {
if (savedInstanceState != null) {
session = Session.restoreSession(this, null, MyGlobals.INSTANCE.statusCallback, savedInstanceState);
Log.w("No Session found", "Loading saved session as it exists");
}
if (session == null) {
session = new Session(this);
Log.w("No Session found", "CreatingNewSession");
String sesija2 = session.toString();
Log.w ("ss2", sesija2);
}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(this).setCallback(MyGlobals.INSTANCE.statusCallback));
Log.w("There is an active session", "Active Session Exists");
}
}
在这一点上,我的日志说:
10-24 09:11:52.284: W/ss(1404): {Session state:CREATED, token:{AccessToken token: permissions:[}, appId:xxxxxx}
(AppId 正确)
然后在我的片段中,我尝试使用以下代码登录 facebook:
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
Log.w("Session is not opend", "Session is not closed");
session.openForRead(new Session.OpenRequest(getActivity()).setCallback(MyGlobals.INSTANCE.statusCallback));
} else {
Session.openActiveSession(getActivity(), true, MyGlobals.INSTANCE.statusCallback);
Log.w("Open Active Session", "Status Callback");
}
此时出现FB webview,我设置了用户名并通过,它有点工作,然后消失了。
现在,我无处可去,我没有看到响应和令牌接收,如果我再次单击登录(在同一个按钮上)我的应用程序崩溃。
在日志中我有这个:
10-24 09:12:31.944: W/ss(1404): {Session state:OPENING, token:{AccessToken token: permissions:[}, appId:xxxxxx}
如果我将它与 FB 提供的 SessionLoginExample 进行比较,我会得到:
10-24 09:08:50.004: W/ss(1356): {Session state:OPENED, token:{AccessToken token:AAAFaKtb7Pg4BALYg4B5eosa0ZAE9ZAXB0ZBMFDJdNbsDsZAkGJUfKtGs71OEJikDxT2VBfo4QMXiNASz23ZAa6D76eUxW0mZAMa013HP2kxgZDZD permissions:[}, appId:xxxxxxx}
这意味着我做错了什么,因为我没有捕获返回的 AccessToken,并且它没有正确保存。
那是我认为是错误的,但我不明白我应该如何以正确的方式读取会话信息,或者说在哪里捕获和保存片段中的令牌信息。
我试图放入片段:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Boolean session = Session.getActiveSession().onActivityResult(getSherlockActivity(), requestCode, resultCode, data);
}
因为这是示例中的“onActivityResult”,但它似乎什么也没做。
总结一下:我在启动器活动后面创建会话。然后如果没有安装 FB 应用程序,在 Tab4(设置)用户应该能够使用 webview 登录到 FB。然后在 Tab1 和 Tab2 上,用户应该能够像在 Instagram 上一样将图像分享到 FB。如果安装了应用程序,我会禁用选项卡 4,并让用户使用 Tab1 和 Tab2 通过 FB 应用程序共享。
肿瘤坏死因子。
已解决:从未写过但应该众所周知的事情。当进行 FB 认证时,必须执行“On Activity Result”代码以将 Token 与 session 一起保存。但是,如果您像我一样处理片段和选项卡,则函数“onActivityResult”永远不会在片段代码中执行,而必须在处理片段/选项卡的 Activity 中执行。