2016-11-29 89 views
0

我正在使用Firebase Google登录。它通过USB调试完美工作。但是当我生成签名APK时,它停止工作。它无法登录。在Android 5.1 & Android 6.0.1上使用它。另外,如果Google play服务没有更新,它会提示用户更新,因为哪个用户可能会离开该应用。我如何关闭提示并解决错误?Firebase身份验证无法在签名APK中工作

public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, 
     View.OnClickListener { 
private Button skip; 
    private static final String TAG = "GoogleActivity"; 
    private static final int RC_SIGN_IN = 9001; 
    private ProgressBar pb; 
    // [START declare_auth] 
    private FirebaseAuth mAuth; 
    // [END declare_auth] 

    // [START declare_auth_listener] 
    private FirebaseAuth.AuthStateListener mAuthListener; 
    // [END declare_auth_listener] 

    private GoogleApiClient mGoogleApiClient; 
    private TextView mStatusTextView; 
    private TextView mDetailTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pb=(ProgressBar)findViewById(R.id.signpro); 
     pb.setVisibility(View.GONE); 
     skip=(Button)findViewById(R.id.btnskip); 
     skip.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setContentView(R.layout.activity_home); 
      } 
     }); 
     // Views 


     // Button listeners 
     findViewById(R.id.sign_in_button).setOnClickListener(this); 

     // [START config_signin] 
     // Configure Google Sign In 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 
     // [END config_signin] 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 

     // [START initialize_auth] 
     mAuth = FirebaseAuth.getInstance(); 
     // [END initialize_auth] 

     // [START auth_state_listener] 
     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
        setContentView(R.layout.activity_home); 

       } else { 
        // User is signed out 
        Log.d(TAG, "onAuthStateChanged:signed_out"); 
       } 
       // [START_EXCLUDE] 

       // [END_EXCLUDE] 
      } 
     }; 
     // [END auth_state_listener] 
    } 

    // [START on_start_add_listener] 
    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 

    } 
    // [END on_start_add_listener] 

    // [START on_stop_remove_listener] 
    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 
    // [END on_stop_remove_listener] 

    // [START onactivityresult] 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       Toast.makeText(this, "Signing you in. Please Wait...", Toast.LENGTH_LONG).show(); 
       // Google Sign In was successful, authenticate with Firebase 
       GoogleSignInAccount account = result.getSignInAccount(); 
       firebaseAuthWithGoogle(account); 
       Toast.makeText(this, "Sign In Successful!", Toast.LENGTH_SHORT).show(); 
      } else { 
       // Google Sign In failed, update UI appropriately 
       // [START_EXCLUDE] 

       Toast.makeText(this, "Google Sign In failed. Please Skip.", Toast.LENGTH_SHORT).show(); 
       pb.setVisibility(View.GONE); 
       // [END_EXCLUDE] 
      } 
     } 
    } 
    // [END onactivityresult] 

    // [START auth_with_google] 
    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
     Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); 
     // [START_EXCLUDE silent] 

     // [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) { 
         Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          Log.w(TAG, "signInWithCredential", task.getException()); 
          Toast.makeText(MainActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } 
         // [START_EXCLUDE] 

         // [END_EXCLUDE] 
        } 
       }); 
    } 
    // [END auth_with_google] 

    // [START signin] 
    private void signIn() { 
     pb.setVisibility(View.VISIBLE); 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 
    // [END signin] 



    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
     // be available. 
     Log.d(TAG, "onConnectionFailed:" + connectionResult); 
     Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onClick(View v) { 
     int i = v.getId(); 
     if (i == R.id.sign_in_button) { 
      signIn(); 

     } 
    } 
} 
+0

得到一个签名的APK,您需要改变你的'google-services.json'! – AndiGeeky

+0

更改您的Google'SHA-1'哈希以使用您的发行密钥库并更新'google-services.json'。 ! – AndiGeeky

+0

从发布密钥获取SHA-1并在Google控制台中更新。只有在您更改了软件包名称时才能获得'google-services.json'。 –

回答

0

您有在控制台指纹证书,但其仅用于调试目的,对于签署的apk你需要一个生产指纹证书,您可以通过

c:\Program Files\Java\jdk1.6.25\bin>keytool -list -v -keystore c:\you_key_here.key