2013-04-10 105 views
0

我是新開發的android開發人員。我已經下載了facebook sdk 3.0.1,並使用示例代碼進行登錄。問題是,如果安裝了Facebook應用程序,身份驗證將失敗。 (否則它工作正常) 在按下登錄按鈕後,我到達狀態爲CLOSED_LOGIN_FAILED的onActivityResult。 當然,我沒有輸入密碼,它是通過Facebook的應用程序自動完成的,Facebook應用程序已登錄並正常運行。 我無法找到一個解決方案.. 請幫我:)Facebook登錄失敗,並安裝了Facebook應用程序

這是我的代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    instance = this; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    buttonLoginToFacebook = (Button) findViewById(R.id.buttonLoginToFacebook); 
    tvWellcome = (TextView) findViewById(R.id.tvWellcome); 

    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

    Session session = Session.getActiveSession(); 
    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(this, null, statusCallback, 
        savedInstanceState); 
     } 
     if (session == null) { 
      session = new Session(this); 
     } 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      session.openForRead(new Session.OpenRequest(this) 
        .setCallback(statusCallback)); 
     } 
    } 

    updateView(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    Session.getActiveSession().addCallback(statusCallback); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    Session.getActiveSession().removeCallback(statusCallback); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, 
      resultCode, data); 
    updateView(); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    Session session = Session.getActiveSession(); 
    Session.saveSession(session, outState); 
} 

private void updateView() { 
    Session session = Session.getActiveSession(); 
    if (session.isOpened()) { 
     Intent intent = new Intent(this, ScreenStartPage.class); 
     startActivity(intent); 
    } else { 
     buttonLoginToFacebook.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       onClickLogin(); 
      } 
     }); 
    } 
} 

private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this) 
       .setCallback(statusCallback)); 
     updateView(); 
    } else { 
     Session.openActiveSession(this, true, statusCallback); 
    } 
} 


public void onClickLogout() { 
    Session session = Session.getActiveSession(); 
    if (!session.isClosed()) { 
     session.closeAndClearTokenInformation(); 
    } 
} 

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

回答

0

你有沒有設置你的調試在Facebook上的應用程序設置dashbaord密鑰哈希和完整的類名?請參閱Getting Started with the Facebook SDK for Android文檔中的步驟5和6。

+0

是的,我做過了,如果我沒有安裝facebook應用程序,連接是否會起作用?感謝您的回覆 – Shira 2013-04-11 06:22:52

+0

我重新檢查了開發者頁面上的設置,顯然包名稱不匹配。當我修復它時,我在嘗試登錄到應用程序時發現facebook的錯誤,說明密鑰散列不匹配。我複製了他們的密鑰散列,現在它終於工作了!謝謝阿米爾! – Shira 2013-04-11 08:25:45

+0

嘿@Amir Naor我嘗試使用UILifeCycleHelper實現FB登錄流程,在某些情況下,通常包含FB響應的「mMap」字段的'data'參數爲空。爲什麼會發生這種情況? – toobsco42 2013-08-26 07:17:41

相關問題