我正在使用Firebase& Google Play服务允许用户登录我的Android应用。
我完全按照指南操作,但我仍然无法登录,因为每次运行我的应用时,我都会收到RESULT_CANCEL
,错误为com.google.android.gms.common.api.ApiException: 12500
。
这是我的代码(简化):
public class MyMainActivity extends Activity {
private final int RC_SIGN_IN = 0;
private FirebaseAuth mAuth;
private FirebaseUser mUser;
private FirebaseStorage mStorage;
private GoogleSignInAccount mAccount;
private GoogleSignInClient mGoogleSignInClient;
private View mDecorView;
private void initUserGoogle() {
mAccount = GoogleSignIn.getLastSignedInAccount(this);
if (mAccount != null) return;
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void firebaseAuthGoogle(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 (task.isSuccessful()) {
mUser = mAuth.getCurrentUser();
mAuthed = true;
finish();
} else {
finish();
}
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
mDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_main);
mDecorView = getWindow().getDecorView();
mAuth = FirebaseAuth.getInstance();
initUserGoogle();
signIn();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
mAccount = task.getResult(ApiException.class);
firebaseAuthGoogle(mAccount);
} catch (ApiException e) {
finish();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
FirebaseAuth.getInstance().signOut();
}
}
其他信息:
这是我的build.gradle:
apply plugin: 'com.android.application'
android {
signingConfigs {
debugconfig {
keyAlias 'AndroidDebugKey'
keyPassword 'Notmypasswordjustaplaceholder'
storeFile file('/home/myusername/.android/debugkey.jks')
storePassword 'Alsonotmypasswordjustaplaceholder'
}
}
compileSdkVersion 26
defaultConfig {
applicationId "com.example.appname"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "0.1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.debugconfig
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:26.1.0'
implementation 'com.google.firebase:firebase-storage:11.6.0'
implementation 'com.google.firebase:firebase-auth:11.6.0'
implementation 'com.google.firebase:firebase-ads:11.6.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compile 'com.google.firebase:firebase-core:11.6.0'
compile 'com.google.android.gms:play-services-auth:11.6.0'
}
apply plugin: 'com.google.gms.google-services'
(有些项目因隐私/安全而更改)
如果需要任何其他信息,请询问。