2011-04-16 115 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 

       } 
      }); 

     } 
    } 
相关问题