我从哪里得到我的客户端 ID 我从哪里得到我的客户端密钥 我一直试图在我的应用程序中使用 Firebase 身份验证,微软作为提供者使用 { {3}}。但是我在 Logcat 中遇到了一个错误说:
The supplied auth credential is malformed or has expired. [ Error getting
verification code from microsoft.com response:
error=invalid_request&error_description=AADSTS9002331:%20Application%20'8749ccd1-9dea-
4920-a0fd- 72fffdcf2b38'(AppName)%20is%20configured%20for%20use%20by%20Microsoft%20Account%20users%20only.%20Please%20use%20the%20/consumers%20endpoint%20to%20serve%20this%20request.%0D%0ATrace%20ID:%20ba459e48-3fd1-4bd4-aa88-d878701b2d02%0D%0ACorrelation%20ID:%208157e86e-8acf-459f-9f18-07734bc971bb%0D%0ATimestamp:%202021-07-20%2019:56:47Z&state=AMbdmDmMtw9NcT5fPjPkiW7M0l70V9s86Tfhc5CVrSZYKpR1Dqw3PL8LrBYVT4zU26o-J2_ydtdFjRkwI074fWaWRO6J1KDc3b2xyT9wDilWZc13d52RgdIb6dGQRXllvdlzr1yDG3pMKzDofxRGxgCXVV_psklIoKsJ159ltFoacD-ezVsqKFnEJ89jdGCwoH3ijJ4eG1DovqbfbhfQu4kZ7IFqOnvHRHVrIC4ctO05K1HJ0mUjo1yUpT6ai383xajYdK3l767FkyU4JOG5M9yD0KBULxIwoZpvXqAG8bkgEf4ht3ugiCnceooKTA7IcipK3mwuyFrQ0OkHGZVOzP3czo-NzuKMZp6uQm5ewjczf8X3hBYUGfrk70qr2b7w_gFg5xkkPEE6drQJAyMOfY-H-rM1EJqtsWehRIvhHcFjwy2c0SGBxsH1U-HLUktCfx8&providerId=microsoft.com ]
这是我的 MicrosoftAccountActivity:
package com.avs.auth;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.OAuthProvider;
import java.util.ArrayList;
public class MicrosoftAccountActivity extends AppCompatActivity {
private FirebaseAuth firebaseAuth;
private Button microsoftLoginButton;
private ArrayList<String> arrayList;
private OAuthProvider.Builder builder;
private OAuthProvider provider;
private Task<AuthResult> pendingResultTask;
private UpdateUI updateUI;
private Intent intent;
private FirebaseUser firebaseUser;
public static final String TAG = "MicrosoftAuth";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_microsoft_account);
firebaseAuth = FirebaseAuth.getInstance();
microsoftLoginButton = findViewById(R.id.microsoftLoginButton);
microsoftLoginButton.setOnClickListener(onClickListener);
}
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
builder = OAuthProvider.newBuilder("microsoft.com");
builder.addCustomParameter("prompt", "consent");
builder.addCustomParameter("login_hint", "");
builder.addCustomParameter("tenant", getString(R.string.microsoft_tenant_id));
arrayList = new ArrayList<String>();
arrayList.add("user.read");
arrayList.add("email.read");
builder.setScopes(arrayList);
provider = builder.build();
microsoftSignIn();
}
};
private void microsoftSignIn() {
pendingResultTask = firebaseAuth.getPendingAuthResult();
if (pendingResultTask != null) {
pendingResultTask.addOnSuccessListener(taskOnSuccessListener).addOnFailureListener(taskOnFailureListener);
} else {
firebaseAuth.startActivityForSignInWithProvider(this, provider)
.addOnSuccessListener(providerOnSuccessListener).addOnFailureListener(providerOnFailureListener);
}
}
private OnSuccessListener<AuthResult> taskOnSuccessListener = new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(getApplicationContext(), "Account Creation Success", Toast.LENGTH_SHORT).show();
}
};
private OnFailureListener taskOnFailureListener = new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
Log.d(TAG, e.getMessage());
Toast.makeText(getApplicationContext(), "Account Creation Failure", Toast.LENGTH_SHORT).show();
}
};
private OnSuccessListener<AuthResult> providerOnSuccessListener = new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(getApplicationContext(), "Account Created", Toast.LENGTH_SHORT).show();
firebaseUser = firebaseAuth.getCurrentUser();
updateUI = UpdateUI.updateUI(firebaseUser, TAG, firebaseUser.getDisplayName());
intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
};
private OnFailureListener providerOnFailureListener = new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
Log.d(TAG, e.getMessage());
updateUI = UpdateUI.updateUI(null, TAG, null);
Toast.makeText(getApplicationContext(), "Account Creation Failure", Toast.LENGTH_SHORT).show();
}
};
如果您问我为什么所有内容都是私密的,那是因为它是我的其他身份验证提供商错误之一 (Google) 的解决方案。
无论如何,这是我的 UpdateUI 类:
package com.avs.auth;
import android.content.SharedPreferences;
import android.util.Log;
import com.google.firebase.auth.FirebaseUser;
public class UpdateUI {
public static void updateUI(FirebaseUser user, String TAG, String userName){
if (user != null){
SharedPreferences.Editor editor = getSharedPreferences("DATA", MODE_PRIVATE).edit();
editor.putString("NAME", userName);
editor.apply();
}
else {
Log.d(TAG, "Try again");
}
}
}
我见过适用于 iOS 和 Web 的解决方案,但我使用的是 Android。
我该如何解决这个问题?
如果您需要其他详细信息,请随时发表评论。