// ReSharper restore InconsistentNaming, UnusedMember.Global #region Private methods /// <summary> /// Updates an AccessTokenData object with data fetched from FB API. /// Updates ActiveSession with updated AccessTokenData object. /// Uses CurrentAccessTokenData if parameter is null /// </summary> /// <param name="tempToken">AccessTokenData object to update</param> /// <returns>LoginStatus object</returns> private static Task <LoginStatus> UpdateAndGetLoginStatus(AccessTokenData tempToken = null) { var tcs = new TaskCompletionSource <LoginStatus>(); Deployment.Current.Dispatcher.BeginInvoke(async() => { if (tempToken != null) { CurrentTokenData = tempToken; } if (string.IsNullOrEmpty(CurrentTokenData.AccessToken)) { tcs.SetResult(new LoginStatus { Status = "unknown" }); return; } await Session.CheckAndExtendTokenIfNeeded(); if (CurrentTokenData.CurrentPermissions.Count == 0 || string.IsNullOrEmpty(CurrentTokenData.FacebookId)) { // Create a copy of existing access token data to update it with new values var newTokenData = CurrentTokenData.Clone(); try { var result = (JsonObject) await FbClient.GetTaskAsync("debug_token", new { input_token = CurrentTokenData.AccessToken }); var data = (JsonObject)result.ToDictionary(pair => pair.Key, pair => pair.Value)["data"]; var userId = (string)data.ToDictionary(pair => pair.Key, pair => pair.Value)["user_id"]; newTokenData.FacebookId = userId; var actualPermissions = (JsonArray)data.ToDictionary(pair => pair.Key, pair => pair.Value)["scopes"]; foreach (var actualPermission in actualPermissions) { newTokenData.CurrentPermissions.Add((string)actualPermission); } Session.ActiveSession.CurrentAccessTokenData = newTokenData; } catch { // No need to fail here, just return a loginStatus object without userID } } var loginStatus = new LoginStatus { Status = "connected", AuthResponse = new AuthResponse { AccessToken = CurrentTokenData.AccessToken, ExpiresIn = CurrentTokenData.Expires, UserId = CurrentTokenData.FacebookId } }; tcs.SetResult(loginStatus); }); return(tcs.Task); }
// ReSharper restore InconsistentNaming, UnusedMember.Global #region Private methods /// <summary> /// Updates an AccessTokenData object with data fetched from FB API. /// Updates ActiveSession with updated AccessTokenData object. /// Uses CurrentAccessTokenData if parameter is null /// </summary> /// <param name="tempToken">AccessTokenData object to update</param> /// <returns>LoginStatus object</returns> private static Task<LoginStatus> UpdateAndGetLoginStatus(AccessTokenData tempToken = null) { var tcs = new TaskCompletionSource<LoginStatus>(); Deployment.Current.Dispatcher.BeginInvoke(async () => { if (tempToken != null) CurrentTokenData = tempToken; if (string.IsNullOrEmpty(CurrentTokenData.AccessToken)) { tcs.SetResult(new LoginStatus { Status = "unknown" }); return; } await Session.CheckAndExtendTokenIfNeeded(); if (CurrentTokenData.CurrentPermissions.Count == 0 || string.IsNullOrEmpty(CurrentTokenData.FacebookId)) { // Create a copy of existing access token data to update it with new values var newTokenData = CurrentTokenData.Clone(); try { var result = (JsonObject) await FbClient.GetTaskAsync("debug_token", new { input_token = CurrentTokenData.AccessToken }); var data = (JsonObject)result.ToDictionary(pair => pair.Key, pair => pair.Value)["data"]; var userId = (string)data.ToDictionary(pair => pair.Key, pair => pair.Value)["user_id"]; newTokenData.FacebookId = userId; var actualPermissions = (JsonArray)data.ToDictionary(pair => pair.Key, pair => pair.Value)["scopes"]; foreach (var actualPermission in actualPermissions) { newTokenData.CurrentPermissions.Add((string)actualPermission); } Session.ActiveSession.CurrentAccessTokenData = newTokenData; } catch { // No need to fail here, just return a loginStatus object without userID } } var loginStatus = new LoginStatus { Status = "connected", AuthResponse = new AuthResponse { AccessToken = CurrentTokenData.AccessToken, ExpiresIn = CurrentTokenData.Expires, UserId = CurrentTokenData.FacebookId } }; tcs.SetResult(loginStatus); }); return tcs.Task; }