Я занимаюсь разработкой приложения, в котором я могу предоставить пользователю возможность войти через Facebook. Теперь я использую firebase для этого и получаю сообщение об ошибке аутентификации при каждой попытке войти в систему. Это происходит в следующем действии, но оно говорит «Ошибка аутентификации».
Вот мой код Это моя основная деятельность: -
public class MainActivity extends AppCompatActivity {
private CallbackManager mCallbackManager;
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private TextView txtUser;
private TextView txtEmail;
private ImageView imgProfile;
private LoginButton logoutButton;
private LoginButton loginButton;
private static final String TAG = "MainActivity";
private FirebaseAuth mAuth;
PackageInfo info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
// Initialize Facebook Login button
mCallbackManager = CallbackManager.Factory.create();
LoginButton loginButton = findViewById(R.id.login_button);
loginButton.setReadPermissions("email", "public_profile");
loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "facebook:onSuccess:" + loginResult);
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "facebook:onCancel");
// ...
}
@Override
public void onError(FacebookException error) {
Log.d(TAG, "facebook:onError", error);
// ...
}
});
}
@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
if(currentUser!=null){
updateUI(currentUser);
}
}
private void updateUI(FirebaseUser currentUser) {
Toast.makeText(MainActivity.this,"Done",Toast.LENGTH_SHORT);
Intent intent = new Intent(MainActivity.this,AccountActivity.class);
startActivity(intent);
finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Pass the activity result back to the Facebook SDK
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
updateUI(null);
}
// ...
}
});
}
}
Теперь я получил свой хэш-ключ, используя следующий метод: -
try {
PackageInfo info = getPackageManager().getPackageInfo(
getPackageName(),
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest messageDigest = MessageDigest.getInstance("SHA");
messageDigest.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(messageDigest.digest(), Base64.DEFAULT));
}
}
catch (PackageManager.NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}
И поместил его в мою консоль разработчика fb. Это все еще показывает эту ошибку. Может кто-нибудь объяснить, что я здесь делаю не так?
Когда я проверял logcat, здесь показывалось сообщение: - «Произошла внутренняя ошибка. [Ключ API недействителен. Пожалуйста, передайте действительный ключ API».
Я даже не знаю, где этот ключ API был использован. Пожалуйста помоги. Спасибо