¿Cómo usar un token de acceso sin conexión de Google para autenticar en segundo plano en iOS?

Version corta:

Quiero usar elCliente Google OAuth2 para el Objetivo C para crear un válidoGTMOAuth2Authentication objeto para que use en mi aplicación, con un token de acceso sin conexión que obtengo de mi back-end. ¿Cómo puedo lograr eso?

Mi situación:

Mi aplicación utiliza el alcance de solo lectura de Analytics para obtener algunos datos sobre los sitios web del usuario. La forma en que logro esto es iniciando sesión con elGTMOAuth2ViewControllerTouch ViewController, proporcionado por el cliente OAuth2 de Google para el Objetivo C. Luego me da la validezGTMOAuth2Authentication objeto, que puedo usar para consultar Google Analytics a través deCliente API de Google.

Ahora, no queremos dar a los usuarios acceso a Google Analytics (algunos no tienen cuentas de Google y, en general, queremos mantener la información simple a través de la aplicación). Esto significa que tenemos que iniciar sesión con nuestra cuenta (que tiene acceso a todos los datos analíticos de los sitios web). Obviamente no podemos dar a nuestros usuarios nuestras credenciales, por lo que tuvimos que encontrar una solución para eso.

Mi plan:

Creo que este problema podría resolverse solicitando nuestra cadena de tokens (acceso sin conexión) de nuestro backend (a través del cifrado SSL), guardándola en el llavero del usuario y utilizándola más en la aplicación para consultar Analytics. Luego dejamos que el usuario inicie sesión en nuestro servicio (para que podamos determinar a qué sitios web tiene acceso el usuario) y mostrar los datos.

Mi problema:

Busqué en todas partes, busqué en la documentación (muy delgada) de Google, inspeccioné elGTMOAuth2Authentication código fuente, pero parece que no puedo entender el problema. Me parece que habría una solución como esta (porque utilizo un enfoque similar en nuestro CMS para permitir que un usuario publique en nuestro muro de Facebook), entonces, ¿qué me estoy perdiendo aquí?

El código de inicio de sesión actual:

GTMOAuth2ViewControllerTouch *viewController = [[GTMOAuth2ViewControllerTouch alloc]
                                                    initWithScope:scope
                                                    clientID:kMyClientID
                                                    clientSecret:kMyClientSecret
                                                    keychainItemName:kKeychainItemName
                                                    completionHandler:
    ^(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error) {
        if (error != nil) {
            // Authentication failed
            DebugLog(@"Failed!");
        } else {
            // Authentication succeeded
            DebugLog(@"Success!");

            // Update interface
            self.loginButton.hidden = YES;

            self.authentication = auth;
        }
    }]; 

Lo que he intentado:

He intentado crear manualmente unGTMOAuth2Authentication objeto y establecer todos los parámetros yo mismo (alcance, clientid, secretid, token de acceso, token de actualización, callbackuri, url de token, etc.), pero me devuelve un 401: Error de inicio de sesión requerido cuando intento usar el objeto para consultas. Así que supongo que esa no es la forma de hacerlo.

Enlaces:

Cliente Google OAuth2Cliente de API API Objective-C

¡Gracias por leer!

Respuestas a la pregunta(2)

Su respuesta a la pregunta