2016-04-25 17 views
1

Ich versuche den folgenden Code. Die Konsole druckt eine URL aus, die mich (nach dem Einfügen in die Adressleiste meines Browsers) auf die Google-Seite für die Zustimmung der Nutzer sendet und um Erlaubnis bittet, auf mein Konto zuzugreifen. Es leitet mich dann zu meiner HTML-Seite um - so weit, so gut.Java - GMail API - Autorisierungscode

Jetzt bin ich nicht sicher, ob ich ein Token oder einen Autorisierungscode erhalte. Woher bekomme ich es? Und muss ich dann einen HTTP-Restanruf von einer Webanwendung senden, um mit der Google Mail-API-Anfrage zu kommunizieren, oder kann ich das über JAVA tun?

+0

Ich bin kein Java-Experte, aber die Client-Bibliothek sollte alles für Sie behandeln haben Sie versucht, dieses Tutorial zu lesen? https://developers.google.com/gmail/api/quickstart/java#prerequisites – DaImTo

+0

Vielen Dank - DalmTo! Ja, ich habe versucht, es zu lesen und finde es schrecklich stumpf .. Ich werde versuchen, über die Bibliothek gehen tho –

+0

Es ist sehr verwirrend, wenn Sie anfangen, Google APIs zu verwenden. Ich kann nicht mit Java helfen, aber vielleicht kann ich Ihnen helfen, ein wenig zu führen. GoogleAuthorizationCodeFlow handhabt das Anfordern von Auth von dem Benutzer und speichert die Authentifizierung (keine Ahnung, wo in Java) refreshtoken und ein Zugriffstoken. getGmailService wird Ihnen Zugriff auf die API geben, um ein neues Zugriffstoken zu holen, wenn und falls es eines benötigt. Alles, was Sie tun, wird der Google Mail-Dienst sein – DaImTo

Antwort

0

Ja, @Dalmto weist darauf hin, dass die Client-Bibliothek diejenige ist, die all dies behandeln sollte.

Ein besseres Design besteht darin, Benutzeranmeldeinformationen für Ihre Anwendung in einem Verzeichnis zu speichern.

private static final java.io.File DATA_STORE_DIR = new java.io.File(
    System.getProperty("user.home"), ".store/mail_credentials"); 

nun eine globale Instanz für FileDataStoreFactory machen.

private static FileDataStoreFactory DATA_STORE_FACTORY; 

Instantiate DATA_STORE_FACTORY vor Anmeldeinformationen vorzugsweise in einem statischen Block zu bekommen.

DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 

herunterladen und speichern Sie die client_secret.json von Google Developer-Konsole. Verwenden Sie die folgende Methode Anmeldeinformationen zu erhalten:

public static Credential authorize() throws IOException { 
    // Load client secrets. 
    InputStream in 
      = GmailQuickStart.class.getResourceAsStream("/client_secrets.json"); 
    GoogleClientSecrets clientSecrets 
      = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 

    // Build flow and trigger user authorization request. 
    GoogleAuthorizationCodeFlow flow 
      = new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
      .setDataStoreFactory(DATA_STORE_FACTORY) 
      .setAccessType("offline") 
      .build(); 
    Credential credential = new AuthorizationCodeInstalledApp(
      flow, new LocalServerReceiver()).authorize("user"); 
    System.out.println(
      "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
    return credential; 
} 

Jedes Mal, wenn die obige Methode aufgerufen wird, sieht es für die StoredCredential auf dem Weg zu DATA_STORE_DIR zur Verfügung gestellt. Wenn es gefunden wird, wird der Code so ausgeführt, wie er ist. Ist dies nicht der Fall, öffnet sich ein Browser, der Sie zur Anmeldung und Autorisierung Ihrer App auffordert. Die als solche generierten Anmeldedaten werden im Verzeichnis DATA_STORE_DIR gespeichert. Solange die StoredCredential vorhanden ist, wird Ihre App keine Erlaubnis anfordern. Dies ist ein Design für allgemeine Zwecke, das auch für andere Google-APIs verwendet werden kann.