在Android上使用facebook SDK提供了“用户以不同的Facebook用户身份登录”。错误 [英] Using facebook SDK on Android gives "User logged in as different Facebook user." error

查看:1841
本文介绍了在Android上使用facebook SDK提供了“用户以不同的Facebook用户身份登录”。错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在升级我使用Facebook SDK到最新版本。以下代码是从Facebook自己的示例逐行提取的,可以在这里找到: https://developers.facebook.com/docs/facebook-login/android/v2.3

  import android.content.Intent; 
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import java.util.Arrays;

public class TestFb扩展FragmentActivity {

CallbackManager callbackManager;
FacebookController fbController;

@Override
public void onCreate(final Bundle savedInstanceState){
super.onCreate(savedInstanceState);

fbController = FacebookController.getInstance(this);

FacebookSdk.sdkInitialize(getApplicationContext());
final LoginManager loginManager = LoginManager.getInstance();

callbackManager = CallbackManager.Factory.create();
loginManager.registerCallback(callbackManager,new FacebookCallback< LoginResult>(){
@Override
public void onSuccess(LoginResult loginResult){
String userId = loginResult.getAccessToken()。getUserId ();
String token = loginResult.getAccessToken()。getToken();
Log.d(fb,ID:+ userId +Token:+ token);
}

@Override
public void onCancel(){
finish();
}

@Override
public void onError(FacebookException e){
Log.d(fb,Exception:+ e.getMessage());
}
});
loginManager.logInWithReadPermissions(this,Arrays.asList(new String [] {email,user_likes}));
}

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
callbackManager.onActivityResult(requestCode,resultCode,data);
}
}

问题是当用户无法使用已经在手机上登录了Facebook应用程序。在这种情况下,这会给出用户登录为不同的Facebook用户错误。



我认为,鉴于设备上已经有一个活跃的Facebook帐户,因此无法创建新帐户。但是如果是这样,我应该从现有帐户获取用户的ID和令牌?我似乎无法在Facebook的文档页面上找到任何这个问题。

解决方案

如果你想记录与现在登录在Facebook应用程序的用户,您仍然有一个有效的前一个用户的令牌,您可以检测到错误,并在您的FacebookCallback中注销,如下所示:

  @Override 
public void onError(FacebookException e){
if(e instanceof FacebookAuthorizationException){
if(AccessToken.getCurrentAccessToken()! = null){
LoginManager.getInstance()。logOut();
}
}
}

然后你可以重新登录使用LoginManager。


I'm upgrading my use of the Facebook SDK to the latest version. The following code is prety much lifted line by line from Facebook's own examples, which can be found here: https://developers.facebook.com/docs/facebook-login/android/v2.3

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import java.util.Arrays;

public class TestFb extends FragmentActivity{

    CallbackManager callbackManager;
    FacebookController fbController;

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    fbController = FacebookController.getInstance(this);

    FacebookSdk.sdkInitialize(getApplicationContext());
    final LoginManager loginManager = LoginManager.getInstance();

    callbackManager = CallbackManager.Factory.create();
    loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                String userId = loginResult.getAccessToken().getUserId();
                String token = loginResult.getAccessToken().getToken();
                Log.d("fb", "ID: " + userId + " Token: "+ token);
            }

            @Override
            public void onCancel() {
                finish();
            }

            @Override
            public void onError(FacebookException e) {
                Log.d("fb", "Exception: " + e.getMessage());
            }
        });
        loginManager.logInWithReadPermissions(this, Arrays.asList(new String[]{"email", "user_likes"}));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

The problem is that this does not work when the user has already logged in to the facebook app on his phone. In that case, this gives a "User logged in as different Facebook user" error.

I would think that given that there already is an active Facebook account on the device, a new one cannot be created. But if that was the case, should I get the user's ID and token from the existing account? I couldn't seem to be able to find any mention of this issue on Facebook's documentation pages.

解决方案

If you want to log in with the user that is now logged in on the Facebook app and you still have a token valid for a previous user, you can detect the error and log out in your FacebookCallback like this:

    @Override
    public void onError(FacebookException e) {
        if (e instanceof FacebookAuthorizationException) {
            if (AccessToken.getCurrentAccessToken() != null) {
                LoginManager.getInstance().logOut();
            }
        }
    }

Then you can log in again using the LoginManager.

这篇关于在Android上使用facebook SDK提供了“用户以不同的Facebook用户身份登录”。错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆