android, coding,

Google sign in: Trik menangani stuck pada “Use another account” issue

Hangga Aji Sayekti Hangga Aji Sayekti Follow Jul 27, 2018 · 1 min read
Google sign in: Trik menangani stuck pada “Use another account” issue
Share this

Ini adalah issue yg terjadi pada google sign in dan belum di solve oleh mbah google sampai dengan postingan ini dipublish.

Reproduce

Reproduce dari issue ini adalah sebagai berikut:

  1. Login menggunakan google account
  2. Saat muncul dialog pilih akun, user memilih opsi use another account
  3. Pilih create new google account.
![](http://hangga.github.io/blog/wp-content/uploads/2018/07/ca889f5f6fe999a5904f02579edfe4c60dbc18bc-700x580.png)
sumber: https://meta.discourse.org

Issue

Nah, yang terjadi adalah tidak didapatkannya response data pada onActivityResult(), sehingga user mengalami stuck pada halaman login.

Trik

Cara bodoh untuk mengakali issue ini bisa dilakukan dengan cara membandingkan jumlah akun google dalam device sebelum dan sesudah repro. Jika jumlah akun bertambah, maka doSomething();

public static int getGoogleAccountCount(Context context){
        AccountManager accMan = AccountManager.get(context);
        Account[] accArray = accMan.getAccountsByType("com.google");
        return accArray.length;
}
@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        ButterKnife.bind(this);
        initialize();
        googleCountBefore = Utils.getGoogleAccountCount(this);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            isRegisterWithGoogle = true;

            @SuppressLint("RestrictedApi") Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {

                account = task.getResult(ApiException.class);
                firebaseAuthWithGoogle(account);

            } catch (Exception e) {
                // The ApiException status code indicates the detailed failure reason.
                // Please refer to the GoogleSignInStatusCodes class reference for more information.
                //showSnackbar(R.string.auth_failed);
            }
        }
        googleCountAfter = Utils.getGoogleAccountCount(this);
        if (googleCountAfter > googleCountBefore){
            showLoading(true);
            googleLoginBtn.performClick();
        }
    }

Alhamdulillah Solved.

Hangga Aji Sayekti
Written by Hangga Aji Sayekti
A passionate Software Engineer from Indonesia with experience since 2008. Bachelor's degree in Mathematics and loves Science and Computers.