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); }
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)); }
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); }