2016-05-01 8 views
2

Ich habe wirklich nachgeschlagen und keine passende Antwort gefunden.Die Meldung "Nutzer hat kein AdSense-Konto" bei der Verwendung eines Dienstkontos für den Zugriff auf die AdSense-Verwaltungs-API

Ich habe sowohl AdSense- als auch AdMob-Konten mit derselben Publisher-ID. Sie sind aktiv und wenn ich die API in https://developers.google.com/adsense/management/v1.4/reference/accounts/list versuche, funktioniert es gut.

1) Ein AdSense-Konto mit meiner persönlichen E-Mail-Adresse erstellt.
2) Aktiviert die AdSense Management API in https://console.developers.google.com/apis/credentials
3) Erstellt ein Dienstkonto und heruntergeladen die Geheimnisse der Credential JSON-Datei
5) Wartete mindestens 48 Stunden. Wahrscheinlich mehr, jetzt.
4) Meine pom.xml Datei diese Abhängigkeiten:

<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) Mein Code

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) Fehlermeldung

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." 
} 

ich etwas fehle? Ich habe jeden Stack-Overflow-Eintrag, den ich über dieses Thema gefunden habe, vergeblich verfolgt.

Wenn ich debugge, sieht das Anmeldedatenobjekt OK, mit allen Dienstkontogeheimnissen geladen. Es erhält ein AuthToken, wenn ich das credential mache. RefreshToken(); Befehl. Ich verstehe nicht, was fehlt.

Jede Hilfe würde sehr geschätzt werden.

+1

Hey verwenden, haben Sie dies noch festgelegt? Das gleiche Problem bekommen. –

+0

Haben Sie das gleiche Problem – kirhgoff

Antwort

0

von https://developers.google.com/adsense/management/getting_started „Dienstkonten werden nicht unterstützt ...“

Wenn Sie die immer angestarrt guide/Beispiele und schalten Sie den Offline-Zugriff folgen können (und speichern) einen wiederverwendbaren Token erzeugen, die sein kann verwendet, um zukünftige Anrufe zu tätigen.

Wenn Sie das Java-Beispiel bei https://github.com/googleads/googleads-adsense-examples/blob/master/java/v1.x/src/main/java/com/google/api/services/samples/adsense/cmdline/AdSenseSample.java werfen Sie einen Blick in DATA_STORE_DIR

+0

Können Sie mehr Details geben? Was meinst du mit "Offline-Zugriff aktivieren" und was soll bei DATA_STORE_DIR sein? – kirhgoff