如何在Facebook SDK for Unity中获取访问令牌的到期日期

时间:2013-09-09 22:54:49

标签: facebook-graph-api facebook-opengraph parse-platform

我正在使用parse sdk进行游戏的后端管理。对于用户注册/登录解析api请求参数tokenExpiration。我不知道如何从facebook unity sdk获取它。 https://www.parse.com/docs/unity_guide#fbusers-signup

Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync(accessToken, userId, tokenExpiration);

2 个答案:

答案 0 :(得分:3)

我自己使用debug_token解决了这个问题。这是关于如何做的正确代码。

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,其中包含有关访问令牌的所有信息,您可以获取有关访问令牌的所需信息。

答案 1 :(得分:1)

打开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+"]";

然后在第220行之前打开FacebookEditor.cs并在方法MockLoginCallback中打开:

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);

另外,添加缺少的函数FromTimestamp,你可以从AndroidFacebook.cs或IOSFacebook.cs或jus副本从这里复制:

private DateTime FromTimestamp(int timestamp)
{
    return new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(timestamp);
}

最后,您可以像在IOS或Android或Web上一样调用解析方法:

Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync(FB.UserId, FB.AccessToken, FB.AccessTokenExpiresAt);

注意:由于我已经处理过代码,我不确定原始行号,但我认为它们是正确的。此外,这并不反映最佳编码实践,但由于它仅在调试环境中使用,因此它们对我来说足够好。