Facebook登录Android:此应用程序没有配置密钥哈希

时间:2017-05-13 17:27:54

标签: android facebook facebook-graph-api

我已将Facebook登录集成到我的应用程序中,但通过测试我发现了一个错误,我不确定是什么问题。

如果我的帐号已登录到设备中,我点按按钮登录Facebook,它会提示“继续作为您的用户名”对话框,它可以正常工作。

但是如果我在手机上退出我的设备并按下按钮以使用FB登录,它将提示我以哪个用户登录,并在我登录到我想要的用户之后。登录后显示“此应用程序没有配置密钥哈希等...”

可能出现什么问题?提前致谢! :d

这是我的主要活动课程:

//Keys for Sharedpreferences
public static final String SHARED_PREF_NAME = "myloginapp";
public static final String EMAIL_SHARED_PREF = "email";
public static final String LOGGEDIN_SHARED_PREF = "loggedin";
private boolean loggedIn = false;

//FACEBOOK SDK
TextView text,userID,accessToken;
Button loginButton;
CallbackManager callbackManager;

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

 //FACEBOOK SDK
    text = (TextView) findViewById(R.id.text);
    loginButton = (Button) findViewById(R.id.login_button);
   callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            GraphRequest request = GraphRequest.newMeRequest(
                    AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {

                        private  String uid,email,name;

                        @Override
                        public void onCompleted(
                                JSONObject object,
                                GraphResponse response) {
                            try {
                                uid = object.getString("id");
                                email = object.getString("email");
                                name = object.getString("name");

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                            SharedPreferences sharedPreferences = MainActivity.this.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            editor.putBoolean(LOGGEDIN_SHARED_PREF, true);
                            editor.putString(EMAIL_SHARED_PREF, email);
                            editor.commit();

                            Intent intent = new Intent(MainActivity.this, userPage.class);
                            intent.putExtra("username", email);
                            startActivity(intent);
                            finish();
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender");
            request.setParameters(parameters);
            request.executeAsync();
        }
        @Override
        public void onCancel() {
        }
        @Override
        public void onError(FacebookException error) {
        }
    });


    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("email"));
        }
    });

    }


@Override
protected void onResume() {
    super.onResume();

    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);

    loggedIn = sharedPreferences.getBoolean(LOGGEDIN_SHARED_PREF, false);

    if(loggedIn){
        Intent intent = new Intent(MainActivity.this, userPage.class);
        startActivity(intent);
    }
}

1 个答案:

答案 0 :(得分:2)

您必须在Facebook App设置中配置Android平台特定的哈希密钥。Facebook platform specific settings page

要获取哈希键,请使用以下代码段.Credit到Tarik

 try {
        PackageInfo info =     getPackageManager().getPackageInfo("MY PACKAGE NAME",     PackageManager.GET_SIGNATURES);
        for (android.content.pm.Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
            Log.e("MY KEY HASH:", sign);

        }
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
相关问题