帮助,
我正在尝试创建一个在我的应用程序中处理facebook登录的类。 我的问题是它不适用于所有活动。 在那个活动上,它不会调用回调。 登录和授权应用程序webview被解除后,回调不会触发。 在Logcat中打印的最后一个状态是打开
这是我的代码:
public void doLogin() {
if ((Session.getActiveSession() == null || !Session.getActiveSession().isOpened())) {
List<String> permissions = new ArrayList<String>();
permissions.add("email");
// start Facebook Login
openActiveSession(activity, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state,
Exception exception) {
Log.d("Sessionstate", state.toString());
if (session.isOpened()) {
// make request to the /me API
Request.executeMeRequestAsync(session,
new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user,
Response response) {
if (prgCheckFB.isShowing())
prgCheckFB.dismiss();
if (user != null) {
Log.e("facebookid", id);
doSomething(user);
}
}
});
}
}, permissions);
}
}
private static Session openActiveSession(Activity activity,
boolean allowLoginUI, Session.StatusCallback callback,
List<String> permissions) {
Session.OpenRequest openRequest = new Session.OpenRequest(activity)
.setPermissions(permissions).setCallback(callback);
Session session = new Session.Builder(activity).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState())
|| allowLoginUI) {
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
doSomething是将共享首选项中的用户数据保存的功能。
有什么不对吗?该功能适用于某些活动,但不适用于所有活动。
谢谢
答案 0 :(得分:102)
也许你忘了在登录后处理结果......
检查覆盖方法 onActivityResult ..
因为它将结果处理回MainActivity,
也许这可以帮助你解决问题..
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
更新1
对于较新的SDK使用:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode,
resultCode, data);
}
答案 1 :(得分:6)
在AndroidManifest.xml文件中为回调活动设置属性android:noHistory="true"
也会导致回调方法未触发。
答案 2 :(得分:0)
我以一种奇怪的方式面对并解决了这个问题。 首先它可以正常工作,但是在我添加了其他社交登录按钮(例如Google登录)之后,我对其进行了初始化;
CallbackManager.Factory.create();
和
LoginButton loginButton =(LoginButton) findViewById(R.id.button_facebook);
将google初始化移至其他行后,此问题已解决。
因此,简而言之,facebook登录初始化必须直接进行,而无需执行其他代码。