所以我陷入了这个令人沮丧的问题。我对Firebase上的Google Auth很新,但是我完成了firebase文档指示如何集成Google SignIn Auth的所有内容,但我仍然在控制台中收到这个奇怪的错误,包括两部分:
12-03 11:07:40.090 2574-3478/com.google.android.gms E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE
并且
Google sign in failed com.google.android.gms.common.api.ApiException: 10:
在任何人试图指出先前已经在堆栈溢出问题上提出的类似问题之前,这是我在看到所有可用解决方案之后到目前为止所做的事情但尚未解决错误
这是我的代码片段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
ButterKnife.bind(this);
String webClientId = getString(R.string.web_client_id);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(webClientId)
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
googleLoginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try{
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e);
// [START_EXCLUDE]
Toast.makeText(this, "Gooogle Auth failed", Toast.LENGTH_LONG);
// [END_EXCLUDE]
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
// [START_EXCLUDE silent]
//showProgressDialog();
// [END_EXCLUDE]
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
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();
Toast.makeText(LoginActivity.this, "Successful Auth", Toast.LENGTH_LONG).show();
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
//updateUI(null);
}
// [START_EXCLUDE]
//hideProgressDialog();
// [END_EXCLUDE]
}
});
}
基本上问题是在控制台上的SHA1
键请重新生成并重新放入相同的项目。
1)作为答案,请确保您的实际签名的Android apk
具有与您在Firebase项目的Android集成部分(您可以下载SHA1
的页面)的控制台中指定的google-services.json
指纹相同的指纹
2)最重要的是转到firebase项目的设置(左上角区域概述右侧的齿轮图标。然后切换到帐户链接选项卡。在该选项卡上将Google Play链接到您的项目。
我面临同样的问题,在检查解决方案后,从重新生成指纹到将firebase上的应用程序链接到Google Play控制台并发布已签名的apk,问题实际上是因为我使用的是发布版SHA-1 firebase控制台。
https://developer.android.com/studio/publish/app-signing.html
使用Google Play和Firebase的应用签名时,您需要将应用签名证书(在Google Play控制台/版本管理/应用签名证书中找到)的SHA-1指纹添加到Firebase控制台/设置/ SHA证书指纹中
在我的情况下,SHA-1
没有问题
我用GoogleAuth
做了Firebase
。
我忘了添加implementation 'com.firebaseui:firebase-ui-auth:4.3.1'
我把自己的钥匙而不是R.string.default_web_client_id
,所以这就是问题所在。我添加了上面的依赖项并用我自己的密钥替换R.string.default_web_client_id
。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
如果所有配置在firebase中都有效,例如SHA-1,并且您导入了正确的google-services.json文件仍然会出现错误,那么在firebase控制台中添加支持电子邮件
您必须在防火基础控制台中添加支持电子邮件转到项目 - >设置 - >常规 - >公共设置添加支持电子邮件
我不确定这是否是原因,但我们可能需要在发布之前使用Android应用程序中的Web客户端ID,请阅读以下文章,
https://android-developers.googleblog.com/2016/03/registering-oauth-clients-for-google.html
我正在处理这个问题2天!问题是我使用的clientId,是android类型,而我不得不使用Web Aplication类型Clientid。如果你有同样的问题请考虑这个;)
在我的情况下一切都很好,但错误10仍然发生,我试图做的是“简单”我先打电话给firebase sdk,就像
private val onActivityResultGoogleCode = 1000
private lateinit var mGoogleSignInClient: GoogleSignInClient
private fun mAuth():FirebaseAuth{
return FirebaseAuth.getInstance()
}
public override fun onStart() {
super.onStart()
mAuth().addAuthStateListener(mAuthState())
if(mAuth().currentUser!=null){
// logged
}else{
// You already instantiated 'FirebaseAuth.getInstance()' above SO
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("Cliente_Web")
.requestEmail()
.build()
mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
val signInIntent: Intent = mGoogleSignInClient.signInIntent
rl_google_container_login.setOnClickListener {
startActivityForResult(signInIntent, onActivityResultGoogleCode)
}
}
}
另一种解决方案是在调试模式下使用KEYSTORE。
signingConfigs{
key{
keyAlias 'Alias'
keyPassword 'password'
storeFile file('C:\\Users\\AllanRibas\\AndroidStudioProjects\\tool.jks')
storePassword 'password'
}
}
buildTypes {
debug{
signingConfig signingConfigs.key
}
}
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable true
useProguard true
jniDebuggable true
}
debug {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable true
useProguard true
jniDebuggable true
}
}