2016-05-01 22 views
2

本当にそれを探して、適切な答えが見つからなかった。サービスアカウントを使用してAdSense管理APIにアクセスするときに「ユーザーにAdSenseアカウントがありません」というメッセージが表示される

私はAdSenseとAdMobの両方のアカウントで同じサイト運営者IDを共有しています。彼らはアクティブで、https://developers.google.com/adsense/management/v1.4/reference/accounts/listでAPIを試してみるとうまくいきます。

1)私の個人的なメールでAdSenseアカウントを作成しました。
2))サービスアカウントを作成し、資格情報の秘密のJSONファイル
5をダウンロード)https://console.developers.google.com/apis/credentials
3でのAdSenseの管理APIを有効には少なくとも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エントリをたどってきました。

私がデバッグすると、信任状オブジェクトは正常に見え、すべてのサービスアカウントの秘密情報がロードされます。私がcredential.refreshToken()を実行すると、AuthTokenが取得されます。コマンド。私は何が欠けているのか分からない。

任意の助けもいただければ幸いです。あなたが取得見つめガイド/例に従うと、オフラインアクセスを有効にした場合https://developers.google.com/adsense/management/getting_started から

+1

で見てねえ、あなたはまだこれを修正しましたか?同じ問題を起こす –

+0

同じ問題があります – kirhgoff

答えて

0

「サービスアカウントがサポートされていません...」

あなたがすることができ、再利用可能なトークンを生成(および保存)することができます将来の電話をかけるために使用されます。

あなたは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

+0

詳細をお知らせください。 「オフラインアクセスをオンにする」とDATA_STORE_DIRに何があるのでしょうか? – kirhgoff

関連する問題