android - Facebook 登录 Android : This app has no key hashes configured

标签 android facebook facebook-graph-api

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

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

但是,如果我在手机上注销我的设备并按下按钮使用 FB 登录,它会提示我以哪个用户身份登录,然后在我登录到我想要的用户后。登录后显示“此应用程序没有配置 key 哈希等...”

可能的问题是什么?提前致谢! :D

这是我的主要 Activity 类(class):

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

最佳答案

您必须在 Facebook 应用程序设置中配置 Android 平台特定的哈希 key 。 Facebook platform specific settings page

要获取哈希 key ,请使用以下代码 fragment 。归功于 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) {
}

关于android - Facebook 登录 Android : This app has no key hashes configured,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956008/

相关文章:

java - 根据分辨率更改 3D 模型纹理

c# - 为什么此 api 显示错误消息 "Unknown fields: gender"?

android - 获取好友列表 facebook 3.0

facebook - 从 Facebook 页面帖子的评论中查找用户 ID?

android - 接收下载管理器下载完整的 Intent 并比较 id - android

android - 如何在 Android 4.0 upper 的底部创建一个菜单

android - 如何检测用户是否喜欢 Android 上的某个 facebook 页面?

android - Facebook api 版本弃用

facebook - Instagram Insight Metrics 与 Facebook Graph API

java - 四问-计算器应用-Android Java