Android哈希代码不匹配:实际设备上的onFacebookError,应用程序在模拟器上运行

时间:2012-08-31 09:10:12

标签: java android facebook facebook-graph-api

并提前感谢您的时间和关注!
我的Android应用程序使用facebook sdk 在模拟器上运行良好,但我在三星Galaxy S1和S2设备上得到 onFacebookError()。我希望我也可以为您提供更详细的错误输出信息,但我目前没有那些手头的调试,并检查adb logcat出错了。我知道onFacebookError()方法正在运行,因为Toast我把它放在那里显示“onFacebookError”。
直到我设法获取这些手机并调查错误并将其发布在此处,之前有人遇到过这个问题吗?当我在这里搜索这个问题时,我读到有人认为这是因为官方的Facebook应用程序安装在设备上。这是相关的吗?
敬酒e.getMessage()以获取如下错误信息:

@Override
            public void onFacebookError(FacebookError e) {
                // TODO Auto-generated method stub
                //Toast.makeText(MemoFriendActivity.this, "fbError", Toast.LENGTH_SHORT).show();
                Toast.makeText(MemoFriendActivity.this, "MSG: "+e.getMessage()+ " CODE: "+e.getErrorCode(), Toast.LENGTH_LONG).show();

            }

在S2设备上显示此消息:“MSG:ivalid_key:Android密钥不匹配。您的密钥”XXX“与应用程序设置中指定的允许密钥不匹配。请检查http://www.facebook.com/developers代码中的应用程序设置:0”


代码:

public void onClick(View v) {
    // TODO Auto-generated method stub
    if (MyUtil.fb.isSessionValid())
    {
        //button close session - log out of facebook
        try {
            MyUtil.fb.logout(getApplicationContext());
            updateGuiAccordingToState();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
    else
    {
        //login to facebook
        MyUtil.fb.authorize(this, new DialogListener() {

            @Override
            public void onFacebookError(FacebookError e) {
                // TODO Auto-generated method stub
                Toast.makeText(MemoFriendActivity.this, "fbError", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onError(DialogError e) {
                // TODO Auto-generated method stub
                Toast.makeText(MemoFriendActivity.this, "OnError", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onComplete(Bundle values) {
                // TODO Auto-generated method stub
                Editor editor = sp.edit();
                editor.putString("access_token", MyUtil.fb.getAccessToken());
                editor.putLong("access_expires", MyUtil.fb.getAccessExpires());
                editor.commit();
                getUsername();
                updateGuiAccordingToState();
            }

            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                Toast.makeText(MemoFriendActivity.this, "OnCancel", Toast.LENGTH_SHORT).show();
            }
        });
    }
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    MyUtil.fb.authorizeCallback(requestCode, resultCode, data);
}

My.Util.fb是一个静态的Facebook对象。同样,此代码适用于模拟器。有谁知道如何在设备上解决它?我希望我能尽快在设备上查找并分享。

2 个答案:

答案 0 :(得分:1)

好的,我自己得到了答案。这是android密钥的不匹配。当您从设备而不是模拟器运行应用程序时,您需要将您在开发PC上获得的哈希键替换为手机上的应用程序之一,您可以从e.getMsg的输出中获取,例如我在这里显示从您的设备获取密钥,并将其设置为facebook.com/developers中的新哈希。除了您的PC之外,您还可以添加此哈希键,以防您希望应用程序在手机和PC上运行。希望这有助于其他人。

答案 1 :(得分:0)

如果您能够在设备上看到祝酒词,请翻转值e.getMessage()以查看更详细的错误报告。