Android Facebook SDK在登录后不调用回调
我正在尝试在我的应用程序中创建一个处理Facebook登录的类。 我的问题是它并不是对所有的活动都有效。 在该活动中,它不调用回调。 在注销登录和授权应用程序webview后,不会触发回调。 在Logcat中打印的最后一个状态是打开 这是我的密码:Android Facebook SDK在登录后不调用回调,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,我正在尝试在我的应用程序中创建一个处理Facebook登录的类。 我的问题是它并不是对所有的活动都有效。 在该活动中,它不调用回调。 在注销登录和授权应用程序webview后,不会触发回调。 在Logcat中打印的最后一个状态是打开 这是我的密码: public void doLogin() { if ((Session.getActiveSession() == null || !Session.getActiveSession(
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;
}
public void doLogin(){
如果((Session.getActiveSession()==null | |!Session.getActiveSession().isOpened()){
列表权限=新建ArrayList();
权限。添加(“电子邮件”);
//启动Facebook登录
openActiveSession(activity,true,new Session.StatusCallback(){
//会话更改状态时的回调
@凌驾
公共无效调用(会话、会话状态、,
例外情况(例外情况){
Log.d(“Sessionstate”,state.toString());
if(session.isOpened()){
//向/me API发出请求
请求。executeMeRequestAsync(会话,
新请求。GraphUserCallback(){
@凌驾
未完成公共无效(GraphUser用户,
回应(回应){
if(prgCheckFB.isShowing())
prgCheckFB.disclose();
如果(用户!=null){
Log.e(“facebookid”,id);
剂量测量(用户);
}
}
});
}
},权限);
}
}
专用静态会话openActiveSession(活动,
布尔allowLoginUI,Session.StatusCallback回调,
列出权限){
Session.OpenRequest OpenRequest=新建Session.OpenRequest(活动)
.setPermissions(permissions).setCallback(callback);
Session Session=新建Session.Builder(activity.build();
if(SessionState.CREATED\u TOKEN\u LOADED.equals(session.getState())
||allowLoginUI){
Session.setActiveSession(Session);
openForRead(openRequest);
返回会议;
}
返回null;
}
doSomething
是一个将用户数据保存在共享首选项中的函数
有什么问题吗?该函数在某些活动中有效,但不是在所有活动中都有效。可能您在登录后忘记处理结果 在ActivityResult上检查覆盖方法 因为它将结果处理回主活动 也许这能帮你解决问题
@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);
}
在AndroidManifest.xml文件中为您的回调活动设置属性
android:noHistory=“true”
,也会导致回调方法不启动。我以一种奇怪的方式面对并解决了这个问题。
首先,它可以工作,但在我添加了其他社交登录按钮(如谷歌登录)后,我将其初始化为
CallbackManager.Factory.create();
及
LoginButton LoginButton=(LoginButton)findViewById(R.id.button_facebook);
在我将google初始化移到其他行之后,它已经被解决了
因此,简而言之,facebook登录初始化必须是直接的,没有其他代码执行。意味着你能进入登录页面吗???是的,但在登录页面完成后回调没有触发。这意味着当你按下登录按钮时,你不能登录。对!!!我想我确实登录到了FB,因为在登录页面之后e、 我被重定向到授权页面。那么您面临的问题是什么呢???先生,请保存我的一天!或者使用facebook ui helper:uiHelper.onActivityResult(请求代码、结果代码、数据、dialogCallback);API稍有更改,而不是您需要使用CallbackManager:CallbackManager.onActivityResult的会话(请求代码、结果代码、数据);我已按上述说明进行了尝试。但没有收到任何回调。它只是返回到FB登录按钮所在的页面。我尝试了此操作,它登录但不返回电子邮件值,也不进入
FacebookCallback
是否有人遇到过此问题?如何解决?花了数小时试图解决此问题。我希望我能找到答案-投票5次。添加android:noHistory=“true”
到com.facebook.FacebookActivity
AndroidManifest.xml中的活动拯救了我的一天!谢谢