3

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

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

2 回答 2

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

于 2013-09-19T19:11:42.660 回答
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+"]";

然后打开 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);

另外,添加您可以从 AndroidFacebook.cs 或 IOSFacebook.cs 复制的缺失函数 FromTimestamp 或从此处复制:

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

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

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

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

于 2014-07-18T22:55:02.903 回答