【问题标题】:Facebook Authentication working on Emulator, But not on physical deviceFacebook 身份验证在模拟器上工作,但不在物理设备上
【发布时间】:2015-04-05 12:44:02
【问题描述】:

大家好,最近刚刚开发了我的第一个 android 应用程序,它可以登录 facebook 并尝试在没有对话框的情况下使用图形 API 进行状态更新。 下面的代码是授权代码(它在 fbook 开发网站本身上),它一直对我很好,直到最近。现在我的应用程序在我的模拟器上可以正常登录,但是当我导出 APK 文件并将其放在手机上时,它给了我“身份验证错误”。有人可以解释一下吗?它只是不再向我显示登录页面,在我创建之后一个新的密钥库和哈希键,并像往常一样在我的 Facebook 开发应用页面上更新了该哈希键。

我认为这是由于 keyhash 等原因,但我不太了解,无法找出问题所在。我所做的是,我单击导出,应用程序,然后创建一个新的密钥库(第一次,否则我使用现有的密钥库),然后我使用“keytool exportcert”等找到我的哈希键,如 fbook 开发网站上所示。然后我将该哈希键输入到我的 Facebook 帐户上的应用程序中。但有时即使密钥库密码正确,它也会说“密钥库格式”不同,即使我在同一个应用程序之前使用过它!然后我必须创建一个新的密钥库,然后再次导出证书,这一切都很痛苦!一定有更简单的方法吗?

有人能解释一下 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(); 
}

【问题讨论】:

    标签: android facebook authentication


    【解决方案1】:

    是的,我遇到了这个问题,

    在模拟器上运行良好,在我的开发手机上运行良好,但在测试用户手机上失败。

    这与 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

    【讨论】:

    • 我看了那篇文章,有了这些信息,我可以成功登录设备
    【解决方案2】:

    我正在使用带有片段的 facebook 登录(请用“this”替换“activity”):

     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
    
                    }
                });
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2023-03-23
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多