我真的查了一下,没有找到合适的答案。
我拥有共享同一发布商 ID 的 AdSense 和 AdMob 帐户。他们是活跃的,当我在 https://developers.google.com/adsense/management/v1.4/reference/accounts/list 中尝试 API 时它工作正常。
1) 使用我的个人电子邮件创建了一个 AdSense 帐户。
2) 在 https://console.developers.google.com/apis/credentials 中启用了 AdSense Management API
3) 创建一个服务帐户并下载凭证的 secret json 文件
5) 等待至少 48 小时。现在可能更多。
4) 我的 pom.xml 文件有这些依赖项:
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-adsense</artifactId>
<version>v1.4-rev160-1.21.0</version>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson2</artifactId>
<version>1.21.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.21.0</version>
</dependency>
5)我的代码
private static Credential authorize() throws Exception {
FileInputStream is = new FileInputStream( "/data/admob-test.json" );
GoogleCredential credential = GoogleCredential.fromStream( is ).createScoped( AdSenseScopes.all() );
credential.refreshToken();
return credential;
}
private static AdSense initializeAdsense() throws Exception {
// Authorization.
Credential credential = authorize();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JacksonFactory jsonFactory = new JacksonFactory();
// Set up AdSense Management API client.
AdSense adsense = new AdSense.Builder( httpTransport, jsonFactory, credential ).setApplicationName( "random-app-name" ).build();
return adsense;
}
public static void main( String[] args ) {
try {
AdSense adsense = initializeAdsense();
// I get an exception on the following line:
Accounts accounts = adsense.accounts().list().execute();
if ( ( accounts.getItems() != null ) && !accounts.getItems().isEmpty() ) {
System.out.println( "SUCCESS!" );
}
else {
System.out.println( "FAIL!" );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
6) 错误信息
403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "User does not have an AdSense account.",
"reason" : "noAdSenseAccount"
} ],
"message" : "User does not have an AdSense account."
}
我错过了什么吗?我已经按照我发现的关于这个主题的每个 stackoverflow 条目都无济于事。
当我调试时,凭据对象看起来没问题,所有服务帐户 secret 都已加载。当我执行 credential.refreshToken() 时,它会得到一个 AuthToken;命令。我不明白缺少什么。
任何帮助将非常感激。
最佳答案
来自 https://developers.google.com/adsense/management/getting_started
“不支持服务帐户......”
如果您遵循入门指南/示例并打开离线访问,您可以生成(并存储)一个可重复使用的 token ,可用于将来进行调用。
如果您在 https://github.com/googleads/googleads-adsense-examples/blob/master/java/v1.x/src/main/java/com/google/api/services/samples/adsense/cmdline/AdSenseSample.java 使用 java 示例看看 DATA_STORE_DIR
关于oauth-2.0 - 使用服务帐户访问 AdSense Management API 时的 "User does not have an AdSense account"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969703/