public async Task <IFacebookAccount> AuthenticateAsync(IFacebookAuthOptions options) { await LogoutAsync(); var currentAccessToken = global::Facebook.CoreKit.AccessToken.CurrentAccessToken; if (currentAccessToken != null && (currentAccessToken.ExpirationDate == null || ((DateTime)currentAccessToken.ExpirationDate).ToUniversalTime() > DateTime.UtcNow)) { var currentProfile = global::Facebook.CoreKit.Profile.CurrentProfile; if (currentProfile != null) { populateAccount(currentAccessToken, currentProfile, options.RequestedPhotoSize); } } var loginManager = new global::Facebook.LoginKit.LoginManager(); var vc = global::Plugin.SocialAuth.iOS.SocialAuth.PresentingViewController; global::Facebook.LoginKit.LoginManagerLoginResult resp = null; var scopes = options?.Scopes ?? new string[] { }; if (options?.WritePermissions ?? false) { resp = await loginManager.LogInWithPublishPermissionsAsync(scopes, vc); } else { resp = await loginManager.LogInWithReadPermissionsAsync(scopes, vc); } if (resp.IsCancelled) { return(null); } if (resp == null || resp.Token == null) { return(null); } return(populateAccount(resp.Token, global::Facebook.CoreKit.Profile.CurrentProfile, options.RequestedPhotoSize)); }
static async void RequestTokenHandler(SDK.LoginKit.LoginManagerLoginResult result, NSError error) { if (error != null) { Log.For(typeof(Facebook)).Error("An error occurred in Facebook :[" + error + "]"); await OnError.Raise(error.ToString()); } else if (result?.IsCancelled ?? true) { await OnCancel.Raise(); } else { try { var er = result.ToString(); var accessToken = result.Token; if (accessToken.IsExpired) { accessToken = await RefreshAccessToken(); } CurrentAccessToken = new AccessToken { TokenString = accessToken.TokenString, AppId = accessToken.AppId, UserId = accessToken.UserId }; var param = NSDictionary.FromObjectAndKey(CurrentParameters.ToString(",").ToNs(), "fields".ToNs()); var request = new SDK.CoreKit.GraphRequest("me", param, accessToken.TokenString, null, "GET"); request.Start(new SDK.CoreKit.GraphRequestBlockHandler(GraphCallback)); } catch (Exception e) { Log.For(typeof(Facebook)).Error(e); throw; } } }