繁体   English   中英

Facebook身份验证在仿真器上工作,但不在物理设备上

[英]Facebook Authentication working on Emulator, But not on physical device

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

我认为这是由于keyhash等,但我不明白这一点,以找出错误。 我做的是,我点击导出,应用程序,然后我创建一个新的密钥库(第一次,否则我使用现有的密钥库),然后我发现我的哈希键使用“keytool exportcert”等在fbook开发站点上显示。 然后我在我的Facebook帐户中输入该哈希键到应用程序中。 但有时即使密钥库密码是正确的,它说“密钥库格式”也不同,即使我在同一个应用程序之前使用它! 然后我必须创建一个新的密钥库,再次exportcert,这一切都很痛苦! 必须有一个更简单的方法吗?

有人可以解释Facebook应用程序的哈希键是如何工作的吗?

提前致谢!

我的验证码:

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

是的,我有这个问题,

它在模拟器上运行良好,在我的开发电话上工作正常,但在测试用户手机上失败了。

这与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证书的哈希键。 (详见上面的链接)。

参考:

相应的SO问题

我使用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

                }
            });

        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM