当我安装Facebook应用程序时,我的自定义Facebook应用程序无法登录

问题描述:

我的代码在卸载Facebook移动应用程序时启动Facebook登录屏幕。我填写了我的用户名和密码,它一切正常。但是,当我从Facebook安装Facebook应用程序。我的应用程序弹出一个窗口,要求获得basic_info和好友列表的权限,但是我无法登录。状态为CLOSED_LOGIN_FAILED。这是我的代码。我究竟做错了什么?当我安装Facebook应用程序时,我的自定义Facebook应用程序无法登录

public class FacebookHome extends CustomActivity { 
private Session.StatusCallback statusCallback = new SessionStatusCallback(); 
private UiLifecycleHelper uiLifecycleHelper; 
private static final String TAG = "Facebook"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.facebook_home); 
    addListenerForView(R.id.facebook_home_layout); 
    uiLifecycleHelper = new UiLifecycleHelper(this, statusCallback); 
    uiLifecycleHelper.onCreate(savedInstanceState); 

} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
    if (state.isOpened()) { 
     loggingTextView.setText(getResources().getString(R.string.facebook_logout)); 
     Log.i(TAG, "Logged in..."); 
    } else if (state.isClosed()) { 
     loggingTextView.setText(getResources().getString(R.string.facebook_login)); 
     Log.i(TAG, "Logged out..."); 
    } 
} 

protected void onResume() { 
    super.onResume(); 
    Session session = Session.getActiveSession(); 
    if (session != null && 
      (session.isOpened() || session.isClosed())) { 
     onSessionStateChange(session, session.getState(), null); 
    } 

    uiLifecycleHelper.onResume(); 
} 

@Override 
protected void nonVerboseIntroduction(){ 
    speak("Facebook Main menu"); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiLifecycleHelper.onPause(); 
} 

@Override 
public void onDestroy(){ 
    super.onDestroy(); 
    uiLifecycleHelper.onDestroy(); 
} 

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

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiLifecycleHelper.onSaveInstanceState(outState); 
} 

@SuppressWarnings("deprecation") 
@Override 
public void confirmation(int selectedViewID) { 
    switch (selectedViewID) { 

    case R.id.facebook_login: 
     //This corresponds with a login button on my custom layout 
     TextView view = (TextView) findViewById(R.id.facebook_login); 
     if (view.getText().toString().matches(getResources().getString(R.string.facebook_login))) { 
      login(); 
     } else if (view.getText().toString().matches(getResources().getString(R.string.facebook_logout))) 
      exitSession(); 
     break; 
    } 
} 


private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
} 

private void login() { 
    try { 
     Session session = Session.getActiveSession(); 
     if (session == null) { 
      session = new Session(this); 
      Session.setActiveSession(session); 
      session.openForRead(new Session.OpenRequest(this) 
        .setPermissions("basic_info") 
        .setCallback(statusCallback)); 
     } else { 
      if (!session.isOpened() && !session.isClosed()) { 
       session.openForRead(new Session.OpenRequest(this) 
         .setCallback(statusCallback)); 
      } else { 
       Session.openActiveSession(this, true, statusCallback); 
      } 
     } 
    } catch (Exception ex) { 
     System.out.println(ex.toString()); 
     ex.printStackTrace(); 
    } 
} 

您必须在developer.facebook.com控制台上注册您的应用程序,如果尚未执行此操作,请转至应用程序选项卡并选择创建新应用程序,填写必要的凭据。

为什么大多数人遇到这样的问题是因为在Facebook的仪表板提供错误的散列键的

使用来自Facebook的开发人员指南下面的代码来生成哈希键,把它添加到您的应用程序的详细信息,然后它会特别是开始为你的Facebook ID工作。

try { 
    PackageInfo info = getPackageManager().getPackageInfo(
      "com.facebook.samples.hellofacebook", 
      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)); 
     } 
} catch (NameNotFoundException e) { 

} catch (NoSuchAlgorithmException e) { 

} 

,使之成为您需要的应​​用程序和它的所有功能,从状态和审核选项,住在你的应用程序几许标签的任何Facebook的ID工作。

您是否在Facebook应用程序中配置了您的本机应用程序设置。如果不是,则使用您的应用程序包名称和密钥哈希来更新您的本机应用程序设置。然后,您将可以通过Native Facebook应用登录。

+0

是的,我已经做到了。 – user3366176

+0

如果一切正常,那么它应该工作。我会建议你再次检查facebook应用配置。 –