如何获取无需用户重新授权的Facebook永久访问令牌?
Facebook广告账户长期访问令牌问题解决方案
为什么/me/accounts返回空数据?
你用的这个接口是用来获取**Facebook公共主页(Page)的访问令牌的,而你需要的是广告账户(Ads Account)**的权限,两者完全不相关,所以返回空数组是正常的。那篇文章里的方法只适用于主页,不适用于广告账户。
广告账户有没有“永久”访问令牌?
Facebook没有真正意义上的用户级永久令牌,用户长期令牌最多只能是60天,但可以通过以下两种方式实现无需用户每60天重新授权:
方式1:定期刷新用户长期令牌(保持60天有效期循环)
你之前刷新后过期时间没变化,大概率是因为24小时内已经刷新过一次——Facebook的规则是,同一个用户令牌每24小时只能刷新一次,哪怕你提前3天操作,只要距离上次刷新不足24小时,过期时间就不会更新。
正确的刷新步骤:
- 确保用户的长期令牌还在有效期内(过期前都可以刷新,建议提前1-7天操作)
- 调用Facebook的令牌刷新接口,需要用到你的应用ID、应用密钥和当前用户的长期令牌:
GET /oauth/access_token? grant_type=fb_exchange_token& client_id=你的应用ID& client_secret=你的应用密钥& fb_exchange_token=用户当前的60天长期令牌 - 接口返回的
access_token就是新的60天长期令牌,expires_in会重新计算为60天的秒数。
方式2:用系统用户(System User)获取永久令牌(推荐长期后台使用)
如果你的仪表盘需要长期后台访问广告报告,不需要用户手动授权,更推荐用系统用户:
- 登录Facebook商务管理平台,创建一个系统用户(属于你的应用/商务管理平台,不是真实用户)
- 把这个系统用户添加到目标广告账户的权限列表里,分配需要的广告报告权限(比如
ads_read) - 在系统用户的设置页面,生成永久访问令牌(这个令牌不会过期,除非你手动吊销或者权限被移除)
- 用这个系统用户令牌直接调用广告报告API,完全不需要用户参与授权流程。
总结
- 不要用
/me/accounts来处理广告账户权限,它只针对公共主页 - 用户令牌最多60天,但可以每24小时以上刷新一次来循环有效期
- 系统用户令牌是真正的永久令牌,适合长期自动化访问广告数据
内容的提问来源于stack exchange,提问作者Tampa
相关产品推荐
相关产品推荐

