Cap*_*emo 7 android oauth-2.0 firebase firebase-authentication firebaseui
我有一个工作的Android应用程序(也许更好地说HAD).
该应用程序正在使用一些第三方库,包括:Google地图,Firebase,firebaseui.在转换应用程序以使用新的firebase后,我偶然发现了两个主要问题:
这当然与旧的完全不同,并且出于与调试构建变体不同的一些奇怪的原因.
com.google.firebase.FirebaseException:发生了内部错误.[找不到服务器配置中的OAuth2客户端ID.]
同样,这个问题在调试变体中没有发生.
为了清楚起见,调试版本变体使用相同的代码库,但使用不同的firebase数据库.
对于以下错误:
com.google.firebase.FirebaseException:发生了内部错误.[找不到服务器配置中的OAuth2客户端ID.]
您必须首先访问凭据类别(https://console.developers.google.com/apis/credentials)中的Google开发人员控制台,然后找到名为"Web客户端(自动创建)"的自动生成的OAuth 2.0客户端ID Google服务)",保留与此客户端ID相关的数据.
在"Auth"类别中转到Firebase控制台,然后转到"连接模式"选项卡,打开Google身份验证设置,最后展开Web SDK设置.现在粘贴以前找到的OAuth客户端ID及其密钥并保存设置.
更改的设置是关于Web设置,但它似乎由Firebase android组件使用.
通过 New Firebase,他们改变了很多代码和做事的方式。
现在,当您设置 Firebase 项目时,它们会为您提供输入 AuthId 的选项,您可以下载 JSON 并将其粘贴到您的应用程序中。
设置 ClientId 后,您可以添加此代码以使您的 Google 登录重新恢复工作。
Button signInButton;
//Google Variables
private static final int RC_SIGN_IN = 9001;
private GoogleApiClient mGoogleApiClient;
//Firebase Variables
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
//Inside OnCreate();
//Google SignIn Methods
// [START config_signin]
// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
// [END config_signin]
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mAuth = FirebaseAuth.getInstance();
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
updateUI(user);
}
};
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthStateListener);
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
if(mAuthStateListener != null) {
mAuth.removeAuthStateListener(mAuthStateListener);
}
mGoogleApiClient.disconnect();
}
// [START onactivityresult]
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
} else {
// Google Sign In failed, update UI appropriately
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
}
}
// [END onactivityresult]
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
// [END auth_with_google]
// [START signin]
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
// [END signin]
private void updateUI(FirebaseUser user) {
if (user != null) {
//write what you want to do after login here
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// An unresolvable error has occurred and Google APIs (including Sign-In) will not
// be available.
Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show();
}
public void GoogleSignIn(View v){
signIn();
}
@Override
protected void onRestart() {
super.onRestart();
mGoogleApiClient.connect();
}
Run Code Online (Sandbox Code Playgroud)
这对于在我的应用程序中使用 Firebase 进行 Google 身份验证完全正常
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |