2011-04-16 62 views
6

嘿大家剛剛開發我的第一個Android應用程序登錄到Facebook,並嘗試狀態更新沒有對話框,使用圖形API。 下面的代碼是授權碼(這是在fbook dev網站本身),它一直工作得很好,直到最近。現在我的應用程序可以在我的模擬器上正常登錄,但是當我導出APK文件並將其放在手機上時,它會給我'認證錯誤'。有人可以解釋嗎?它只是不會再顯示登錄頁面,創建後一個新的keystore和hashkey AND像往常一樣更新Facebook上我的開發應用程序頁面上的hashkeyFacebook身份驗證工作在模擬器上,但不是在物理設備

我認爲這是由於keyhash等,但我不明白這一點足以找出什麼是錯誤的。我點擊導出,應用程序,然後創建一個新的密鑰庫(第一次,否則我使用現有的密鑰庫),然後在fbook dev網站上找到使用「keytool exportcert」等的hashkey,然後將該密鑰輸入到應用程序在我的Facebook帳戶上,但有時即使密鑰庫密碼是正確的,它說「密鑰庫格式」是不同的,即使我在同一個應用程序之前使用它!然後我必須創建一個新的密鑰庫,再次ortcert,所有這些都是痛苦!必須有一個更簡單的方法?

有人可以解釋一下Facebook應用程序的hashkey是如何工作的嗎?

提前致謝!

我驗證碼:

public void login() 
{ 

    facebook.authorize(this,new String[] { "email", "read_stream", "publish_stream"}, new DialogListener(){ 
     int fbcheck=0; 
     @Override 
     public void onComplete(Bundle values) { 
      fbcheck=1; 
     facebookauthcheck(fbcheck); 
     } 

     @Override 
     public void onFacebookError(FacebookError error) { 
      fbcheck=0; 
      facebookauthcheck(fbcheck); 
     } 

     @Override 
     public void onError(DialogError e) { 
     fbcheck=0; 
     facebookauthcheck(fbcheck); 
     } 

     @Override 
     public void onCancel() { 
      fbcheck=2; 
      facebookauthcheck(fbcheck); 
      } 

    }); 
} 

public void facebookauthcheck(int fbcheck) 
{ 
    if (fbcheck == 0) { 
     Toast.makeText(this, "Authentication Error", Toast.LENGTH_LONG).show(); 
    } 
    else if (fbcheck==1) 
    { 
     Toast.makeText(this, "Authenticated", Toast.LENGTH_LONG).show(); 
    } 
    else 
     Toast.makeText(this, "Authentication Cancelled", Toast.LENGTH_LONG).show(); 
} 

回答

4

是的,我有這個問題,

它能正常工作在模擬器上,我開發的手機上運行良好,但未能通過測試用戶的手機上。

這與Facebook應用程序和SSO有關。

對此有讀:http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/

它有3個解決方案。

我不能讓SSO工作,所以我去了方案二,(退出SSO的!)這是通過:

facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, this); 

如果你要修復它,並得到SSO工作:

正確地爲調試apk證書生成你的哈希鍵。 (詳見上面的鏈接)。

編號:

Corresponding SO Question

+0

感謝這個好解決,你救了我..,。 – user1690588 2012-11-03 05:21:16

+0

U也救了我,像魔術一樣工作! – TharakaNirmana 2013-05-13 11:58:36

0

我使用Facebook登錄與片段(請更換 '活動')與 '本':

private void loginToFacebook() 
    { 
     mPrefs = activity.getPreferences(Context.MODE_PRIVATE); 
     facebook = new Facebook(APP_ID); 
     accessToken = mPrefs.getString("access_token", null); 
     long expires = mPrefs.getLong("access_expires", 0); 

     if (accessToken != null) 
     { 
      facebook.setAccessToken(accessToken); 
     } 

     if (expires != 0) 
     { 
      facebook.setAccessExpires(expires); 
     } 

     if (!facebook.isSessionValid()) 
     { 
      facebook.authorize(activity, new String[] {"publish_stream"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() { 

       public void onFacebookError(FacebookError arg0) { 
        // TODO Auto-generated method stub 

       } 

       public void onError(DialogError arg0) { 
        // TODO Auto-generated method stub 

       } 

       public void onComplete(Bundle arg0) { 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", facebook.getAccessToken()); 
         editor.putLong("access_expires", facebook.getAccessExpires()); 
         editor.commit();       
         uploadPhoto(facebook, bitmap, null); // calling another method to upload an image to FB after logging in..    
       } 

       public void onCancel() { 
        // TODO Auto-generated method stub 

       } 
      }); 

     } 
    } 
相關問題