Hud*_*eld 38 android google-authentication firebase
所以我陷入了这个令人沮丧的问题.我对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
Run Code Online (Sandbox Code Playgroud)
并且
Google sign in failed com.google.android.gms.common.api.ApiException: 10:
Run Code Online (Sandbox Code Playgroud)
在任何人试图指出先前已经在堆栈溢出问题上提出的类似问题之前,这是我在看到所有可用解决方案之后到目前为止所做的事情,但是还没有解决错误
这是我的代码片段:
@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]
}
});
}
Run Code Online (Sandbox Code Playgroud)
Dil*_*lip 56
基本上问题是在SHA1控制台上放置的密钥请重新生成并重新放入相同的项目.
1)作为答案,请确保您的实际签名Android apk具有与SHA1您在Firebase项目的Android集成部分(您可以下载的页面google-services.json)的控制台中指定的指纹相同的指纹
2)最重要的是转到firebase项目的设置(左上角区域概述右侧的齿轮图标.然后切换到帐户链接选项卡.在该选项卡上将Google Play链接到您的项目.
Chi*_*ani 11
在我的情况下,没有问题 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();
Run Code Online (Sandbox Code Playgroud)
更新:2020 年 12 月 18 日
我们也可以使用 without requestIdTokenlike 下面。为此,您必须将 SHA1 添加到谷歌控制台。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
Run Code Online (Sandbox Code Playgroud)
我的解决方案有点不同,
经过几个小时的尝试各种事情。我找到了我的解决方案:
使用此处列出的步骤:https : //stackoverflow.com/a/34223470/10575896
控制台将打印出调试和发布的 SHA 密钥。过去某个时候我曾将调试键添加到 firebase,但我没有添加释放键。
我只是将 SHA1 和 SHA256 密钥添加到 firebase 中,我很高兴。
我遇到了同样的问题,在检查了解决方案之后,从重新生成指纹到将Firebase上的应用程序链接到Google Play控制台并发布签名的apk,这个问题实际上是因为我在Windows上使用了SHA-1版本Firebase控制台。
https://developer.android.com/studio/publish/app-signing.html
现在是 2022 年,我花了 7 个小时调试这个!我不是一个原生的 Android 开发者,所以直到现在我才知道这是什么。
这是我让它发挥作用的方法。
您正在使用的世界中有 3 种不同的构建/应用程序:
一种debug是您可以附加调试器(错误图标!)的一种,另release一种是您不能附加的。
无论你做什么,都要确保它们是不同的,否则你就会抓狂,为什么它在这里起作用,在那里不起作用!
我的背景是在发布之前我们就进行了标记和版本化。(例如后端) 在这里,如果你这样做,一切都会变得混乱!所以你应该标记,然后发布,然后立即版本升级!
理想情况下,Play 商店应该是1.1.7,发布版本应该是1.1.8(是的,提前一个版本,因为它是您要发布的版本),调试版本应该是1.1.8-debug。
如果您不这样做,并且它们是相同的,Android 操作系统将缓存包/APK。因此,即使您从 Play 商店安装该应用程序,它也可能使用缓存中的 Android Studio 版本,并具有自己的证书!(我花了 4 个小时才明白为什么在两部手机上从 Play Store 安装相同的应用程序会产生不同的行为 - 其中一部使用的是 Android Studio USB 版本中的缓存 APK。)
此时,您应该意识到这个疯狂的系统,您应该为 Android 创建一个“Web”OAuth 客户端 ID,并且还创建一个虚拟 Android 客户端 ID!看到这个。
是的,您需要一把“Web”密钥和一把“Android”密钥才能使 GoogleSignIn 正常工作。您应该几乎在任何地方都使用“Web”(除了进行服务器端令牌验证,您可以在其中验证 JWT 的受众/发行者)。无论如何,如果没有未使用的虚拟“Android”,它就无法工作。
然而,我不知道的是你需要 3 个 Android + 1 个 Web!
当您创建 Android OAuth 客户端 ID 时,它会要求提供 SHA-1。
这 3 个应用程序中的每一个都有自己的证书,即 SHA-1。
对于 2 和 3(release以及debugAndroid Studio),您可以通过此解决方案从 gradle 获取它们。
对于 Play 商店,您必须转至 Play 管理中心 > 应用程序完整性 > 应用程序签名,然后从那里获取“应用程序签名”证书。(上传的应该release最有可能与您的相符。)
现在,继续创建这 3 个 Android Ouath 客户端 Id + 1 用于 Web,希望 Google SignIn 能够在任何地方使用!
使用Google Play和Firebase进行应用签名时,您需要将应用签名证书(可在Google Play控制台/版本管理/应用签名证书中找到)的SHA-1指纹添加到Firebase控制台/设置/ SHA证书指纹中
如果您在 firebase 中的所有配置都有效,例如 SHA-1 并且您导入了正确的 google-services.json 文件,您仍然收到错误,然后在 firebase 控制台中添加支持电子邮件
您必须在 Fire Base 控制台中添加支持电子邮件转到项目-> 设置 -> 常规 -> 公共设置添加支持电子邮件
| 归档时间: |
|
| 查看次数: |
38618 次 |
| 最近记录: |