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:
- Login menggunakan google account
- Saat muncul dialog pilih akun, user memilih opsi use another account
- Pilih create new google account.
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();
0 1 2 3 4 |
public static int getGoogleAccountCount(Context context){ AccountManager accMan = AccountManager.get(context); Account[] accArray = accMan.getAccountsByType("com.google"); return accArray.length; } |
0 1 2 3 4 5 6 7 |
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); ButterKnife.bind(this); initialize(); googleCountBefore = Utils.getGoogleAccountCount(this); } |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@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.