2016-01-06 188 views
0

我正在將Facebook登錄集成到我的應用中。登錄工作,但是當我註銷並嘗試重新登錄時,出現以下錯誤: 「密鑰散列無效。密鑰散列」...「與任何存儲的密鑰散列不匹配。 http://developers.facebook.com/apps/ ...「Android通過Facebook登錄

錯誤只發生在我第二次嘗試登錄後。 以下是我使用的代碼。我哪裏錯了?

public class LoginActivity extends AppCompatActivity { 
    private CallbackManager mCallbackManager; 
    private LoginButton loginButton; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(this.getApplicationContext()); 

     setContentView(R.layout.activity_login); 

     mCallbackManager = CallbackManager.Factory.create(); 

     LoginManager.getInstance().registerCallback(mCallbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         Log.i("LOGINFACEBOOK", "onSuccess? " + loginResult.toString()); 
        } 

        @Override 
        public void onCancel() { 
         Log.i("LOGINFACEBOOK", "onCancel"); 
        } 

        @Override 
        public void onError(FacebookException exception) { 
         Log.i("LOGINFACEBOOK", "onError? " + exception.toString()); 
        } 
       }); 

     LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
     loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.i("LOGINFACEBOOK", "loginButton onSuccess? " + loginResult.toString()); 
      } 

      @Override 
      public void onCancel() { 
       Log.i("LOGINFACEBOOK", "loginButton onCancel"); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.i("LOGINFACEBOOK", "loginButton onError? " + error.toString()); 
      } 
     }); 
    } 

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

這個標準的facebook實現。只需記下或OR日誌/警報在吐司/錯誤中顯示的hashkey並將其放入您的網站facebook應用程序哈希鍵。 – Ajinkya

+0

沒有工作。我把錯誤中出現的哈希放在Facebook上的APP中,但仍然看到相同的錯誤。 奇怪的是,它第一次實現登錄時起作用。 –

+0

還有一個信息。卸載Facebook應用程序無法正常測試和運行。當我點擊Facebook loginButton時,它會打開webview並正常運行。 –

回答

0

嘗試關注these intructions,發佈此問題的用戶遇到了您的問題。

摘要溶液的:

關注這個步驟:

在OnCreate中粘貼以下代碼()。

try { 
    PackageInfo info = getPackageManager().getPackageInfo(
      "com.example.packagename", 
      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) { 

} 

修改「com.example.packagename」在沒有失敗上述編碼您的包名(您可能發現在Android清單文件的包名)。

運行您的應用程序。轉到您粘貼上述代碼的活動。在logcat中搜索「KeyHash」。你可能會發現一個關鍵的散列。複製密鑰散列並轉到Facebook應用程序儀表板頁面。轉到設置並輸入詳細信息。

一旦你完成上述步驟。重新啓動應用程序,您現在可以登錄到Facebook。有關密鑰散列檢查的更多詳細信息,請參閱鏈接

如果在設置頁面中添加了錯誤的信息,則表示會出現一些錯誤。所以請使用正確的信息。此外,如果公衆(除您以外)需要使用您的應用程序,則需要啓用權限(在設置旁邊的「狀態&評論」中更改「是」)。