예제 #1
0
        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);
                        }
                    });
                }
            });
        }
예제 #2
0
        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;
                            }
                        }
                    });
                }
            });
        }
예제 #3
0
        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;
                            }
                        }
                    });
                }
            });
        }
예제 #4
0
 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);
     });
 }