google español error disallowed_useragent ios iphone google-calendar google-calendar-api google-oauth

ios - español - error disallowed_useragent android



403 Error: eso es un error. Error: disallowed_useragent (11)

Como se mencionó en las respuestas anteriores, SFSafariViewController es un camino a seguir, pero para aquellos que todavía usan WKWebView para la autorización de OAuth, existe una solución simple.

Simplemente cambie customUserAgent a uno de la list o customUserAgent en algún valor arbitrario. Después de ese error disallowed_useragent desaparecerá:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration]; // Check for selector availability, as it is available only on iOS 9+ if ([webView respondsToSelector:@selector(setCustomUserAgent:)]) { webView.customUserAgent = @"MyCustomUserAgent"; }

Para cambiar User-Agent en UIWebView , puede verificar esta respuesta .

Pero tenga cuidado, ya que algunos códigos de fondo pueden depender del valor del encabezado User-Agent .

Estoy intentando autorizar a un usuario para la API de calendario de Google dentro de una aplicación IOS. Estoy usando 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 tiene permitido hacer una solicitud de autorización de OAuth a Google, ya que está clasificado como un agente de usuario incorporado (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 muestras para aplicaciones nativas para realizar solicitudes de autorización en el navegador.

Seguí 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 copié y pegué lo mismo en mi aplicación.

a continuación están mi clientId y keyChainItemName:

static NSString *const kKeychainItemName = @"Google Calendar API"; static NSString *const kClientID = @"954370342601-sgl8k0jrbqdeagea9v6vfu3tspte96ci.apps.googleusercontent.com";


De forma predeterminada, si no tiene ninguna aplicación de Google, el SDK de Google abre el inicio de sesión dentro de UIWebView cuando iniciamos el inicio de sesión utilizando el siguiente método.

[[GIDSignIn sharedInstance] signIn];

Acabo de agregar una línea antes de esto, que es la siguiente.

[[GIDSignIn sharedInstance] setAllowsSignInWithWebView:NO];

Ahora Google no autoriza el uso de la UIWebView emergente UIWebView . En cambio, se abre en el navegador Safari. Y ahora todo funciona como estaba.


Después de que el inicio de sesión de Google finalice el inicio de sesión, use el currentUser para obtener el fetcherAuthorizer , esto se puede usar como un autorizador para el servicio Google Drive .

Después de eso, puede usar el servicio Google Drive normalmente:

GIDGoogleUser *googleUser = [GIDSignIn sharedInstance].currentUser; if(googleUser != nil){ self.service.authorizer = googleUser.authentication.fetcherAuthorizer; [self listFiles]; }



En mi caso, estaba usando la vista web nativa para iniciar sesión con google, descubrí la forma en que debe proporcionar el agente de usuario para la vista web que funcionó para mí. Intente debajo del código, estoy seguro de que funcionará.

Agregue el código en la aplicación didFinishLaunchingWithOptions

C objetivo

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

Swift 3.0

let dictionaty = NSDictionary(object: "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", forKey: "UserAgent" as NSCopying) UserDefaults.standard.register(defaults: dictionaty)


Existe una solución para este problema después del cambio reciente en las políticas de Google OAuth.

Después de integrar el signo de Google y habilitar la API de Google Calendar, pude trabajar con la API de Google Calendar para buscar y agregar eventos de calendario. Solo tenemos que configurar el autorizador para GTLServiceCalendar que se obtiene después del inicio de sesión de Google.

service.authorizer = user.authentication.fetcherAuthorizer()

Aquí están los fragmentos de código de Google GIDSignIn, seguidos de buscar eventos de calendario.

import GoogleAPIClient import GTMOAuth2 import UIKit import GoogleSignIn class ViewController: UIViewController, GIDSignInUIDelegate, GIDSignInDelegate { private let kApiKey = "AIzaXXXXXXXXXXXXXXXXXXXXXXX" // If modifying these scopes, delete your previously saved credentials by // resetting the iOS simulator or uninstall the app. private let scopes = [kGTLAuthScopeCalendar] private let service = GTLServiceCalendar() override func viewDidLoad() { super.viewDidLoad() service.apiKey = kApiKey GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().scopes = scopes GIDSignIn.sharedInstance().signIn() GIDSignIn.sharedInstance().delegate = self } func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { if user != nil { print("/(user)") service.authorizer = user.authentication.fetcherAuthorizer() fetchEvents() } } // Construct a query and get a list of upcoming events from the user calendar func fetchEvents() { let query = GTLQueryCalendar.queryForEventsList(withCalendarId: "primary") query?.maxResults = 20 query?.singleEvents = true query?.orderBy = kGTLCalendarOrderByStartTime service.executeQuery(query!, delegate: self, didFinish: #selector(ViewController.displayResultWithTicket(ticket:finishedWithObject:error:))) } // Display the start dates and event summaries in the UITextView func displayResultWithTicket( ticket: GTLServiceTicket, finishedWithObject response : GTLCalendarEvents, error : NSError?) { if let error = error { showAlert(title: "Error", message: error.localizedDescription) return } var eventString = "" if let events = response.items(), !events.isEmpty { for event in events as! [GTLCalendarEvent] { print(event) } } else print("No upcoming events found.") } } }

Así es como aparece la sección de mis credenciales en Google Dev Console.


Google decidió no permitir que los navegadores integrados manejen la autenticación oAuth. La mejor manera es usar SFSafariViewController en iOS. Aquí se explica cómo se puede resolver con el SDK de CloudRail:

En el objetivo-C:

@implementation AppDelegate // This method will receive the redirect URI after the authentication process was // successfull - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { // Here we pass the response to the SDK which will automatically // complete the authentication process. [[NSNotificationCenter defaultCenter] postNotificationName:@"kCloseSafariViewControllerNotification" object:url]; return YES; } @end

y Swift:

// This method will receive the redirect URI after the authentication process was // successfull func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { if (sourceApplication == "com.apple.SafariViewService") { // Here we pass the response to the SDK which will automatically // complete the authentication process. NSNotificationCenter.defaultCenter().postNotificationName("kCloseSafariViewControllerNotification", object: url) return true } return true }

La publicación completa del blog que cubre este problema se puede encontrar aquí: Solución de ''disallowed_useragent'' para los servicios de Google


La respuesta breve es que Google ha actualizado sus restricciones de seguridad para el flujo de OAuth. No van a permitir que las vistas web nativas inicien flujos OAuth, sino que alientan a las personas a usar los navegadores del sistema operativo para hacerlo. En su caso, probablemente tendrá que esperar a que el SDK del calendario de Google actualice su código para obedecer el flujo recientemente recomendado. Más información está disponible en el blog de Google

EDITAR: He intentado crear un complemento multiplataforma que envuelve los SDK de inicio de sesión nativos de Google para usar en una aplicación de formularios Xamarin. Más información se puede encontrar here


Resolví el problema que tomó 1 año :-) es broma. simplemente agregue la siguiente línea de preferencia en config.xml

<preference name="OverrideUserAgent" value="Mozilla/5.0 Google" />

Tenga en cuenta que resolví este problema de inicio de sesión de Google con el navegador Inapp.

Gracias


Tengo el mismo problema. Se resuelve configurando la siguiente propiedad para el objeto webview:

webview.getSettings().setUserAgentString("Chrome/56.0.0.0 Mobile");

Espero que esto ayude.


<preference name="OverrideUserAgent" value="Mozilla/5.0 Google" />

También enfrento este problema en mi proyecto de Córdoba. Puedes probar esto: solo agrega esto a tu config.xml, funcionó para mí.