Nueva publicación "Autenticación con Google Play Services", Problemas con la obtención de un token a través de GoogleAuthUtil.getToken
Actualizar:
En este momento me inscribí en Google API con la cuenta de Google que también utilizo para Google App Engine y ahora el error ha cambiado a com.google.android.gms.auth.GoogleAuthException: Unknown
- Inicia sesión con Facebook en mi sitio web Django a través de la aplicación para Android
- Token de dispositivo para notificación de empuje
- Cómo crear un inicio de sesión sin contraseña para aplicaciones para móviles
- Rails de autenticación de usuario desde la aplicación nativa de Android
- Actualización de token de Firebase
Google acaba de lanzar una nueva forma de registrarse en la aplicación de uno a través de una cuenta de Google y ha dado alguna explicación en su blogpost , también.
Estoy escribiendo una aplicación de Android que tienes que registrar para crear una cuenta de usuario y estoy usando Google App Engine para el back-end. Con los servicios de reproducción, quiero obtener los usuarios de correo electrónico afiliados con su dispositivo Android y un token. Ya puedo obtener el correo electrónico, sin embargo, conseguir el testigo sólo lanza errores y debido a la documentación es bastante escasa, no sé cómo solucionar estos. Así es como obtengo el correo electrónico:
private String[] getAccountNames() { mAccountManager = AccountManager.get(this); Account[] accounts = mAccountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); names = new String[accounts.length]; for (int i = 0; i < names.length; i++) { names[i] = accounts[i].name; } return names; }
Sin embargo, cuando llamo a token = GoogleAuthUtil.getToken(context, email, "scope"
, me da estos errores: GooglePlayServices not available due to error 1
y com.google.android.gms.auth.GooglePlayServicesAvailabilityException: GooglePlayServicesNotAvailable
.
Ahora mi pregunta es, ¿tengo que establecer los permisos o incluir cualquier biblioteca para arreglar eso? ¿Y cuál es el parámetro scope? Un ejemplo de cómo obtener un token y qué poner en el ámbito se da en su blogpost para establecer la variable de ámbito a "https://www.googleapis.com/auth/userinfo.profile"
pero aún así obtener el mismo error Desafortunadamente.
También registré mi aplicación para la consola de la API de Google y habilité la API de G +, ¿tengo que configurar otra cosa allí, también?
- ¿Es la mejor práctica para almacenar y usar un token OAuth2 en Android?
- Cómo obtener el token del dispositivo
- ¿Cuándo expira un token gcm de android?
- ¿Cómo almacenar de forma segura el token de acceso y el secreto en Android?
Tuve el mismo problema con la biblioteca de clientes de Google para Google Drive. La solución es bastante fácil. Simplemente agregue "oauth2:" a su scopeUrl.
Incorrecto:
GoogleAuthUtil.getToken(this, account.name, DriveScopes.DRIVE);
Derecha:
GoogleAuthUtil.getToken(this, account.name, "oauth2:" + DriveScopes.DRIVE);
Primero tiene que pasar el ámbito correctamente formateado, como esto:
private final static String G_PLUS_SCOPE = "oauth2:https://www.googleapis.com/auth/plus.me"; private final static String USERINFO_SCOPE = "https://www.googleapis.com/auth/userinfo.profile"; private final static String SCOPES = G_PLUS_SCOPE + " " + USERINFO_SCOPE;
También tienes que instalar los servicios de Google Play desde aquí, en https://play.google.com/store/apps/details?id=com.google.android.gms . Los servicios de Google Play han comenzado a distribuirse en todos los dispositivos con Google Play instalado (Froyo +).
Hay más información proporcionada aquí: http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html
Sólo puede obtener un token para los servicios de Google que admitan OAuth2. Si está escribiendo su propio servicio web, debe autenticarse a él utilizando su mecanismo de autenticación nativo (nombre de usuario y contraseña?). "Alcance" es obviamente un ámbito no válido, pero parece que no tienes instalado Google Play Services, y esa es la causa de tu error. Puede instalarlo desde Play Store, pero no funcionará realmente para usted, ya que no está utilizando un servicio de Google.