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
相关产品推荐
相关产品推荐

