我需要创建一个Java应用程序,每天在数据库中存储来自企业帐户的广告名称。
以下是采取的步骤:
- 我被添加到Facebook上的一家公司,可以访问他们的广告帐户
- 我在developers.facebook.com上注册了一个应用程序。
- 从https://developers.facebook.com/tools/debug/accesstoken/获取访问令牌
- 从应用程序面板获取应用程序密码
这是代码段:
public static final String ACCESS_TOKEN = [the token from above];
public static final Long ACCOUNT_ID = [the business account it];
public static final String APP_SECRET = [the scret from
public static void main(String...args) throws Exception {
APIContext context = new APIContext(ACCESS_TOKEN, APP_SECRET);
AdAccount account = new AdAccount(ACCOUNT_ID, context);
System.out.println(account.getAds().execute().getRawResponseAsJsonObject());
}
我收到以下错误:
com.facebook.ads.sdk.APIException $ FailedRequestException: {"错误":{"消息":"(#273)此广告API调用要求用户成为 广告帐户的管理员。用户不是广告帐户的管理员 。XXXXXXXX""类型":" OAuthException""代码" 273" fbtrace_id":" GD30f + ON / K4"}}
我有以下问题:
1 - 为什么我需要管理员权限才能列出我可以在广告管理系统页面中看到的相同广告?
2 - 如果我的用户失去了对企业帐户的访问权限,但我希望Java仍能正常运行,该怎么办?其他用户是否仍然可以运行Java代码?
3 - 上面的描述和代码有什么不对吗?
4 - 如何生成永久令牌而不是临时令牌?
答案 0 :(得分:1)
我的答案有点晚了,但我遇到了与Facebook Ads SDK for Python相同的问题。我已经调查了问题的原因,它似乎与"层" a.k.a. access levels Facebook应用程序。
默认情况下,所有创建的应用都有"开发"访问级别,对您没有管理员访问权限的广告帐户的编程访问权限有很多限制。来自Marketing API文档的Access and Authentication页面的以下引用解释了它非常简单(帐户限制,表中的开发访问级别条目):
与您的应用相关联的帐户列表中最多有5个帐户。来自应用管理员或开发者的API调用以及代表广告帐户管理员或广告客户的 。
基本访问级别:
25个广告帐户,由与您的应用相关联的帐户列表定义。
标准访问级别:
使用Marketing API应用
管理无限制的广告帐户
总结以上引用,您必须获得应用的标准访问级别,才能完全以编程方式访问任何广告帐户的数据,而不受任何限制。
上面的相同链接说明了如何获得应用的标准访问权限(它涉及Facebook员工的性能保证和审核。
准确地解决您的问题:
ads_management
一个)。请参阅corresponding docs APIException
时,它只是意味着你获得了正确的代码,虽然你没有获得访问级别的概念,所以API端点拒绝处理你的请求希望我不会太迟,我的解释会帮助你。