2017-12-24 25 views
0

Google 캘린더에 일정을 삽입 할 수있는 앱을 만들려고합니다. 정보가 https://developers.google.com/google-apps/calendar/quickstart/java에 주어지면 Quickstart 클래스를 추가하고 내 mainactivty에서 호출했습니다. 아래는 나의 퀵 스타트 클래스입니다. OAuth로 이미 생성 된 프로젝트가 있었으므로 동일한 것을 사용했습니다. 하지만 이제 앱에 액세스하는 중에 오류가 발생합니다.Google 캘린더 API 인증 문제

퀵 스타트 클래스 : 필요에 따라

public class QuickStart { 
    /** 
    * Application name. 
    */ 
    private static final String APPLICATION_NAME = 
      "mycalapp"; 

    /** 
    * Directory to store user credentials for this application. 
    */ 
    private static final java.io.File DATA_STORE_DIR = new java.io.File(
      System.getProperty("user.home"), ".credentials/calendar-java-quickstart"); 

    /** 
    * Global instance of the {@link FileDataStoreFactory}. 
    */ 
    private static FileDataStoreFactory DATA_STORE_FACTORY; 

    /** 
    * Global instance of the JSON factory. 
    */ 
    private static final JsonFactory JSON_FACTORY = 
      JacksonFactory.getDefaultInstance(); 

    /** 
    * Global instance of the HTTP transport. 
    */ 
    private static HttpTransport HTTP_TRANSPORT; 

    /** 
    * Global instance of the scopes required by this quickstart. 
    * <p> 
    * If modifying these scopes, delete your previously saved credentials 
    * at ~/.credentials/calendar-java-quickstart 
    */ 
    private static final List<String> SCOPES = 
      Arrays.asList(CalendarScopes.CALENDAR_READONLY); 

    static { 
     try { 
      HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
      DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 
     } catch (Throwable t) { 
      t.printStackTrace(); 
      System.exit(1); 
     } 
    } 

    /** 
    * Creates an authorized Credential object. 
    * 
    * @return an authorized Credential object. 
    * @throws IOException 
    */ 
    public static Credential authorize() throws IOException { 
     // Load client secrets. 
     InputStream in = 
       QuickStart.class.getResourceAsStream("/google-services.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; 
    } 

    /** 
    * Build and return an authorized Calendar client service. 
    * 
    * @return an authorized Calendar client service 
    * @throws IOException 
    */ 
    public static com.google.api.services.calendar.Calendar 
    getCalendarService() throws IOException { 
     Credential credential = authorize(); 
     return new com.google.api.services.calendar.Calendar.Builder(
       HTTP_TRANSPORT, JSON_FACTORY, credential) 
       .setApplicationName(APPLICATION_NAME) 
       .build(); 
    } 

    public static void main(String[] args) throws IOException { 
     // Build a new authorized API client service. 
     // Note: Do not confuse this class with the 
     // com.google.api.services.calendar.model.Calendar class. 
     com.google.api.services.calendar.Calendar service = 
       getCalendarService(); 

     // List the next 10 events from the primary calendar. 
     DateTime now = new DateTime(System.currentTimeMillis()); 
     Events events = service.events().list("primary") 
       .setMaxResults(10) 
       .setTimeMin(now) 
       .setOrderBy("startTime") 
       .setSingleEvents(true) 
       .execute(); 
     List<Event> items = events.getItems(); 
     if (items.size() == 0) { 
      System.out.println("No upcoming events found."); 
     } else { 
      System.out.println("Upcoming events"); 
      for (Event event : items) { 
       DateTime start = event.getStart().getDateTime(); 
       if (start == null) { 
        start = event.getStart().getDate(); 
       } 
       System.out.printf("%s (%s)\n", event.getSummary(), start); 
      } 
     } 
    } 

} 

은 빠른에, 난 그냥 응용 프로그램의 이름을 변경했습니다.

이 내가 Mainactivity

모든 권한이 추가
try { 
         QuickStart.authorize(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

에서 호출하는 방법입니다 아래 오류 로그입니다 : 곳을 정의하는 JKS를 요구하는 이유

W/System.err: java.security.KeyStoreException: JKS not found 
W/System.err:  at java.security.KeyStore.getInstance(KeyStore.java:890) 
W/System.err:  at com.google.api.client.util.SecurityUtils.getJavaKeyStore(SecurityUtils.java:53) 
W/System.err:  at com.google.api.client.googleapis.GoogleUtils.getCertificateTrustStore(GoogleUtils.java:74) 
W/System.err:  at com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(GoogleNetHttpTransport.java:55) 
W/System.err:  at jss.smartapp.payremin.QuickStart.<clinit>(QuickStart.java:68) 
W/System.err:  at jss.smartapp.payremin.QuickStart.authorize(QuickStart.java:0) 

없음을 이해합니다. 이것을 해결하기위한 pls 가이드는 일주일을 소비 한 후 마침내 올바른 작업 코드를 얻었습니다.

답변