public static void Handler(LoginManagerLoginResult result, NSError error, ISocialAuth interactor, LoginManager loginManager)
        {
            _loginManager = loginManager;
            _interactor   = interactor;

            if (error != null)
            {
                _interactor.OnError(error.LocalizedDescription, ESocialType.Facebook);
            }
            else if (result.IsCancelled)
            {
                _interactor.OnCancel(ESocialType.Facebook);

                _loginManager.LogOut();
                var r = new Facebook.CoreKit.GraphRequest("me/permissions", null, "DELETE");
                r.Start((connection, result1, error1) => {
                    Console.WriteLine("GraphRequest");
                });
            }
            else
            {
                var token = result.Token.TokenString;
                _interactor.OnSuccess(token, ESocialType.Facebook);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
 void LoginHandler(LoginManagerLoginResult loginResult, NSError error)
 {
     if (loginResult.IsCancelled)
     {
         _facebookTask.TrySetResult(TryResult.Create(false,
                                                     new SocialData
         {
             LoginState = SocialLoginStateEnum.Canceled
         }));
     }
     else if (error != null)
     {
         _facebookTask.TrySetResult(TryResult.Create(false,
                                                     new SocialData
         {
             LoginState  = SocialLoginStateEnum.Failed,
             ErrorString = error.LocalizedDescription
         }));
     }
     else
     {
         _socialData = new SocialData
         {
             Token    = loginResult.Token.TokenString,
             UserId   = loginResult.Token.UserId,
             ExpireAt = loginResult.Token.ExpirationDate.ToDateTimeUtc()
         };
         _facebookTask.TrySetResult(TryResult.Create(true, _socialData));
     }
 }
        void LoginManagerLoginHandler(LoginManagerLoginResult result, NSError error)
        {
            if (result.IsCancelled)
            {
                _completionSource?.TrySetResult(new LoginResult {
                    LoginState = LoginState.Canceled
                });
            }
            else if (error != null)
            {
                _completionSource?.TrySetResult(new LoginResult {
                    LoginState = LoginState.Failed, ErrorString = error.LocalizedDescription
                });
            }
            else
            {
                _loginResult = new LoginResult
                {
                    Token    = result.Token.TokenString,
                    UserId   = result.Token.UserID,
                    ExpireAt = result.Token.ExpirationDate.ToDateTime()
                };

                var request = new GraphRequest(@"me", new NSDictionary(@"fields", @"email, first_name, last_name, picture.width(1000).height(1000)"));
                request.Start(GetEmailRequestHandler);
            }
        }
示例#5
0
        void LoginManagerLoginHandler(LoginManagerLoginResult result, NSError error)
        {
            if (result.IsCancelled)
            {
                _completionSource.TrySetResult(new LoginResult {
                    LoginState = LoginState.Canceled
                });
            }
            else if (error != null)
            {
                _completionSource.TrySetResult(new LoginResult {
                    LoginState = LoginState.Failed, ErrorString = error.LocalizedDescription
                });
            }
            else
            {
                _loginResult = new LoginResult
                {
                    Token    = result.Token.TokenString,
                    UserId   = result.Token.UserId,
                    ExpireAt = result.Token.ExpirationDate.ToDateTime()
                };
            }

            UIApplication.SharedApplication.OpenUrl(new NSUrl("http://www.facebook.com/looneyinvaders"));

            var request = new GraphRequest(@"101000795058301", new NSDictionary(@"fields", @"fan_count"));

            request.Start(GetLikesRequestHandler);
        }
示例#6
0
        private async void ProcessFacebookLogin()
        {
            LoginManagerLoginResult result = await loginManager.LogInWithReadPermissionsAsync(readPermissions.ToArray(), this);

            if (result.IsCancelled)
            {
                UserDialogs.Instance.Alert("User cancelled Facebook Login", "ThisRoof");
                return;
            }

            if (result.GrantedPermissions != null && result.GrantedPermissions.Contains("email"))
            {
                string NAME   = "name";
                string ID     = "id";
                string EMAIL  = "email";
                string FIELDS = "fields";

                string REQUEST_FIELDS = String.Join(",", new string[] {
                    NAME, ID, EMAIL
                });

                UserDialogs.Instance.ShowLoading();
                var request           = new GraphRequest("me", new NSDictionary(FIELDS, REQUEST_FIELDS), AccessToken.CurrentAccessToken.TokenString, null, "GET");
                var requestConnection = new GraphRequestConnection();
                requestConnection.AddRequest(request, (connection, graphResult, error) => {
                    UserDialogs.Instance.HideLoading();
                    if (error != null || graphResult == null)
                    {
                        // Error Handler
                        UserDialogs.Instance.Alert(String.Format("Facebook Login Error:{0}", error.Description), "ThisRoof");
                    }
                    else
                    {
                        string email        = (graphResult as NSDictionary) ["email"].ToString();
                        FBUserInfo userInfo = new FBUserInfo()
                        {
                            UserEmail = email,
                            UserID    = AccessToken.CurrentAccessToken.UserID,
                            UserToken = AccessToken.CurrentAccessToken.TokenString
                        };

                        ViewModelInstance.FacebookLoginCommand.Execute(userInfo);

                        // after get user info we logout again.
                        loginManager.LogOut();
                    }
                });

                requestConnection.Start();
            }
            else
            {
                UserDialogs.Instance.Alert("Email Permission is not allowed", "ThisRoof");
            }
        }
 private void LoginTokenHandler(LoginManagerLoginResult loginResult, NSError error)
 {
     if (loginResult.Token != null)
     {
         fbtcs.TrySetResult(loginResult.Token.TokenString);
     }
     else
     {
         fbtcs.TrySetException(new Exception("Facebook Client Flow Login Failed"));
     }
 }
示例#8
0
 // Handle actions once the user is logged in
 public void DidComplete(LoginButton loginButton, LoginManagerLoginResult result, NSError error)
 {
     if (error != null)
     {
         ShowMessageBox("Ups", error.Description, "Ok", null, null);
         return;
     }
     if (result.IsCancelled)
     {
         ShowMessageBox("Ups", "The user cancelled the request", "Ok", null, null);
         return;
     }
 }
示例#9
0
 void HandleLoginManagerRequestTokenHandler(LoginManagerLoginResult result, NSError error)
 {
     if (error != null)
     {
         //ShowMessageBox("Ups", error.Description, "Ok", null, null);
         ShowMessageBox(Constants.STR_LOGIN_FAIL_TITLE, Constants.STR_LOGIN_FAIL_MSG);
         return;
     }
     if (result.IsCancelled)
     {
         return;
     }
     LoginProcess(result.Token);
 }
示例#10
0
        public async Task <FacebookResponse <bool> > LoginAsync(string[] permissions, FacebookPermissionType permissionType = FacebookPermissionType.Read)
        {
            var retVal = IsLoginSessionActive;
            FacebookActionStatus status = FacebookActionStatus.Error;

            if (!HasPermissions(permissions))
            {
                var window = UIApplication.SharedApplication.KeyWindow;
                var vc     = window.RootViewController;
                while (vc.PresentedViewController != null)
                {
                    vc = vc.PresentedViewController;
                }

                LoginManagerLoginResult result = await(permissionType == FacebookPermissionType.Read ? loginManager.LogInWithReadPermissionsAsync(permissions, vc) : loginManager.LogInWithPublishPermissionsAsync(permissions, vc));

                if (result.IsCancelled)
                {
                    retVal = false;
                    status = FacebookActionStatus.Canceled;
                }
                else
                {
                    retVal = HasPermissions(result.GrantedPermissions.Select(p => $"{p}").ToArray());

                    NSUserDefaults.StandardUserDefaults.SetString(result.Token.TokenString, FBAccessTokenKey);
                    NSUserDefaults.StandardUserDefaults.SetValueForKey(result.Token.ExpirationDate, FBAccessTokenExpirationDateKey);
                    NSUserDefaults.StandardUserDefaults.SetString(result.Token.UserId, FBUserIdKey);
                    NSUserDefaults.StandardUserDefaults.Synchronize();

                    status = retVal ? FacebookActionStatus.Completed : FacebookActionStatus.Unauthorized;
                }
            }
            else
            {
                status = FacebookActionStatus.Completed;
            }
            var fbArgs = new FBEventArgs <bool>(retVal, status);

            OnLogin(this, fbArgs);

            pendingAction?.Execute();

            pendingAction = null;


            return(new FacebookResponse <bool>(fbArgs));
        }
示例#11
0
        private void FacebookLoginRequestHandler(LoginManagerLoginResult result, NSError error)
        {
            if (error != null)
            {
                //ShowMessageBox("Ups", error.Description, "Ok", null, null);
                ShowMessageBox("Login Failed", "The social network login failed for your account", "Ok", null, null);
                return;
            }
            if (result.IsCancelled)
            {
                return;
            }
            var userid = result.Token.UserID;

            FacebookLoggedIn(result.Token.UserID);
        }
 private void HandleLogin(LoginManagerLoginResult result, NSError error)
 {
     if (error == null)
     {
         if (AccessToken.CurrentAccessToken != null)
         {
             facebookToken = AccessToken.CurrentAccessToken.TokenString;
             var credential = FacebookAuthProvider.GetCredential(AccessToken.CurrentAccessToken.TokenString);
             Auth.DefaultInstance.SignInWithCredential(credential, SignInOnCompletion);
         }
     }
     else
     {
         facebookToken = string.Empty;
         SetVerificationStatus(VerificationStatus.Failed, error.LocalizedDescription);
     }
 }
示例#13
0
        public async Task <FacebookResponse <bool> > LoginAsync(string[] permissions, FacebookPermissionType permissionType = FacebookPermissionType.Read)
        {
            var retVal = IsLoggedIn;
            FacebookActionStatus status = FacebookActionStatus.Error;

            if (!retVal || !HasPermissions(permissions))
            {
                var window = UIApplication.SharedApplication.KeyWindow;
                var vc     = window.RootViewController;
                while (vc.PresentedViewController != null)
                {
                    vc = vc.PresentedViewController;
                }

                LoginManagerLoginResult result = await(permissionType == FacebookPermissionType.Read ? loginManager.LogInWithReadPermissionsAsync(permissions, vc) : loginManager.LogInWithPublishPermissionsAsync(permissions, vc));

                if (result.IsCancelled)
                {
                    retVal = false;
                    status = FacebookActionStatus.Canceled;
                }
                else
                {
                    //result.GrantedPermissions.h
                    retVal = HasPermissions(result.GrantedPermissions.Select(p => $"{p}").ToArray());

                    status = retVal ? FacebookActionStatus.Completed : FacebookActionStatus.Unauthorized;
                }
            }
            else
            {
                status = FacebookActionStatus.Completed;
            }
            var fbArgs = new FBEventArgs <bool>(retVal, status);

            OnLogin(this, fbArgs);

            pendingAction?.Execute();

            pendingAction = null;


            return(new FacebookResponse <bool>(fbArgs));
        }
        // Handle actions once the user is logged in
        public void DidComplete(LoginButton loginButton, LoginManagerLoginResult result, NSError error)
        {
            if (error != null)
            {
                // Handle if there was an error
                new UIAlertView("Login", error.Description, null, "Ok", null).Show();
                return;
            }

            if (result.IsCancelled)
            {
                // Handle if the user cancelled the login request
                new UIAlertView("Login", "The user cancelled the login", null, "Ok", null).Show();
                return;
            }

            // Handle your successful login
            new UIAlertView("Login", "Success!!", null, "Ok", null).Show();
        }
        public async Task <IAccessToken> LogIn(string[] permissions)
        {
            TaskCompletionSource <IAccessToken> tcs = new TaskCompletionSource <IAccessToken> ();

            var loginManager = new LoginManager();

            loginManager.LoginBehavior = LoginBehavior.SystemAccount;
            LoginManagerLoginResult result = await loginManager.LogInWithReadPermissionsAsync(permissions, null);

            if (result.IsCancelled)
            {
                tcs.SetCanceled();
            }
            else
            {
                tcs.SetResult(new iOSAccessToken(AccessToken.CurrentAccessToken));
            }

            return(await tcs.Task);
        }
示例#16
0
        private async void LoginTokenHandler(LoginManagerLoginResult loginResult, NSError error)
        {
            if (loginResult.Token != null)
            {
                Debug.WriteLine($"Logged into Facebook, access_token: {loginResult.Token.TokenString}");

                var token = new JObject();
                token["access_token"] = loginResult.Token.TokenString;

                var user = await App.Instance.MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);

                Debug.WriteLine($"Logged into MobileService, user: {user.UserId}");

                tcs.TrySetResult(user);
            }
            else
            {
                tcs.TrySetException(new Exception("Facebook login failed"));
            }
        }
        private void OnLoginHandler(LoginManagerLoginResult result, NSError error)
        {
            if (error != null || result == null || result.IsCancelled)
            {
                if (result != null && result.IsCancelled)
                {
                    OnLoginError?.Invoke(new Exception("Login Canceled."));
                }

                if (error != null)
                {
                    OnLoginError?.Invoke(new Exception(error.LocalizedDescription));
                }
            }
            else
            {
                var request = new GraphRequest("me", new NSDictionary("fields", "id, first_name, email, last_name, picture.width(500).height(500)"));
                request.Start(OnRequestHandler);
            }
        }
示例#18
0
 private void LoginManagerLoginHandler(LoginManagerLoginResult result, NSError error)
 {
     if (result.IsCancelled)
     {
         _completionSource.TrySetResult(new LoginResult(LoginState.Canceled, null));
     }
     else if (error != null)
     {
         _completionSource.TrySetResult(new LoginResult
                                        (
                                            LoginState.Failed,
                                            null,
                                            error.LocalizedDescription
                                        ));
     }
     else
     {
         var request = new GraphRequest(@"me", null);
         request.Start(GetDetailsRequestHandler);
     }
 }
示例#19
0
        public void DidComplete(LoginButton loginButton, LoginManagerLoginResult result, NSError error)
        {
            if (error != null)
            {
                // Handle if there was an error
                AppDelegate.ShowMessage("Could not login!", error.Description, NavigationController);
                return;
            }

            if (result.IsCancelled)
            {
                // Handle if the user cancelled the login request
                AppDelegate.ShowMessage("Could not login!", "The user cancelled the login", NavigationController);
                return;
            }

            // Get access token for the signed-in user and exchange it for a Firebase credential
            var credential = FacebookAuthProvider.GetCredential(AccessToken.CurrentAccessToken.TokenString);

            // Authenticate with Firebase using the credential
            Auth.DefaultInstance.SignInWithCredential(credential, SignInOnCompletion);
        }
示例#20
0
        public void LoginRequestHandler(LoginManagerLoginResult result, NSError error)
        {
            if (error != null)
            {
                // Login Error
                ((MainViewController)this.MainViewController).UnblockUI();
            }
            else if (result.IsCancelled)
            {
                // Login Cancelled
                ((MainViewController)this.MainViewController).UnblockUI();
            }
            else
            {
                if (AccessToken.CurrentAccessToken == null)
                {
                    return;
                }

                GetFacebookData();
            }
        }
        public override async void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            if (!isShown && (Element != null))
            {
                isShown = true;
                FacebookLogin facebookLogin = (FacebookLogin)Element;

#if USE_NATIVE_FACEBOOK_LOGIN
                try
                {
                    var signedIn = verifyFacebookFromSerttings();
                    if (string.IsNullOrEmpty(signedIn.Item1) || string.IsNullOrEmpty(signedIn.Item2))
                    {
                        LoginManager manager = new LoginManager()
                        {
                            LoginBehavior = LoginBehavior.Native
                        };

                        manager.Init();
                        LoginManagerLoginResult result = await manager.LogInWithReadPermissionsAsync(new string[] { "public_profile", "email" }, null);

                        var id              = string.Empty;
                        var token           = string.Empty;
                        var isAuthenticated = !result.IsCancelled && (result.Token != null);

                        if (isAuthenticated)
                        {
                            token = result.Token.TokenString;
                            id    = result.Token.UserID;
                        }

                        facebookLogin.LoginCompleted(isAuthenticated, id, token);
                    }
                    else
                    {
                        facebookLogin.LoginCompleted(true, signedIn.Item2, signedIn.Item1);
                    }
                }
                catch
                {
                    facebookLogin.LoginCompleted(false, string.Empty, string.Empty);
                }
#else
                var auth = new OAuth2Authenticator(
                    clientId: facebookLogin.FacebookSettings.ClientId,
                    scope: facebookLogin.FacebookSettings.Scope,
                    authorizeUrl: new Uri(facebookLogin.FacebookSettings.AuthorizeUrl),
                    redirectUrl: new Uri(facebookLogin.FacebookSettings.RedirectUrl));

                auth.Completed += async(sender, eventArgs) =>
                {
                    string id = string.Empty, token = String.Empty;
                    if (eventArgs.IsAuthenticated)
                    {
                        token = eventArgs.Account.Properties["access_token"];

                        var request = new OAuth2Request("GET", new Uri("https://graph.facebook.com/me?fields=name"), null, eventArgs.Account);
                        await request.GetResponseAsync().ContinueWith(t =>
                        {
                            if (!t.IsFaulted)
                            {
                                string response     = t.Result.GetResponseText();
                                NSData responseData = NSData.FromString(response, NSStringEncoding.UTF8);

                                NSError error;
                                NSDictionary jsonDict = (NSDictionary)NSJsonSerialization.Deserialize(responseData, 0, out error);

                                if (jsonDict != null)
                                {
                                    NSObject obj = jsonDict.ValueForKey(new NSString("id"));
                                    id           = obj?.ToString();
                                }
                            }
                        });
                    }

                    facebookLogin.LoginCompleted(eventArgs.IsAuthenticated, id, token);
                };

                PresentViewController(auth.GetUI(), true, null);
#endif
            }
        }
示例#22
0
        private void LoginManagerRequestTokenHandler(LoginManagerLoginResult result, NSError error)
        {
            if (error != null)
            {
                //Handle error
            }

            var request = new GraphRequest("/me", null, AccessToken.CurrentAccessToken.TokenString, null, "GET");
            var requestConnection = new GraphRequestConnection();
            requestConnection.AddRequest(request, GraphRequestHandler);
            requestConnection.Start();
        }
示例#23
0
        private void ObtainAccessToken(string[] permissionNames)
        {
            if (!UIDevice.CurrentDevice.CheckSystemVersion(9, 0))
            {
                throw new NotSupportedException("The Facebook probe is only available on iOS 9 and higher.");
            }

            lock (LoginLocker)
            {
                if (HasValidAccessToken)
                {
                    SensusServiceHelper.Get().Logger.Log("Already have valid Facebook access token. No need to initialize.", LoggingLevel.Normal, GetType());
                    return;
                }

                ManualResetEvent loginWait          = new ManualResetEvent(false);
                string           loginErrorMessage  = null;
                bool             userCancelledLogin = false;

                SensusContext.Current.MainThreadSynchronizer.ExecuteThreadSafe(async() =>
                {
                    try
                    {
                        LoginManagerLoginResult loginResult = await new LoginManager().LogInWithReadPermissionsAsync(permissionNames, UIApplication.SharedApplication.KeyWindow.RootViewController);

                        if (loginResult == null)
                        {
                            loginErrorMessage = "No login result returned by login manager.";
                        }
                        else if (loginResult.IsCancelled)
                        {
                            loginErrorMessage  = "User cancelled login.";
                            userCancelledLogin = true;
                        }
                        else
                        {
                            AccessToken.CurrentAccessToken = loginResult.Token;
                        }
                    }
                    catch (Exception ex)
                    {
                        loginErrorMessage = "Exception while logging in:  " + ex.Message;
                    }
                    finally
                    {
                        loginWait.Set();
                    }
                });

                loginWait.WaitOne();

                if (loginErrorMessage == null)
                {
                    SensusServiceHelper.Get().Logger.Log("Facebook login succeeded.", LoggingLevel.Normal, GetType());
                }
                else
                {
                    SensusServiceHelper.Get().Logger.Log("Error while initializing Facebook SDK and/or logging in:  " + loginErrorMessage, LoggingLevel.Normal, GetType());
                }

                if (!HasValidAccessToken)
                {
                    string message = "Failed to obtain access token.";
                    SensusServiceHelper.Get().Logger.Log(message, LoggingLevel.Normal, GetType());

                    // if the user cancelled the login, don't prompt them again
                    if (userCancelledLogin)
                    {
                        throw new NotSupportedException(message + " User cancelled login.");
                    }
                    // if the user did not cancel the login, allow the login to be presented again when the health test is run
                    else
                    {
                        throw new Exception(message);
                    }
                }
            }
        }