Facebook SDK: client_pages调用返回PENDING,已授权仍无法创建客户页面广告
问题根源
你调用的/{BUSINESS_ID}/client_pages接口的作用是请求将用户的页面纳入你的Business Manager平台作为客户页面管理,这和用户给你的App授权ads_management是完全独立的两个流程:
- 用户给App授权:是允许你的App代表用户执行广告操作
- 页面关联到Business Manager:是请求用户把页面的管理权限共享给你的企业账号,这属于跨主体的权限转移,Facebook的安全机制要求用户手动确认,所以必然返回
PENDING,哪怕用户已经给了App权限。
而你的需求是程序化创建客户页面的广告,根本不需要走这个Business Manager关联流程。
正确操作流程
你应该用用户授权后得到的User Access Token来操作,而不是你的业务系统用户Token,具体步骤如下:
确认前端授权的权限正确
你当前的FB.login权限参数是对的:FB.login(response => { console.log('FB.login ', response); }, { scope: 'ads_management,pages_show_list,business_management,pages_manage_ads', return_scopes: true });用户授权后,前端会拿到一个短期的User Access Token,建议后端将其换成长期User Access Token(有效期60天),方便后续持久化操作。
获取页面级Access Token
广告操作通常需要页面级的Token(权限继承自用户的授权),用用户的Token调用以下接口获取:curl "https://graph.facebook.com/v8.0/{PAGE_ID}?fields=access_token&access_token={USER_ACCESS_TOKEN}"这里的
{PAGE_ID}是用户的页面ID,{USER_ACCESS_TOKEN}是用户授权后的Token(短期或长期均可)。用页面Token创建广告
拿到页面Token后,就可以直接调用Facebook Ads API创建广告了,比如创建广告系列的示例:curl -X POST "https://graph.facebook.com/v8.0/act_{AD_ACCOUNT_ID}/adcampaigns" \ -d "name=客户页面推广活动" \ -d "objective=POST_ENGAGEMENT" \ -d "status=PAUSED" \ -d "access_token={PAGE_ACCESS_TOKEN}"注:
{AD_ACCOUNT_ID}可以通过用户的Token调用/me/adaccounts接口获取关联的广告账户,或者如果是页面绑定的广告账户,也可以通过/{PAGE_ID}/adaccounts获取。
额外注意事项
- 如果需要长期维护广告,记得把短期User Access Token换成长期Token(通过
/oauth/access_token接口,用App ID、App Secret和短期Token换取) - 页面Token的有效期和用户Token一致,长期用户Token对应的页面Token也是长期的
- 只有当你需要代运营用户页面(比如长期管理页面内容、广告)时,才需要走
client_pages关联流程,且必须用户手动批准,这个流程无法跳过
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

