我想为我的应用程序创建一个 Google 标志,但我的结果代码
onActivityResult()
是 0
在我的
onCreate()
方法中,我像这样启动函数startSignInIntent()
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some other stuff
view.loadUrl(myURL);
startSignInIntent();
}
这是
startSignInIntent()
private void startSignInIntent() {
GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
GoogleSignInOptions.DEFAULT_SIGN_IN);
Intent intent = signInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);
}
这是
onActivityResult()
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "data : " + resultCode + " | " + data + " || " + RC_SIGN_IN + " ||| " + requestCode);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// The signed in account is stored in the result.
GoogleSignInAccount signedInAccount = result.getSignInAccount();
} else {
String message = result.getStatus().getStatusMessage();
if (message == null || message.isEmpty()) {
Toast.makeText(this, "Login failed", Toast.LENGTH_LONG).show();
}
new AlertDialog.Builder(this).setMessage(message)
.setNeutralButton(android.R.string.ok, null).show();
}
}
这是函数中日志的结果
onActivityResult()
0 |意图{(有额外内容)}|| 2 ||| 2
我也遇到了同样的错误,requestCode 始终为 0 (RESULT_CANCELED)。
决定在 firebase 控制台中启用 google 登录。
Firebase 控制台 -> 您的项目 -> 身份验证 -> 提供商 -> Google -> 并将其打开。
就我而言,链接是这样的
https://console.firebase.google.com/u/0/project/{项目名称}/authentication/providers
尝试检查您是否为您的应用程序正确配置了正确的 OAuth 密钥。根据这个相关的SO post,OP注意到身份验证密钥也与创建问题的其他项目相关联。
您还可以查看以下Try Sign-In for Android的实现,了解代码实现:
@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);
handleSignInResult(task);
}
}
另外,OP提供了一些额外的信息,您在测试时需要确保您已经签署了APK。有关详细信息,请参阅有关签署您的应用程序的文档。
希望这有帮助。
我在使用 Android 模拟器时也遇到了同样的问题。事实证明,模拟器已与互联网断开连接,这就是为什么 firebase 会抛出上述错误。
确保将 OAuth 同意屏幕的发布状态设置为 生产状态而不是测试状态。
我想分享我的经验,尽管它不适用于原始案例。我的搜索到达这里是因为我遇到了同样的问题 - startActivityForResult 立即返回,结果代码 = 0。
我的原因是包名错误。我有一个有几个变体的应用程序,每个变体都有不同的包名称。 Google 登录要求 Android 应用程序的包名称与 Google API 控制台的 Android 项目的包名称之一匹配。我为一种变体建立了一个项目,但没有为其他变体建立一个项目。当我为 Google API 控制台创建项目后,登录就开始完美运行。
就我而言,我忘记将项目 ID 添加到 AndroidManifest.xml 中。 因此:
<meta-data android:name="com.google.android.gms.games.APP_ID"
android:value="@string/app_id" />
并在文件夹 res/values 中创建文件 ids.xml 并设置项目的 ID
<string name="app_id" translatable="false">numberOfProject</string>
我专门在 android jellybean 上发生了这种情况,事实证明,如果我使用的登录活动启动模式不是清单中的标准或单顶模式,则 onActivityResult() 将立即返回,而无需实际等待结果。
<activity
android:name=".SignInActivity"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleTop"
android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN"
tools:replace="android:launchMode"/>
刚刚修复了这个问题...我试图清理凭证中的一些 OAuth ID,但删除了一个错误的 ID。
Configure a project
Android
然后填写您的 package name
和 SHA-1
client ID
我发现此设置将创建 2 个 OAuth 2.0 客户端 ID:
Play 商店有 Sha-1 密钥;您需要将该密钥添加到您的 Firebase 项目中。并且在 Firebase 中,您需要接受 Google 身份验证。