public UM_AndroidSignInClient() { SA_MonoEvents.OnApplicationPause.AddSafeListener(this, (paused) => { if (!paused) { //We do not want to do Silent SignIn on resume in case player not yet signed. if (PlayerInfo.State == UM_PlayerState.SignedOut) { // In case it's not null, this means we are missng something, so we will do Silent SignIn // The case may happend because we sending fail event on propxy Activity Destory event. // But propxy Activity Destory not always means that player is failed to log in. // We have to send fail evennt on propxy Activity Destory, since if we not, in cases where google and our proxy // activity both are destoryed, we will not get any event. if (AN_GoogleSignIn.GetLastSignedInAccount() == null) { return; } } //We need to perform Silent SignIn every time we back from pause SignInClient.SilentSignIn((silentSignInResult) => { if (silentSignInResult.IsSucceeded) { RetrivePlayer((result) => { }); } else { //looks Like player singed out UpdatePlayerInfo(null); } }); } }); }
private void StartSingInFlowternal(Action <SA_Result> callback) { AN_Logger.Log("UM_AndroidSignInClient, starting siglent sing-in"); SignInClient.SilentSignIn((silentSignInResult) => { if (silentSignInResult.IsSucceeded) { AN_Logger.Log("UM_AndroidSignInClient, siglent sing-in Succeeded"); RetrivePlayer(callback); } else { AN_Logger.Log("UM_AndroidSignInClient, siglent sing-in Failed"); AN_Logger.Log("UM_AndroidSignInClient, starting interactive sing-in"); SignInClient.SignIn((interactiveSignInResult) => { AN_Logger.Log("UM_AndroidSignInClient, interactive sing-in completed"); if (interactiveSignInResult.IsSucceeded) { AN_Logger.Log("UM_AndroidSignInClient, interactive sing-in succeeded"); RetrivePlayer(callback); } else { AN_Logger.Log("UM_AndroidSignInClient, interactive sing-in failed"); int errorCode = interactiveSignInResult.Error.Code; switch (errorCode) { //Retry may solve the issue case (int)AN_CommonStatusCodes.NETWORK_ERROR: //in some cases it may cause a loop //case (int)AN_CommonStatusCodes.INTERNAL_ERROR: case (int)AN_CommonStatusCodes.FAILED_ACTIVITY_ERROR: //Let's see if we tried to do it before if (m_resolvedErrors.Contains(errorCode)) { AN_Logger.Log("UM_AndroidSignInClient, sending fail result"); callback.Invoke(new SA_Result(interactiveSignInResult.Error)); } else { //Nope, this is new one, let's try to resolve it AN_Logger.Log("Trying to resolved failed sigin-in result with code: " + errorCode); StartSingInFlowternal(callback); } break; default: AN_Logger.Log("UM_AndroidSignInClient, sending fail result"); callback.Invoke(new SA_Result(interactiveSignInResult.Error)); break; } } }); } }); }
private void StartSingInFlowInternal(Action <SA_Result> callback) { AN_Logger.Log("UM_AndroidSignInClient, starting silent sing-in"); SignInClient.SilentSignIn(silentSignInResult => { if (silentSignInResult.IsSucceeded) { AN_Logger.Log("UM_AndroidSignInClient, silent sing-in Succeeded"); RetrievePlayer(callback); } else { AN_Logger.Log("UM_AndroidSignInClient, silent sing-in Failed"); AN_Logger.Log("UM_AndroidSignInClient, starting interactive sing-in"); SignInClient.SignIn(interactiveSignInResult => { AN_Logger.Log("UM_AndroidSignInClient, interactive sing-in completed"); if (interactiveSignInResult.IsSucceeded) { AN_Logger.Log("UM_AndroidSignInClient, interactive sing-in succeeded"); RetrievePlayer(callback); } else { AN_Logger.Log("UM_AndroidSignInClient, interactive sing-in failed"); var errorCode = interactiveSignInResult.Error.Code; switch (errorCode) { //Retry may solve the issue case (int)AN_CommonStatusCodes.NETWORK_ERROR: case (int)AN_GoogleSignInStatusCodes.SIGN_IN_CURRENTLY_IN_PROGRESS: m_ResolvedErrors.Add(errorCode); //Let's see if we tried to do it before if (m_ResolvedErrors.Contains(errorCode)) { AN_Logger.Log("UM_AndroidSignInClient, sending fail result"); callback.Invoke(new SA_Result(interactiveSignInResult.Error)); } else { //Nope, this is new one, let's try to resolve it AN_Logger.Log("Trying to resolved failed sigin-in result with code: " + errorCode); StartSingInFlowInternal(callback); } break; default: AN_Logger.Log("UM_AndroidSignInClient, sending fail result"); callback.Invoke(new SA_Result(interactiveSignInResult.Error)); break; } } }); } }); }
protected void SilentSignIn(Action <AN_GoogleSignInResult> result) { AN_Logger.Log("Let's try Silent SignIn first"); SignInClient.SilentSignIn((signInResult) => { if (signInResult.IsSucceeded) { PrintInfo(signInResult.Account); } result.Invoke(signInResult); }); }