求助:Facebook Graph用户图片URL在移动设备无法正常显示
我之前碰到过完全一样的情况,核心问题就是Facebook的CDN会根据请求的设备User-Agent自动重定向到移动端域名,但那个移动端域名的图片加载逻辑有兼容性问题。这里有几个靠谱的解决办法:
方法1:强制阻止移动端重定向
直接用你提到的lookaside域名的URL,额外加个mobile=false参数,就能避免跳转到m.facebook的地址。修改后的URL是:
https://lookaside.facebook.com/platform/profilepic/?asid={app_user_id}&height=120&width=120&mobile=false
这个参数会告诉Facebook CDN不要做设备类型的重定向,移动端请求时会直接返回能正常加载的图片资源。
方法2:用Graph API获取稳定的图片直链(更推荐)
Facebook官方其实更建议用带redirect=false参数的Graph API请求,这样不会返回重定向地址,而是直接给你图片的真实URL。你可以请求这个地址:
https://graph.facebook.com/{app_user_id}/picture?width=120&height=120&redirect=false
它会返回一个JSON,里面data.url字段就是可以直接用的图片地址,不管桌面还是移动端都能稳定加载,从根源上避免重定向问题。
方法3:修改请求的User-Agent(适合没法改URL的场景)
如果你的应用暂时没法修改现有URL,那可以在发起图片请求的时候,把User-Agent设置成桌面端的标识,比如用Chrome桌面版的UA:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36。这样Facebook CDN会认为是桌面端请求,返回正常的图片资源,不会跳转到移动端域名。
另外提一句,要是你需要访问用户的自定义头像,得确保应用已经获取了user_photos权限,但公共头像是不需要额外权限的。
内容的提问来源于stack exchange,提问作者Miguel Angel Ruiz

