facebook登录失败:{会话状态:CLOSED_LOGIN_FAILED,令牌:{AccessToken令牌:ACCESS_TOKEN_REMOVED权限:},appId:131 *** 64547}

我尝试使用fb执行此代码登录我的应用程序。

public class FacebookLogin2Activity extends BaseActivity { private String TAG = "MainActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.facebook_login); Session session = Session.getActiveSession(); if (session != null && session.isOpened()) { fetchUserDetails(session); } LoginButton authButton = (LoginButton) findViewById(R.id.authButton); authButton.setOnErrorListener(new OnErrorListener() { @Override public void onError(FacebookException error) { Log.e(TAG, "Error " + error.getMessage()); } }); // set permission list, Don't forget to add email authButton.setReadPermissions(Arrays.asList("basic_info", "email", "birthday")); // option A // Session.openActiveSession(this, true, new Session.StatusCallback() { // // // callback when session changes state // @Override // public void call(Session session, SessionState state, // Exception exception) { // fetchUserDetails(session); // } // }); // // option B // session state call back event authButton.setSessionStatusCallback(new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { fetchUserDetails(session); } } }); } private void fetchUserDetails(Session session) { Log.i(TAG, "Access Token" + session.getAccessToken()); Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { //some code } } }).executeAsync(); } 

但是我得到了这个错误

我该怎么检查?

 {Session state:CLOSED_LOGIN_FAILED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:131390430364547} 

我已经validationFacebook开发者在网站上有我的android哈希码。

 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // start Facebook Login Session.openActiveSession(this, true, new Session.StatusCallback() { // callback when session changes state @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { // make request to the /me API Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { // callback after Graph API response with user object @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { TextView welcome = (TextView) findViewById(R.id.welcome); welcome.setText("Hello " + user.getName() + "!"); } } }); } } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } } 

检查你的Manifest.xml

   

和你的strings.xml有

  131390430364547 

validation您的Facebook应用配置中的app_id是否相同,并在“类”字段中设置“yourApp.mainactivity”

它是debbug应用程序或发布的应用程序? 每个哈希码都不同

编辑*

用于validation会话的状态

 private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); if (session.isOpened()) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); Log.e("user", "session established"); Request.newMeRequest(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { Log.e("user", "loged user"); buildUserInfoDisplay(user); } } }).executeAsync(); } else{ Log.e("user", "session not established"); } } private void onSessionStateChange(Session session, SessionState state, Exception exception) { } }; 

并在on create方法中使用登录按钮

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build(); StrictMode.setThreadPolicy(policy); uiHelper = new UiLifecycleHelper(this, callback); uiHelper.onCreate(savedInstanceState); setContentView(R.layout.login); buttonLoginLogout = (LoginButton)findViewById(R.id.authButton); buttonLoginLogout.setReadPermissions(Arrays.asList("user_status")); } } 

还需要管理al生命周期方法中的ui状态

 public void onResume() { super.onResume(); uiHelper.onResume(); } public void onPause() { super.onPause(); uiHelper.onPause(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } 

我有一个这个登录的应用程序正如我发布它,它恶劣,Facebook开发者控制台正在跟踪用户的会话。 试试吧 !

可能有很多原因:

  1. 密钥哈希错误。 从facebook提供的代码中生成一个:

     PackageInfo info = getPackageManager().getPackageInfo("", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures){ MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } 

    确保将""替换为相应的包名称。 查看logcat并抓住keyhash并在facebook应用程序设置中输入。

  2. 打开Facebook本机应用程序,确保您已正确登录并可以访问内容。 如果您在Facebook本机应用程序中输入了不正确的凭据(可能您最近更改了密码),那么Facebook SDK将反复尝试使用本机应用程序执行SSO并报告CLOSED_LOGIN_FAILED

  3. 如果您在沙盒模式下使用Facebook应用程序,请确保您使用的帐户位于授权管理员或开发人员列表中。