otra - google calendar para ios
Agregar evento al calendario de google desde ios (2)
He seguido el siguiente tutorial para buscar eventos del calendario de google que funciona bien. https://developers.google.com/google-apps/calendar/quickstart/ios
Ahora estoy atascado en insertar evento desde mi aplicación iOS para que también se pueda sincronizar con la web. Por favor, guíame en la dirección correcta o publica un código de muestra.
Estoy usando este código para autorización en viewDidLoad
// Initialize the Google Calendar API service & load existing credentials from the keychain if available.
self.service = [[GTLServiceCalendar alloc] init];
self.service.authorizer =
[GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
clientID:kClientID
clientSecret:kClientSecret];
La autorización parece estar bien porque los eventos de búsqueda funcionan perfectamente bien. Pero estoy usando el siguiente código para agregar un evento
- (void)addAnEvent {
// Make a new event, and show it to the user to edit
GTLCalendarEvent *newEvent = [GTLCalendarEvent object];
newEvent.summary = @"Sample Added Event";
newEvent.descriptionProperty = @"Description of sample added event";
// We''ll set the start time to now, and the end time to an hour from now,
// with a reminder 10 minutes before
NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
timeZone:[NSTimeZone systemTimeZone]];
GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
timeZone:[NSTimeZone systemTimeZone]];
newEvent.start = [GTLCalendarEventDateTime object];
newEvent.start.dateTime = startDateTime;
newEvent.end = [GTLCalendarEventDateTime object];
newEvent.end.dateTime = endDateTime;
GTLCalendarEventReminder *reminder = [GTLCalendarEventReminder object];
reminder.minutes = [NSNumber numberWithInteger:10];
reminder.method = @"email";
newEvent.reminders = [GTLCalendarEventReminders object];
newEvent.reminders.overrides = [NSArray arrayWithObject:reminder];
newEvent.reminders.useDefault = [NSNumber numberWithBool:NO];
[self addEvent:newEvent];
}
- (void)addEvent:(GTLCalendarEvent *)event {
GTLQueryCalendar *query = [GTLQueryCalendar queryForEventsInsertWithObject:event
calendarId:@"primary"];
[self.service executeQuery:query
delegate:self
didFinishSelector:@selector(displayAddEventResultWithTicket:finishedWithObject:error:)];
}
- (void)displayAddEventResultWithTicket:(GTLServiceTicket *)ticket
finishedWithObject:(GTLCalendarEvents *)events
error:(NSError *)error {
if (error == nil) {
NSLog(@"I think event has been added successfully!");
} else {
NSLog(@"ERROR : %@", error.localizedDescription);
}
}
Pero recibo el error en respuesta "La operación no pudo completarse. (Permiso insuficiente)"
Gracias,
Para agregar un evento al uso del calendario siguiendo el método
[GTLQueryCalendar queryForEventsInsertWithObject:yourEventObject calendarId:yourCalendarId]
También tenga en cuenta que debe autorizar con el alcance kGTLAuthScopeCalendar tener acceso de lectura / escritura.
He logrado hacer que esto funcione El problema está en su autorizador de servicios.
Cada vez que el usuario inicia sesión en su aplicación, se actualizan accesstoken y refreshtoken, por lo que debe crear una función que obtenga los valores actualizados del autorizador antes de enviar cualquier tipo de solicitud.
Creé una función para recuperar el Autorizador de servicios actualizado cada vez que lo necesito.
Darle una oportunidad.
Aclamaciones.
-(GTLServiceCalendar *) updateAuthService{
GTLServiceCalendar *service = [GTLServiceCalendar new];
GTMOAuth2Authentication *auth = [[GTMOAuth2Authentication alloc] init];
[auth setClientID:kClientID];
[auth setClientSecret:kClientSecret];
[auth setUserEmail:[GIDSignIn sharedInstance].currentUser.profile.email];
[auth setUserID:[GIDSignIn sharedInstance].currentUser.userID];
[auth setAccessToken:[GIDSignIn sharedInstance].currentUser.authentication.accessToken];
[auth setRefreshToken:[GIDSignIn sharedInstance].currentUser.authentication.refreshToken];
[auth setExpirationDate: [GIDSignIn sharedInstance].currentUser.authentication.accessTokenExpirationDate];
service.authorizer = auth;
return service;
}