Facebook graph api 如何在Unity的Facebook SDK中获取访问令牌的过期日期

Facebook graph api 如何在Unity的Facebook SDK中获取访问令牌的过期日期,facebook-graph-api,facebook-opengraph,parse-platform,Facebook Graph Api,Facebook Opengraph,Parse Platform,我正在使用parse sdk对我的游戏进行后端管理。对于用户注册/登录解析api,请询问参数tokenExpiration。我不知道如何从facebook unity sdk获得它。 Task logInTask=ParseFacebookUtils.LogInAsync(accessToken、userId、tokenExpiration); 我自己用调试令牌解决了这个问题。下面是正确的代码 FB.API("/debug_token?input_token="+FB.AccessToken+

我正在使用parse sdk对我的游戏进行后端管理。对于用户注册/登录解析api,请询问参数tokenExpiration。我不知道如何从facebook unity sdk获得它。

Task logInTask=ParseFacebookUtils.LogInAsync(accessToken、userId、tokenExpiration);

我自己用调试令牌解决了这个问题。下面是正确的代码

FB.API("/debug_token?input_token="+FB.AccessToken+"&access_token="+FB.AccessToken,Facebook.HttpMethod.GET, AccessTokenCallback);
function AccessTokenCallback(response:String){
Debug.Log(response);
var access = JSON.Parse(response);
Debug.Log("Token Expiration is: "+access["data"]["expires_at"].Value);
}

如果您将打印响应,它将为您提供一个JSON,其中包含有关访问令牌的所有信息,您可以获取有关访问令牌的任何信息。

打开FacebookAccessTokenEditor.cs并替换原始第81行:

formData["batch"] = "[{\"method\":\"GET\", \"relative_url\":\"me?fields=id\"},{\"method\":\"GET\", \"relative_url\":\"app?fields=id\"}]";
由这两位:

string getExpiresAt = ",{\"method\":\"GET\", \"relative_url\":\"debug_token?input_token="+accessToken+"\"}";
formData["batch"] = "[{\"method\":\"GET\", \"relative_url\":\"me?fields=id\"},{\"method\":\"GET\", \"relative_url\":\"app?fields=id\"}"+getExpiresAt+"]";
然后打开FacebookEditor.cs并在方法MockLoginCallback中,就在第220行之前:

isLoggedIn = true;
插入以下行:

var tokenData = (Dictionary<string, object>)MiniJSON.Json.Deserialize(responses[2]);
var expiresAt = (long)((Dictionary<string, object>)tokenData["data"])["expires_at"];
accessTokenExpiresAt = FromTimestamp((int)expiresAt);
最后,您可以像在IOS、Android或Web上一样调用parse方法:

Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync(FB.UserId, FB.AccessToken, FB.AccessTokenExpiresAt);
Task logInTask=ParseFacebookUtils.LogInAsync(FB.UserId,FB.AccessToken,FB.AccessTokenExpiresAt);
注意:由于我一直在编写代码,我不确定原始行号,但我认为它们是正确的。此外,这并不反映最佳编码实践,但由于它仅用于调试上下文,因此对我来说已经足够好了

private DateTime FromTimestamp(int timestamp)
{
    return new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(timestamp);
}
Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync(FB.UserId, FB.AccessToken, FB.AccessTokenExpiresAt);