构建到apk后无效的密钥哈希以及如何为许多设备解决这个问题?

时间:2015-08-24 00:45:04

标签: android facebook hash

我已经建立了一个"登录Facebook"我的应用程序的按钮,它在虚拟设备中正常工作,但在我将我的应用程序构建到apk并在真实设备上测试后,出现了问题"无效的密钥哈希。密钥哈希lULhSMXXXXXXXXXX与任何存储的密钥哈希都不匹配。在http://developers.facebook.com/apps/XXXXXXX配置您的应用密钥哈希值。 然后我去developers.facebook.com/apps/XXXXXXX并将密钥哈希lULhSMXXXXXXXXXXXX添加到设置中并且它正常工作。所以我有一个问题,如果我在许多不同的设备上安装我的应用程序,我该如何制作"使用Facebook登录"按钮工作,而不必像这样为每个设备添加密钥哈希。谢谢。这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList("email"));

    callbackManager = CallbackManager.Factory.create();
    loginButton.registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                    loginFacebook(loginResult);
                }

                @Override
                public void onCancel() {
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                }
            });

private void loginFacebook(final LoginResult loginResult) {
    GraphRequest request = GraphRequest.newMeRequest(
            loginResult.getAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {

                    String userId = null;
                    String name = null;
                    try {
                        userId = object.getString("id");
                        name = object.getString("name");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }



                    Profile profile = Profile.getCurrentProfile();
                    Log.d("Shreks Fragment onSuccess", "" + profile);

                    Intent i = new Intent(LoginActivity.this, Intent.class);
                    startActivityForResult(i, 0);
                    finish();
                }
            });
    request.executeAsync();

}

1 个答案:

答案 0 :(得分:1)

我们必须在Facebook开发者处添加三个关键哈希值。

1.在Android应用程序中使用包管理器。

keytool -exportcert -alias androiddebugkey -keystore C:\Users\username\.android\debug.keystore | C:\openssl-0.9.8k_X64\bin\openssl sha1 -binary | C:\openssl-0.9.8k_X64\bin\openssl base64

2.使用命令行调试密钥

keytool -exportcert -alias app_alias -keystore C:\Users\usename\app_keysrore.jks | C:\openssl-0.9.8k_X64\bin\openssl sha1 -binary | C:\openssl-0.9.8k_X64\bin\openssl base64

3.使用命令行释放密钥

yum install qemu-system-arm qemu

请添加所有关键哈希并再次检查。

注意

  1. 你必须在同一台机器上生成所有这些键 用于使用密钥库对APK进行签名。
  2. 我们必须添加两个调试键哈希值,因为包产生的键 经理和命令行不同。