我在使用Firebase实施Google登录时遇到了非常严重的问题。 我可以使用我的模拟器Android 7.0(为x86_64构建的SDK)登录, 但如果我将项目上传到我的手机(Android 6.0),我就无法使用Google登录。 我唯一看到的是应用程序关闭。在极少数情况下,如果我快速双击登录按钮,它将登录,但不会获得进一步使用的凭据。 可能是什么问题?
LoginActivity中的代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == FirebaseConstants.LOG_IN_REQUEST){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
Intent i = new Intent(LoginActivity.this, MainActivity.class);
startActivity(i);
}
if(requestCode == FirebaseConstants.LOG_OUT_REQUEST){
TastyToast.makeText(this, "Logged out successfully", TastyToast.LENGTH_LONG, TastyToast.SUCCESS);
}
}
以下是onCreate方法中的代码(按钮单击):
btnGoogleSignIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(NetworkUtil.isNetworkAvailable(LoginActivity.this)){
googleLogin.logIn(LoginActivity.this);
}else{
TastyToast.makeText(LoginActivity.this, "Network is unavailable", TastyToast.LENGTH_LONG, TastyToast.ERROR);
}
}
});
Google登录实例
public class GoogleLogin extends Observable implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{
private final GoogleApiClient googleApiClient;
private final WeakReference<Activity> activityWeakReference;
private static GoogleLogin googleLogin;
public GoogleLogin(final Activity activity) {
activityWeakReference = new WeakReference<>(activity);
// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(activity.getString(R.string.default_web_client_id))
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(activity)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
public static GoogleLogin getInstance(Activity activity) {
if (null == googleLogin) {
googleLogin = new GoogleLogin(activity);
}
return googleLogin;
}
public void logIn(Activity activity){
Context c = activityWeakReference.get().getApplicationContext();
googleApiClient.connect();
if(googleApiClient.isConnected()){
Intent i = new Intent(c, MainActivity.class);
googleApiClient.connect();
activity.startActivity(i); // this wont start an activity
}else if(!googleApiClient.isConnected()){
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
googleApiClient.connect();
// this wont start an activity either
activity.startActivityForResult(signInIntent, FirebaseConstants.LOG_IN_REQUEST);
}
}
public void signOut(final Activity activity){
if(googleApiClient.isConnected()) {
Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
Intent i = new Intent(activity, LoginActivity.class);
activity.startActivityForResult(i, FirebaseConstants.LOG_OUT_REQUEST);
}
});
}
}
public void disconnect(Activity activity){
activity.getApplicationContext();
if(googleApiClient.isConnected()){
googleApiClient.disconnect();
Intent i = new Intent(activity, LoginActivity.class);
}
}
}
没有你的帮助,我无法解决这个问题。我真的需要让它发挥作用!
build.gradle中的依赖项
compile 'com.google.firebase:firebase-messaging:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-auth:9.6.1'
compile 'com.google.android.gms:play-services-auth:9.6.1'
compile 'com.google.firebase:firebase-ads:9.6.1'
在build.gradle底部
apply plugin: 'com.google.gms.google-services'
答案 0 :(得分:0)
如果使用Google登录到Firebase时调试版本没有引发任何错误,则可能是证书签名问题。
第1步(可选)
在所有捕获块中创建一条Toast消息,因此您可以查看错误代码是什么。正常构建并签名您的应用;然后以封闭或开放的方式发布以进行测试。在线搜索错误代码。 (不要仅依靠CommonStatusCodes描述,而要搜索其他资源。)
第2步
检查您的发行版APK / bundle的SHA-1证书指纹是什么:
A)转到Android Studio中的Gradle /:app / Tasks / android / signingReport并生成报告。从发行版本中复制SHA1指纹。
B)如果您的应用是通过Google Play签名的,请转到Google Play控制台中的发布管理/应用签名,然后从应用签名证书中复制SHA-1证书指纹
然后转到Firebase控制台中的“项目”设置并添加新指纹,这样就可以同时调试和释放指纹。
第3步
下载google-services.json文件,然后将您构建中的现有文件替换为您刚刚下载的文件。构建并签署新版本。