2014-02-28 45 views
0

我的代碼在卸載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(); 
    } 
} 

回答

2

您必須在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工作。

0

您是否在Facebook應用程序中配置了您的本機應用程序設置。如果不是,則使用您的應用程序包名稱和密鑰哈希來更新您的本機應用程序設置。然後,您將可以通過Native Facebook應用登錄。

+0

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

+0

如果一切正常,那麼它應該工作。我會建議你再次檢查facebook應用配置。 –

相關問題