Spanish [SOLUCIONADO]Google OAuth2, error al renovar el token

RAFA BRAVO

Active Member
Licensed User
Hola comunidad, tengo la siguiente duda / problema, utilizo este tutorial para enviar correos atreves de gmail, https://www.b4x.com/android/forum/threads/b4x-sending-emails-with-gmail-rest-api. 81736 / # contenido . y este ejemplo para iniciar el servicio desde otra actividad, subo archivo zip. Ahora bien, si deseo activar el servicio desde mas de una actividad, cual seria la forma correcta. El problema es que a mi me funciona todo genial pero pasado un tiempo me da un error al renovar el token y deja de funcionar. no entiendo muy bien que parte del código me da ese problema al renovar el token y que debo tener en cuenta. y también me surge la duda de si el nombre de mi paquete puede ser otro diferente al de b4a.googlecontacts de ejemplo, y como cambiarlo. gracias
 

Attachments

  • GmailFromActivity.zip
    61.4 KB · Views: 77
Last edited:

RAFA BRAVO

Active Member
Licensed User
Este es el error que recibo:
Getting access token from refresh token... ResponseError. Reason: , Response: { "error": "invalid_grant", "error_description": "Bad Request" } Error accessing account.

En este punto solo puedo borrar la aplicación, cambiar la clave de firma privada por la opción usar clave depurador, y de esta manera puedo aceptar los permisos de google de nuevo y vuelve a funcionar por un tiempo. Hasta que aparece este mensaje de nuevo. he estado revisando esto: https://developers.google.com/identity/protocols/oauth2/native-app pero no consigo nada claro.[/ICODE]
 

José J. Aguilar

Expert
Licensed User
Gracias por ir comentando la solución.

La verdad es que no lo he usado nunca, y lo único que he encontrado y que probablemente habrás visto, sobre tu error, ha sido este hilo:


saludos,
 

José J. Aguilar

Expert
Licensed User
Hola Rafa:

ahora bien si deseo enviar correos desde mas de una actividad como podria implementarlo en en el modulo starter, alguien puede ayudarme?


¿Has probado el ejemplo del tercer post del hilo que indicas? Según diceel autor:

Using Starter seems to work fine. I've attached a zip file that modifies the original Tutorial demo to show a second Emailer activity and the additions to Starter. Add the ClientID and the recipient email address in Starter. Hopefully it will help others who currently have the same problem.
Usando el servicio Starter funciona bien. Adjunto un proyecto que modifica el tutorial original para mostrar una segunda actividad y lo que hay que añadir en Starter. Añade el ClientID y la dirección del destinatario en el servicio Starter. Espero que sirva para ayudar a otros usuarios con el mismo problema.

saludos,
 

RAFA BRAVO

Active Member
Licensed User
Si José, ese ejemplo lo he probado y funciona perfecto, el token se renueva sin problema y todo va bien. pero en ese ejemplo el compañero, crea una única actividad llamada email, que es de donde el envía los correos. el primer parámetro de googleoauth2 establece el modulo de destino, Este es el módulo que recibirá todos los eventos: oauth2.Initialize(Email, "oauth2", ClientId, "https://www.googleapis.com/auth/gmail.send"). Pero y si deseo enviar los correos desde múltiples actividades, esa es mi pregunta. si alguien tiene una idea seria genial, en caso de que no sea así tratare de cambiar el diseño de la app. gracias
 

José J. Aguilar

Expert
Licensed User
en caso de que no sea así tratare de cambiar el diseño de la app.
La respuesta que creo que te daría Erel, es que cambies a B4XPages, de esta manera creo que resolverías el problema ya la actividad nunca se pausará.

No tengo configurado gmail para obtener un token y hacer alguna prueba, pero se me ocurre (ojo, que ni estoy seguro ni puedo probarlo):

En Starter, creas una sub
B4X:
Public Sub Inicializa (Target As Object)
    oauth2.Initialize(Target, "oauth2", ClientId, "https://www.googleapis.com/auth/gmail.send")
End Sub

Y comenta la línea
B4X:
oauth2.Initialize(Email, "oauth2", ClientId, "https://www.googleapis.com/auth/gmail.send")

Y desde cada actividad que quieras enviar correo, haces:

B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    CallSub2(Starter, "Inicializa", Me)
End Sub

Sub Activity_Resume
    Starter.oauth2.CallFromResume(Activity.GetStartingIntent)
End Sub

A ver si suena la flauta....
 

RAFA BRAVO

Active Member
Licensed User
Buenas tardes José. Pues despues de mucho tiempo probando he descubierto que tenia un error en mi código. tu ejemplo que propusiste arriba lo he probado en un programa mas reducido y funciona bien. y tambien he estado aprendiendo B4Xpages, para usarlo en próximos proyectos. muchas gracias lo doy por solucionado.
 
Top