public IEnumerator login(string username, string password) { // Check for existing connection SalesforceConnection connection = ApplicationState.sfConnection; if (connection != null) { sfClient.setConnection(connection); Debug.Log("Salesforce connection resumed."); yield return(true); } else // Establish a new connection { // Set OAuth settings sfClient.consumerKey = SalesforceAuthConfig.OAUTH_CONSUMER_KEY; sfClient.consumerSecret = SalesforceAuthConfig.OAUTH_CONSUMER_SECRET; // Attemp login bool isUserLogged = false; bool shouldRetry = true; while (!isUserLogged && shouldRetry) { Coroutine <bool> routine = owner.StartCoroutine <bool>( sfClient.login(username, password) ); yield return(routine.coroutine); try { isUserLogged = routine.getValue(); Debug.Log("Salesforce login successful."); // Store connection for later use ApplicationState.sfConnection = sfClient.getConnection(); } catch (SalesforceConfigurationException e) { throw e; } catch (SalesforceAuthenticationException e) { throw e; } catch (SalesforceApiException) { Debug.Log("Salesforce login failed, retrying..."); } } yield return(isUserLogged); } }