ios - puede - cuenta google en iphone
Recuperar el usuario de Google de la extensión de iOS (3)
1. En Bridging-Header.h
import <GoogleSignIn/GoogleSignIn.h>
import <Google/Core.h>
2. En AppDelegate.swift
import Google
En la application:didFinishLaunchingWithOptionslaunchOptions:
configure el objeto GGLContext
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: /(configureError)")
GIDSignIn.sharedInstance().clientID = "client id"
GIDSignIn.sharedInstance.shouldFetchBasicProfile = true
GIDSignIn.sharedInstance().delegate = self
}
Luego, agregue una vista GIDSignInButton
a su aplicación.
Por último, en el controlador de vista, implemente el signIn:didSignInForUser:
delegate al que se llamará cuando se signIn:didSignInForUser:
botón de inicio de sesión tapped:
al autorizar la aplicación.
- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
withError:(NSError *)error {
// Perform any operations on signed in user here.
// ...
}
3. Compartir credenciales entre aplicaciones / extensiones
Cuando inicies sesión en el marco de Google, tendrás que utilizar métodos nativos de iOS para agregar las nuevas credenciales al llavero de iOS. Por lo tanto, usarán el método SecItemAdd(_:_:)
que agregará uno o más elementos a un llavero.
Para acceder al mismo elemento de llavero tanto en la aplicación como en la extensión, debe habilitar el "Compartir llavero" tanto para la aplicación como para la extensión de la sección de Capacidades de Xcode en la configuración de su proyecto. Cuando haga esto, Xcode probablemente querrá actualizar su ID de aplicación y sus perfiles de aprovisionamiento, porque deben reflejar esta nueva capacidad. Es probable que tenga que volver a autorizar la aplicación (Paso 2) para obtener las credenciales en el grupo correcto.
La documentación de Apple establece claramente:
Si desea que el nuevo elemento de llavero se comparta entre varias aplicaciones, incluya la clave kSecAttrAccessGroup en el diccionario de atributos. El valor de esta clave debe ser el nombre de un grupo de acceso de llavero al que pertenecen todos los programas que compartirán este elemento.
Cuando utiliza Xcode para crear una aplicación, Xcode agrega un derecho de identificador de aplicación al paquete de la aplicación. Keychain Services utiliza este derecho para otorgar a la aplicación acceso a sus propios elementos de llavero. También puede agregar un derecho de grupos de acceso de llavero a la aplicación y, en el archivo de lista de propiedades de derecho, especificar una matriz de grupos de acceso de llavero al que pertenece la aplicación.
4. Consejos adicionales de Google que no he mencionado anteriormente.
Por favor vea "Iniciar sesión en Google para iOS" . Aquí está el código de ejemplo para usar GIDSignIn
:
- Obtenga una referencia a la instancia compartida de
GIDSignIn
:GIDSignIn *signIn = [GIDSignIn sharedInstance];
- Establezca los ámbitos de OAuth 2.0 que desea solicitar:
[signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]];
- Llame a
[signIn setDelegate:self];
- Configure el método delegado
signIn:didSignInForUser:withError:
- Llame a
handleURL
en la instancia compartida desde laapplication:openUrl:
... en su delegado de aplicación. - Llamada
signIn
en la instancia compartida;
Estoy intentando crear una extensión compartida para mi aplicación que requiere iniciar sesión en Google desde la extensión. He configurado el llavero de grupo para compartir y puedo escribir desde la aplicación principal y leer el destino de la extensión. Pero no puedo iniciar sesión en Google desde la extensión porque GIDSignIn.sharedInstance().hasAuthInKeychain()
siempre devuelve false.
¿Hay alguna forma de iniciar sesión en Google desde una extensión y cómo lo hago? Cualquier ayuda sería apreciada.
No hay respuesta hasta ahora. Finalmente reescribí el inicio de sesión de Google utilizando el marco de Aerogear . Ahora puedo iniciar sesión desde el objetivo principal y el objetivo de extensión. Esto también soluciona este problema de cierre de sesión de google .
Para hacer esto, necesita habilitar el uso Keychain Sharing
de Keychain Sharing
en el panel "Capacidades" de su proyecto. Esto permitirá que tanto la extensión como la aplicación principal compartan la contraseña.
La documentación de Apple sobre Compartir Llavero está aquí .