我已将 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 。
要获取哈希 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/