public async Task <FacebookResponse <bool> > LoginAsync(string[] permissions, FacebookPermissionType permissionType = FacebookPermissionType.Read)
        {
            _loginTcs = new TaskCompletionSource <FacebookResponse <bool> >();
            var retVal = IsLoggedIn;

            if (!retVal || !HasPermissions(permissions))
            {
                var activity = CurrentActivity;

                if (!activity.IsFinishing)
                {
                    activity.RunOnUiThread(() =>
                    {
                        if (permissionType == FacebookPermissionType.Read)
                        {
                            LoginManager.Instance.LogInWithReadPermissions(activity, permissions.ToList());
                        }
                        else
                        {
                            LoginManager.Instance.LogInWithPublishPermissions(activity, permissions.ToList());
                        }
                    });
                }
            }
            else
            {
                var fbArgs = new FBEventArgs <bool>(retVal, FacebookActionStatus.Completed);
                _onLogin?.Invoke(CrossFacebookClient.Current, fbArgs);
                _loginTcs.TrySetResult(new FacebookResponse <bool>(fbArgs));

                pendingAction?.Execute();

                pendingAction = null;
            }
            return(await _loginTcs.Task);
        }
        public async Task <FacebookResponse <string> > RequestUserDataAsync(string[] fields, string[] permissions, FacebookPermissionType permissionType = FacebookPermissionType.Read)
        {
            _userDataTcs = new TaskCompletionSource <FacebookResponse <string> >();
            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "fields", fields }
            };

            return(await PerformAction(RequestUserData, parameters, _userDataTcs.Task, FacebookPermissionType.Read, permissions));
        }
        /*async Task<FBEventArgs<Dictionary<string, object>>> PerformAction(Action<Dictionary<string, object>> action, Dictionary<string, object> parameters, Task<FBEventArgs<Dictionary<string, object>>> task, FacebookPermissionType permissionType, string[] permissions)
         * {
         *  pendingAction = null;
         *  if(permissions == null)
         *  {
         *      action(parameters);
         *  }
         *  else
         *  {
         *      bool authorized = HasPermissions(permissions);
         *
         *      if (!authorized)
         *      {
         *          pendingAction = new FacebookPendingAction<Dictionary<string, object>>(action, parameters);
         *          await LoginAsync(permissions, permissionType);
         *      }
         *      else
         *      {
         *          action(parameters);
         *      }
         *  }
         *
         *  return await task;
         *
         * }*/

        async Task <T> PerformAction <T>(Action <Dictionary <string, object> > action, Dictionary <string, object> parameters, Task <T> task, FacebookPermissionType permissionType, string[] permissions)
        {
            pendingAction = null;
            if (permissions == null)
            {
                action(parameters);
            }
            else
            {
                bool authorized = HasPermissions(permissions);

                if (!authorized)
                {
                    pendingAction = new FacebookPendingAction <Dictionary <string, object> >(action, parameters);
                    await LoginAsync(permissions, permissionType);
                }
                else
                {
                    action(parameters);
                }
            }

            return(await task);
        }
Beispiel #4
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));
        }
Beispiel #5
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));
        }
        public async Task <FacebookResponse <bool> > LoginAsync(string[] permissions, FacebookPermissionType permissionType = FacebookPermissionType.Read)
        {
            _loginTcs = new TaskCompletionSource <FacebookResponse <bool> >();
            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;
                }

                loginManager.LogIn(permissions, vc, (result, error) =>
                {
                    if (error == null)
                    {
                        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
                    {
                        retVal = false;
                        status = FacebookActionStatus.Error;
                    }



                    var fbArgs = new FBEventArgs <bool>(retVal, status);
                    OnLogin?.Invoke(CrossFacebookClient.Current, fbArgs);
                    _loginTcs?.TrySetResult(new FacebookResponse <bool>(fbArgs));

                    pendingAction?.Execute();

                    pendingAction = null;
                });
            }
            else
            {
                var fbArgs = new FBEventArgs <bool>(retVal, FacebookActionStatus.Completed);
                OnLogin?.Invoke(CrossFacebookClient.Current, fbArgs);
                _loginTcs?.TrySetResult(new FacebookResponse <bool>(fbArgs));

                pendingAction?.Execute();

                pendingAction = null;
            }

            return(await _loginTcs.Task);
        }