persona para otra mejor mac gratis google descargar con compartir como calendario app agenda ios calendar google-calendar

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