救命,
我正在尝试创建一个在我的应用程序中处理facebook登录的类.我的问题是它不适用于所有活动.在那个活动上,它不会调用回调.登录和授权应用程序webview被解除后,回调不会触发.在Logcat中打印的最后一个状态是打开
这是我的代码:
public void doLogin() { if ((Session.getActiveSession() == null || !Session.getActiveSession().isOpened())) { Listpermissions = new ArrayList (); 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 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是将共享首选项中的用户数据保存的功能.
有什么不对的吗?该功能适用于某些活动,但不适用于所有活动.
谢谢
也许你忘了在登录后处理结果...
检查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); }
在android:noHistory="true"
AndroidManifest.xml文件中为回调活动设置属性也会导致回调方法未触发.