Estoy tratando de autorizar a un usuario para la API de calendario de Google dentro de una aplicación IOS. Estoy utilizando la función OAuth2 de Google para autenticar a los usuarios. La página de autorización se abre con un error 403 con la descripción:
Este agente de usuario no puede realizar solicitudes de autorización de OAuth a Google, ya que está clasificado como agente de usuario incrustado (también conocido como vista web). Según nuestra política, solo los navegadores pueden realizar solicitudes de autorización a Google. Ofrecemos varias bibliotecas y ejemplos para que las aplicaciones nativas realicen solicitudes de autorización en el navegador.
He seguido el mismo procedimiento que se menciona en este enlace: https://developers.google.com/google-apps/calendar/quickstart/ios
En lugar de ver mi código, es mejor mirar este enlace: https://developers.google.com/google-apps/calendar/quickstart/ios porque he copiado-pegado lo mismo en mi aplicación.
Abajo están mi clientId y keyChainItemName:
static NSString *const kKeychainItemName = @"Google Calendar API";
static NSString *const kClientID = @"954370342601-sgl8k0jrbqdeagea9v6vfu3tspte96ci.apps.googleusercontent.com";
La respuesta corta es que Google ha actualizado sus restricciones de seguridad para el flujo OAuth. No van a permitir que las vistas web nativas inicien flujos OAuth, sino que están animando a la gente a utilizar los navegadores del sistema operativo para hacerlo. En tu caso, probablemente tendrás que esperar a que el SDK del calendario de Google actualice su código para obedecer el nuevo flujo recomendado. Más información en el blog de Google.
EDIT : He intentado crear un plugin multiplataforma que envuelve los SDK nativos de inicio de sesión de Google para su uso en una aplicación de formularios Xamarin. Más información se puede encontrar aquí
Por defecto, si no tienes ninguna app de google, el SDK de google abre el login dentro de una UIWebView
cuando iniciamos el login usando el siguiente método.
[[GIDSignIn sharedInstance] signIn];
Acabo de añadir una línea antes de esto, que es la siguiente.
[[GIDSignIn sharedInstance] setAllowsSignInWithWebView:NO];
Ahora google no autoriza el uso de la ventana emergente UIWebView
. En su lugar, se abre en el navegador Safari. Y ahora todo funciona como antes.