Panache
Panache

Reputation: 1721

Issue with Google Calendar API Authentication

I'm trying to create an app where I can insert an event into Google Calendar. Following the information given on https://developers.google.com/google-apps/calendar/quickstart/java, I've added QuickStart class and called it from my MainActivty. Below is my QuickStart class. Since I was having a project already created with OAuth, so I used same. But now I'm getting an error while accessing the app.

QuickStart Class:

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

}

In QuickStart, i just changed the name of application as required.

This is how I called it from MainActivity

try {
    QuickStart.authorize();
} catch (IOException e) {
    e.printStackTrace();
}

All Permissions are added and below is errorlog:

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)

I didn't understand why its asking for JKS and where to define this. pls guide to fix this

Upvotes: 0

Views: 593

Answers (2)

Arbaz Shaikh
Arbaz Shaikh

Reputation: 41

Just Replace

HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

With

HTTP_TRANSPORT = new NetHttpTransport();

Now check.

Upvotes: 1

Panache
Panache

Reputation: 1721

finally after spending week , got right working code.

https://developers.google.com/google-apps/calendar/quickstart/android

Upvotes: 0

Related Questions