public Task <(string IdToken, string AccessToken)> LoginWithGoogle() { var tcs = new TaskCompletionSource <(string idToken, string accessToken)>(); string clientId = null; string redirectUri = null; switch (Device.RuntimePlatform) { case Device.iOS: clientId = Constants.GoogleIosClientId; redirectUri = Constants.GoogleIosRedirectUrl; break; case Device.Android: clientId = Constants.GoogleAndroidClientId; redirectUri = Constants.GoogleAndroidRedirectUrl; break; } var authenticator = new CustomOAuth2Authenticator(clientId, null, "https://www.googleapis.com/auth/userinfo.email", new Uri("https://accounts.google.com/o/oauth2/auth"), new Uri(redirectUri), new Uri("https://www.googleapis.com/oauth2/v4/token"), null, true); authenticator.Completed += (sender, e) => { if (e.IsAuthenticated && e.Account != null && e.Account.Properties != null) { var properties = e.Account.Properties; tcs.TrySetResult((properties["id_token"], properties["access_token"])); } else { tcs.TrySetResult((null, null)); } }; authenticator.Error += (sender, e) => { tcs.TrySetException(e.Exception ?? new Exception(e.Message)); }; AuthenticationState.Authenticator = authenticator; var presenter = new Xamarin.Auth.Presenters.OAuthLoginPresenter(); presenter.Login(authenticator); return(tcs.Task); }
public Task <string> LoginWithGitHub() { var tcs = new TaskCompletionSource <string>(); var authenticator = new CustomOAuth2Authenticator(Constants.GitHubClientId, Constants.GitHubClientSecret, "user", new Uri("https://github.com/login/oauth/authorize"), new Uri(Constants.GitHubRedirectUrl), new Uri("https://github.com/login/oauth/access_token"), null, true); authenticator.Completed += (sender, e) => { if (e.IsAuthenticated && e.Account != null && e.Account.Properties != null) { var properties = e.Account.Properties; tcs.TrySetResult((properties["access_token"])); } else { tcs.TrySetResult(null); } }; authenticator.Error += (sender, e) => { tcs.TrySetException(e.Exception ?? new Exception(e.Message)); }; AuthenticationState.Authenticator = authenticator; var presenter = new Xamarin.Auth.Presenters.OAuthLoginPresenter(); presenter.Login(authenticator); return(tcs.Task); }