1

我需要创建一个 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: {"error":{"message":"(#273) 此广告 API 调用要求用户是广告帐户的管理员。用户不是广告帐户 XXXXXXXX 的管理员.","type":"OAuthException","code":273,"fbtrace_id":"GD30f+ON/k4"}}

我有以下问题:

1-为什么我需要管理员权限才能列出我可以从 Ad Manager 页面看到的相同广告?
2-如果我的用户失去了对企业帐户的访问权限,但我希望 Java 仍然可以运行怎么办?其他用户还能运行 Java 代码吗?
3-上面的描述和代码有什么问题吗?
4-如何生成永久令牌而不是临时令牌?

4

1 回答 1

2

我的回答有点晚了,但我在Facebook Ads SDK for Python遇到了同样的问题。我已经调查了问题的原因,它似乎与Facebook 应用程序的“层”即访问级别有关。

默认情况下,创建的所有应用程序都具有“开发”访问级别,这对于您没有管理员访问权限的广告帐户的程序访问有很多限制。Marketing API docs的访问和身份验证页面的以下引用非常简单地解释了它(帐户限制,表格中的开发访问级别条目):

与您的应用关联的帐户列表中最多 5 个帐户。来自应用管理员或开发人员以及代表广告帐户管理员或广告商的API 调用。

基本访问级别:

25 个广告帐户,由与您的应用关联的帐户列表定义。

标准访问级别:

使用 Marketing API 应用程序管理无限的广告帐户

综上所述,您必须为您的应用获得标准访问级别,才能完全以编程方式访问任何广告帐户的数据,而不受任何限制。

上面的相同链接解释了如何获得应用程序的标准访问权限(它涉及性能保证和 Facebook 员工的审查。

要准确解决您的问题:

  1. 上面已经解释过了
  2. 如果您在应用中实现 Facebook 登录并获得标准访问权限,则可以解决此问题。然后任何用户都可以使用应用程序登录并授予它必要的权限(至少ads_management一个)。查看相应的文档
  3. 我不是 Java 程序员,但正如您所了解的那样APIException,这意味着您的代码是正确的,尽管您没有了解访问级别的概念,因此 API 端点拒绝处理您的请求
  4. 个人尚未处理此问题,但请查看此 SO question

希望我还不算太晚,我的解释会对你有所帮助。

于 2017-07-01T06:14:41.640 回答