void LoginManagerLoginHandler(LoginManagerLoginResult result, NSError error) { if (result.IsCancelled) { completionSource.TrySetResult(new FacebookLoginResult { LoginState = FacebookLoginState.Canceled }); } else if (error != null) { completionSource.TrySetResult(new FacebookLoginResult { LoginState = FacebookLoginState.Failed, ErrorString = error.LocalizedDescription }); } else { loginResult = new FacebookLoginResult { Token = result.Token.TokenString, UserId = result.Token.UserID, ExpireAt = result.Token.ExpirationDate.ToDateTime() }; var request = new GraphRequest(@"me", new NSDictionary(@"fields", @"email")); request.Start(GetEmailRequestHandler); } }
public void OnCompleted(GraphResponse response) { if (response?.JSONObject == null) { completionSource?.TrySetResult(new FacebookLoginResult { LoginState = FacebookLoginState.Canceled }); } else { loginResult = new FacebookLoginResult { FirstName = Profile.CurrentProfile.FirstName, LastName = Profile.CurrentProfile.LastName, Email = response.JSONObject.Has("email") ? response.JSONObject.GetString("email") : string.Empty, ImageUrl = response.JSONObject.GetJSONObject("picture")?.GetJSONObject("data")?.GetString("url"), Token = AccessToken.CurrentAccessToken.Token, UserId = AccessToken.CurrentAccessToken.UserId, ExpireAt = FromJavaDateTime(AccessToken.CurrentAccessToken?.Expires?.Time), LoginState = FacebookLoginState.Success }; completionSource?.TrySetResult(loginResult); } }
/// <summary> /// Signs the into facebook. /// </summary> /// <returns>Task<FacebookLoginResult>.</returns> public async Task <FacebookLoginResult> SignIntoFacebook() { var login = new FacebookLoginResult(); if (AccessToken.CurrentAccessToken == null || (AccessToken.CurrentAccessToken != null && AccessToken.CurrentAccessToken.IsExpired)) { // LoginManager.Instance.LogOut(); var taskCompletionSource = new TaskCompletionSource <FacebookLoginResult>(); var activity = Xamarin.Forms.Forms.Context as MainActivity; var loginCallback = new FacebookCallback <LoginResult> { HandleSuccess = loginResult => { UpdateFacebookResult(login); taskCompletionSource.SetResult(login); }, HandleCancel = () => { System.Diagnostics.Debug.WriteLine("fbcancel"); UpdateFacebookResult(login, true, false); taskCompletionSource.SetResult(login); }, HandleError = loginError => { System.Diagnostics.Debug.WriteLine("fberror"); login.Error = loginError.Message; UpdateFacebookResult(login, true, true); taskCompletionSource.SetResult(login); } }; if (activity == null) { return(null); } //LoginManager.Instance.RegisterCallback(activity.CallbackManager, loginCallback); LoginManager.Instance.LogInWithReadPermissions(activity, _readPermissions); return(await taskCompletionSource.Task); } UpdateFacebookResult(login); return(login); }
/// <summary> /// Updates the model. /// </summary> /// <param name="login">The login.</param> /// <param name="iscancelled">if set to <c>true</c> [iscancelled].</param> /// <param name="iserror">if set to <c>true</c> [iserror].</param> private void UpdateFacebookResult(FacebookLoginResult login, bool iscancelled = false, bool iserror = false) { var token = AccessToken.CurrentAccessToken != null; if (token) { login.Token = AccessToken.CurrentAccessToken?.Token; login.ExpirationDate = AccessToken.CurrentAccessToken != null ? JavaToCsharpDateTime(AccessToken.CurrentAccessToken?.Expires.Time) : null; login.UserId = AccessToken.CurrentAccessToken?.UserId; login.IsCancelled = iscancelled; } else { login.IsCancelled = iscancelled; } }
public Task <FacebookLoginResult> Login() { var result = new TaskCompletionSource <FacebookLoginResult>(); var auth = new OAuth1Authenticator( "wDDuNu2auh21NLhWQu2zOdhSc", "QYeJH178DVJB6hSovnbWoTueHKo87WGNAPNLMmCkfcNctlaHEw", new Uri("https://api.twitter.com/oauth/request_token"), new Uri("https://api.twitter.com/oauth/authorize"), new Uri("https://api.twitter.com/oauth/access_token"), new Uri("http://mobile.twitter.com/home") ) { AllowCancel = true }; auth.Completed += async(s, eventArgs) => { UIApplication.SharedApplication.KeyWindow.RootViewController.DismissViewController(true, null); var twitterLoginResult = new FacebookLoginResult(); if (eventArgs.IsAuthenticated) { var loggedInAccount = eventArgs.Account; twitterLoginResult = new FacebookLoginResult { Name = loggedInAccount.Properties["screen_name"], AccessToken = loggedInAccount.Properties["oauth_token"], UserId = loggedInAccount.Properties["user_id"] }; twitterLoginResult.Email = await GetTwitterUserMail(loggedInAccount); } twitterLoginResult.IsLoggedIn = eventArgs.IsAuthenticated; result.SetResult(twitterLoginResult); }; UIApplication.SharedApplication.KeyWindow.RootViewController .PresentViewController(auth.GetUI(), true, null); return(result.Task); }
public Task <FacebookLoginResult> Login() { var result = new TaskCompletionSource <FacebookLoginResult>(); var auth = new OAuth1Authenticator( "wDDuNu2auh21NLhWQu2zOdhSc", "QYeJH178DVJB6hSovnbWoTueHKo87WGNAPNLMmCkfcNctlaHEw", new Uri("https://api.twitter.com/oauth/request_token"), new Uri("https://api.twitter.com/oauth/authorize"), new Uri("https://api.twitter.com/oauth/access_token"), new Uri("http://mobile.twitter.com") ) { AllowCancel = true }; var context = Forms.Context; var intent = auth.GetUI(context); context.StartActivity(intent); auth.Completed += async(s, eventArgs) => { var twitterLoginResult = new FacebookLoginResult(); if (eventArgs.IsAuthenticated) { var loggedInAccount = eventArgs.Account; twitterLoginResult = new FacebookLoginResult { Name = loggedInAccount.Properties["screen_name"], AccessToken = loggedInAccount.Properties["oauth_token"], UserId = loggedInAccount.Properties["user_id"] }; twitterLoginResult.Email = await GetTwitterUserMail(loggedInAccount); } twitterLoginResult.IsLoggedIn = eventArgs.IsAuthenticated; result.SetResult(twitterLoginResult); }; return(result.Task); }