in Facebook.Unity/Canvas/CanvasFacebook.cs [431:521]
private static void FormatAuthResponse(ResultContainer result, Utilities.Callback<ResultContainer> callback)
{
if (result.ResultDictionary == null)
{
callback(result);
return;
}
IDictionary<string, object> authResponse;
if (result.ResultDictionary.TryGetValue(CanvasFacebook.AuthResponseKey, out authResponse))
{
result.ResultDictionary.Remove(CanvasFacebook.AuthResponseKey);
foreach (var item in authResponse)
{
result.ResultDictionary[item.Key] = item.Value;
}
}
// The JS SDK doesn't always store the permissions so request them before returning the results
if (result.ResultDictionary.ContainsKey(LoginResult.AccessTokenKey)
&& !result.ResultDictionary.ContainsKey(LoginResult.PermissionsKey))
{
var parameters = new Dictionary<string, string>()
{
{ "fields", "permissions" },
{ Constants.AccessTokenKey, (string)result.ResultDictionary[LoginResult.AccessTokenKey] },
};
FacebookDelegate<IGraphResult> apiCallback = (IGraphResult r) =>
{
IDictionary<string, object> permissionsJson;
if (r.ResultDictionary != null && r.ResultDictionary.TryGetValue("permissions", out permissionsJson))
{
IList<string> permissions = new List<string>();
IList<object> data;
if (permissionsJson.TryGetValue("data", out data))
{
foreach (var permission in data)
{
var permissionDictionary = permission as IDictionary<string, object>;
if (permissionDictionary != null)
{
string status;
if (permissionDictionary.TryGetValue("status", out status)
&& status.Equals("granted", StringComparison.InvariantCultureIgnoreCase))
{
string permissionName;
if (permissionDictionary.TryGetValue("permission", out permissionName))
{
permissions.Add(permissionName);
}
else
{
FacebookLogger.Warn("Didn't find permission name");
}
}
else
{
FacebookLogger.Warn("Didn't find status in permissions result");
}
}
else
{
FacebookLogger.Warn("Failed to case permission dictionary");
}
}
}
else
{
FacebookLogger.Warn("Failed to extract data from permissions");
}
result.ResultDictionary[LoginResult.PermissionsKey] = permissions.ToCommaSeparateList();
}
else
{
FacebookLogger.Warn("Failed to load permissions for access token");
}
callback(result);
};
FB.API(
"me",
HttpMethod.GET,
apiCallback,
parameters);
}
else
{
callback(result);
}
}