2016-04-25 22 views
1

私は以下のコードを試しています。コンソールは(ブラウザのアドレスバーに貼り付けた後に)Googleのユーザー同意ページに私を送り、自分のアカウントにアクセスする許可を求めるURLを出力します。それは私のHTMLページにリダイレクトされます。Java - GMail API - 認証コード

ここで、トークンまたは認証コードを受け取ったかどうかはわかりません。どこから入手するのですか? Gmail APIリクエストと一緒に行くためにWebアプリケーションからHTTP Rest Callを送信する必要がありますか、それともJAVA経由で行うことができますか?

public class People { 
    public void setUp() throws IOException { 
     HttpTransport httpTransport = new NetHttpTransport(); 
     JacksonFactory jsonFactory = new JacksonFactory(); 

     String clientId = "client_id"; 
     String clientSecret = "secret"; 

     String redirectUrl = "http://localhost:8080/TestingGmailMail/webapps/login.html"; 
     String scope = "https://www.googleapis.com/auth/contacts.readonly"; 


     String authorizationUrl = new GoogleBrowserClientRequestUrl(clientId,redirectUrl,Arrays.asList(scope)).build(); 


     // Point or redirect your user to the authorizationUrl. 
     System.out.println("Go to the following link in your browser:"); 
     System.out.println(authorizationUrl); 
     } 
} 
+0

私はJavaのエキスパートではありませんが、クライアントライブラリはこのチュートリアルを読んだことがありますか? https://developers.google.com/gmail/api/quickstart/java#prerequisites – DaImTo

+0

ありがとうございます - DalmTo!はい、私はそれを読んでみると、それはひどく鈍い見つける。私はライブラリtho –

+0

を行くしようとするGoogleのAPIを使用して開始するときは非常に混乱。私はJavaで助けができませんが、多分私はあなたを少し助けることができます。 GoogleAuthorizationCodeFlowはユーザーからの認証要求を処理し、認証を保存します(Javaのどこにいなくても)refreshtokenとアクセストークンを保存する必要があります。 getGmailServiceはAPIにアクセスするためのアクセス権を与えます。必要な場合は、新しいアクセストークンを取得します。あなたがするすべてのものはGmailServiceになります – DaImTo

答えて

0

はい、@DalmToは、このすべてを処理する必要があるクライアントライブラリであることを指摘しています。

より良い設計は、アプリケーションのユーザー資格情報をディレクトリに保存することです。

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

ここで、FileDataStoreFactoryのグローバルインスタンスを作成します。

private static FileDataStoreFactory DATA_STORE_FACTORY; 

インスタンス化DATA_STORE_FACTORY静的ブロックに好ましくは資格証明書を取得する前に。

DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 

Google Developerコンソールからclient_secret.jsonをダウンロードして保存します。資格証明書を取得するには、次のメソッドを使用します。

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; 
} 

上記のメソッドが呼び出されるたび、それはDATA_STORE_DIRに提供パスにStoredCredentialを探します。見つかった場合、コードはそのまま実行されます。そうでない場合は、ブラウザが開き、アプリにログインして認証するよう求められます。そのように生成された資格情報はDATA_STORE_DIRの場所に格納されます。 StoredCredentialが存在する限り、あなたのアプリは許可を求めません。これは他のGoogle APIにも使用できる汎用デザインです。