You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android集成Facebook SDK登录:令牌过期时间显示2016年问题求助

解决Facebook登录令牌过期时间显示错误的问题

嘿,我之前也踩过这个坑!其实你遇到的问题是对getExpires()返回值的误解,咱们一步步捋清楚:

问题根源

loginResult.getAccessToken().getExpires()返回的是自1970年1月1日00:00:00 UTC以来的毫秒数(时间戳),不是直接的日期字符串。你看到的"2016"其实是时间戳数字的一部分(比如2016年对应的时间戳大概是1451606400000),误把这串长数字的前几位当成了年份而已。

正确获取可读过期时间的方法

你需要把这个毫秒级时间戳转换成人类能看懂的日期格式,用Java的日期工具类处理就行:

@Override
public void onSuccess(final LoginResult loginResult) {
    // 获取令牌过期的毫秒级时间戳
    long expireTimestamp = loginResult.getAccessToken().getExpires();
    // 把时间戳转成Date对象
    Date expireDate = new Date(expireTimestamp);
    // 定义你想要的日期格式,比如"yyyy-MM-dd HH:mm:ss"
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    // 可选:指定时区为UTC,因为Facebook令牌的过期时间默认用UTC计时
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    // 格式化得到可读的过期时间字符串
    String formattedExpireTime = dateFormat.format(expireDate);
    
    // 现在formattedExpireTime就是正确的过期时间啦
    Log.d("FBLogin", "令牌过期时间:" + formattedExpireTime);
}

额外实用技巧:直接判断令牌是否过期

要是你只是想检查令牌有没有失效,完全不用自己处理时间戳,Facebook SDK已经给你封装好了方法:

boolean isTokenExpired = loginResult.getAccessToken().isExpired();
if (isTokenExpired) {
    // 令牌已过期,引导用户重新登录
} else {
    // 令牌有效,继续后续业务逻辑
}

内容的提问来源于stack exchange,提问作者Parth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:32:56