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 void OnCompleted(JSONObject @object, GraphResponse response) { try { if (response.Error != null) { System.Diagnostics.Debug.WriteLine(response.Error.ErrorMessage.ToString()); var fbArgs = new FBEventArgs <Dictionary <string, object> >(null, FacebookActionStatus.Error, response.Error.ErrorMessage.ToString()); _onUserData?.Invoke(CrossFacebookClient.Current, fbArgs); _userDataTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); } else { var fieldsString = response.Request.Parameters.GetString("fields"); var fields = fieldsString.Split(','); Dictionary <string, object> userData = new Dictionary <string, object>(); for (int i = 0; i < fields.Length; i++) { if (@object.Has(fields[i])) { userData.Add(fields[i], @object.GetString(fields[i])); } } userData.Add("user_id", AccessToken.CurrentAccessToken.UserId); userData.Add("token", AccessToken.CurrentAccessToken.Token); var fbArgs = new FBEventArgs <Dictionary <string, object> >(userData, FacebookActionStatus.Completed); _onUserData?.Invoke(CrossFacebookClient.Current, fbArgs); _userDataTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); } } catch (JSONException ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); var fbArgs = new FBEventArgs <Dictionary <string, object> >(null, FacebookActionStatus.Error, ex.ToString()); _onUserData?.Invoke(CrossFacebookClient.Current, fbArgs); _userDataTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); } }
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); }
void RequestData(Dictionary <string, object> pDictionary) { //string path,Bundle parameters = null,HttpMethod method = null,string version = null string path = $"{pDictionary["path"]}"; string version = $"{pDictionary["version"]}"; Dictionary <string, string> parameters = pDictionary["parameters"] as Dictionary <string, string>; FacebookHttpMethod?method = pDictionary["method"] as FacebookHttpMethod?; var currentTcs = _requestTcs; var _onEvent = _onRequestData; var httpMethod = HttpMethod.Get; if (method != null) { switch (method) { case FacebookHttpMethod.Get: httpMethod = HttpMethod.Get; break; case FacebookHttpMethod.Post: httpMethod = HttpMethod.Post; _onEvent = _onPostData; currentTcs = _postTcs; break; case FacebookHttpMethod.Delete: httpMethod = HttpMethod.Delete; _onEvent = _onDeleteData; currentTcs = _deleteTcs; break; } } if (string.IsNullOrEmpty(path)) { var fbResponse = new FBEventArgs <string>(null, FacebookActionStatus.Error, "Graph query path not specified"); _onEvent?.Invoke(CrossFacebookClient.Current, fbResponse); currentTcs?.TrySetResult(new FacebookResponse <string>(fbResponse)); return; } if (AccessToken.CurrentAccessToken != null) { GraphRequest request = new GraphRequest(AccessToken.CurrentAccessToken, path); request.Callback = this; request.HttpMethod = httpMethod; if (parameters != null) { Bundle bundle = new Bundle(); foreach (var p in parameters) { if (!string.IsNullOrEmpty(p.Key) && !string.IsNullOrEmpty(p.Value)) { bundle.PutString($"{p.Key}", $"{p.Value}"); } } request.Parameters = bundle; } if (!string.IsNullOrEmpty(version)) { request.Version = version; } request.ExecuteAsync(); } else { var fbResponse = new FBEventArgs <string>(null, FacebookActionStatus.Unauthorized, "Facebook operation not authorized, be sure you requested the right permissions"); _onEvent?.Invoke(CrossFacebookClient.Current, fbResponse); currentTcs?.TrySetResult(new FacebookResponse <string>(fbResponse)); } }
public static void Initialize(Activity activity) { mLogger = AppEventsLogger.NewLogger(Android.App.Application.Context as Android.App.Application); mCallbackManager = CallbackManagerFactory.Create(); CurrentActivity = activity; loginCallback = new FacebookCallback <LoginResult> { HandleSuccess = loginResult => { if (loginResult.AccessToken != null) { var fbArgs = new FBEventArgs <bool>(true, FacebookActionStatus.Completed); _onLogin?.Invoke(CrossFacebookClient.Current, fbArgs); _loginTcs?.TrySetResult(new FacebookResponse <bool>(fbArgs)); pendingAction?.Execute(); pendingAction = null; } }, HandleCancel = () => { var fbArgs = new FBEventArgs <bool>(false, FacebookActionStatus.Canceled, "User cancelled facebook operation"); _onLogin?.Invoke(CrossFacebookClient.Current, fbArgs); _loginTcs?.TrySetResult(new FacebookResponse <bool>(fbArgs)); //Handle any cancel the user has perform Console.WriteLine("User cancelled facebook login operation"); pendingAction?.Execute(); pendingAction = null; }, HandleError = loginError => { var fbArgs = new FBEventArgs <bool>(false, FacebookActionStatus.Error, loginError.ToString()); _onLogin?.Invoke(CrossFacebookClient.Current, fbArgs); _loginTcs?.TrySetResult(new FacebookResponse <bool>(fbArgs)); //Handle any error happends here Console.WriteLine("Operation throws an error: " + loginError.ToString()); pendingAction?.Execute(); pendingAction = null; } }; shareCallback = new FacebookCallback <SharerResult> { HandleSuccess = shareResult => { Dictionary <string, object> parameters = null; if (shareResult.PostId != null) { parameters = new Dictionary <string, object>(); parameters.Add("postId", shareResult.PostId); } var fbArgs = new FBEventArgs <Dictionary <string, object> >(parameters, FacebookActionStatus.Completed); _onSharing?.Invoke(CrossFacebookClient.Current, fbArgs); _shareTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); }, HandleCancel = () => { var fbArgs = new FBEventArgs <Dictionary <string, object> >(null, FacebookActionStatus.Canceled, "User cancelled facebook operation"); _onSharing?.Invoke(CrossFacebookClient.Current, fbArgs); _shareTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); }, HandleError = shareError => { var fbArgs = new FBEventArgs <Dictionary <string, object> >(null, FacebookActionStatus.Error, shareError.Message); _onSharing?.Invoke(CrossFacebookClient.Current, fbArgs); _shareTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); } }; gameRequestCallback = new FacebookCallback <GameRequestDialog.Result> { HandleSuccess = gameRequestResult => { if (!string.IsNullOrEmpty(gameRequestResult.RequestId)) { Dictionary <string, object> parameters = new Dictionary <string, object>(); parameters.Add("requestId", gameRequestResult.RequestId); var fbArgs = new FBEventArgs <Dictionary <string, object> >(parameters, FacebookActionStatus.Completed); _onGameRequest?.Invoke(CrossFacebookClient.Current, fbArgs); _gameRequestTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); } }, HandleCancel = () => { var fbArgs = new FBEventArgs <Dictionary <string, object> >(null, FacebookActionStatus.Canceled, "User cancelled facebook operation"); _onGameRequest?.Invoke(CrossFacebookClient.Current, fbArgs); _gameRequestTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); }, HandleError = gameRequestError => { var fbArgs = new FBEventArgs <Dictionary <string, object> >(null, FacebookActionStatus.Error, gameRequestError.Message); _onGameRequest?.Invoke(CrossFacebookClient.Current, fbArgs); _gameRequestTcs?.TrySetResult(new FacebookResponse <Dictionary <string, object> >(fbArgs)); } }; LoginManager.Instance.RegisterCallback(mCallbackManager, loginCallback); }
void RequestData(Dictionary <string, object> pDictionary) { string path = $"{pDictionary["method"]}"; string version = $"{pDictionary["version"]}"; Dictionary <string, string> paramDict = pDictionary["parameters"] as Dictionary <string, string>; FacebookHttpMethod? method = pDictionary["method"] as FacebookHttpMethod?; var currentTcs = _requestTcs; var onEvent = OnRequestData; var httpMethod = "GET"; if (method != null) { switch (method) { case FacebookHttpMethod.Get: httpMethod = "GET"; break; case FacebookHttpMethod.Post: httpMethod = "POST"; onEvent = OnPostData; currentTcs = _postTcs; break; case FacebookHttpMethod.Delete: httpMethod = "DELETE"; onEvent = OnDeleteData; currentTcs = _deleteTcs; break; } } if (string.IsNullOrEmpty(path)) { var fbResponse = new FBEventArgs <string>(null, FacebookActionStatus.Error, "Graph query path not specified"); onEvent?.Invoke(CrossFacebookClient.Current, fbResponse); currentTcs?.TrySetResult(new FacebookResponse <string>(fbResponse)); return; } NSMutableDictionary parameters = null; if (paramDict != null) { parameters = new NSMutableDictionary(); foreach (var p in paramDict) { var key = $"{p}"; parameters.Add(new NSString(key), new NSString($"{paramDict[key]}")); } } var graphRequest = string.IsNullOrEmpty(version)?new GraphRequest(path, parameters, httpMethod): new GraphRequest(path, parameters, AccessToken.CurrentAccessToken.TokenString, version, httpMethod); var requestConnection = new GraphRequestConnection(); requestConnection.AddRequest(graphRequest, (connection, result, error) => { if (error == null) { var fbResponse = new FBEventArgs <string>(result.ToString(), FacebookActionStatus.Completed); onEvent?.Invoke(CrossFacebookClient.Current, fbResponse); currentTcs?.TrySetResult(new FacebookResponse <string>(fbResponse)); } else { var fbResponse = new FBEventArgs <string>(null, FacebookActionStatus.Error, $" Facebook operation failed - {error.Code} - {error.Description}"); onEvent?.Invoke(CrossFacebookClient.Current, fbResponse); currentTcs?.TrySetResult(new FacebookResponse <string>(fbResponse)); } }); requestConnection.Start(); }
public FacebookResponse(FBEventArgs <T> evtArgs) { Data = evtArgs.Data; Status = evtArgs.Status; Message = evtArgs.Message; }
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); }