Spanish Existe alguna forma de verificar si hay una actualizacion del App en Play Store

desof

Well-Known Member
Licensed User
Longtime User
Cuando subo una versión de mi app a Play Store y la misma está aprobada envió una notificación por medio de Firebase comunicando ese suceso.
Pero al presionar la notificación sólo se abre la app !
Sería interesante que la app pudiera detectar de alguna manera que esa notificación es de una actualización y en vez de abrirla enviar al enlace de la misma en Play Store.

Es posible implementar algo asi ?
 

jparraga

Member
Licensed User
Longtime User
En este enlace explicaba como se puede implementar la recepción de Notificaciones que las reciba la App y no salgan al usuario:
https://www.b4x.com/android/forum/threads/firebase-cloud-messaging.75138/#post-477164

B4X:
{
  "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "notification" : {
    "body" : "Texto de mensaje a mostrar",
    "title" : "Título de la Notificación",
    "icon" : "myicon"
  }
  "data" : {
    "campo1" : "valor1",
    "campo2" : "valor2"
  }
}

Resumen:
  1. No poner el MAP "notification".
  2. Crear los campos necesarios en el MAP "data" que indique lo que necesitas.
Las Keys del MAP "data" podrán ser por ejemplo la versión, el link y otros datos como fecha, mensaje, etc... que la App puede mostrar al usuario.
La App al recibir la Notificación en el servicio FirebaseMessaging (la función fm_MessageArrived) la podrás tratar.

B4X:
Sub fm_MessageArrived (Message As RemoteMessage)
    Log($"Datos Mensaje: ${Message.GetData}"$)
    Dim d As String   
    d = DateTime.Date(Message.SentTime)
    d = d & "-" & DateTime.Time(Message.SentTime)
    Log(d & "  ID=" & Message.MessageId & "  From=" & Message.From & "  CollapseKey=" & Message.CollapseKey)
End Sub

Si el tipo y número de campos va a variar según el tipo de Notificación que pases, te recomiendo chequear que existen los campos antes de usarlos, es decir:
B4X:
 If Message.GetData.ContainsKey("CampoDatos") then

Ya que la siguiente línea daría error si el campo no existe:
B4X:
 If Message.GetData.Get("CampoDatos") <> "" Then

Saludos.
 

desof

Well-Known Member
Licensed User
Longtime User
gracias x tu respuesta!
Ese mapa q muestras y del que hablas donde se crea?
yo en firebase sólo completo los campos de su form y envío!
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Dentro del servicio de la recepción de la notificación, puedes crearte una variable global y ponerla a True (por ejemplo) cuando tu le das a la barra de estado al recibir el mensaje, Android lo que hace es abrirte la App (pero nada mas) en el Activity_Resume puedes verificar esa variable y entonces darle un mensaje al usuario que actualice o hacerlo tu, tambien puedes grabar una variable en un fichero y al arrancar la App leerlo y si existe hacer lo mismo en el Resume.


Yo antes verificaba por código haciendo una consulta al Play Store si habia una actualización mas reciente, pero ahora hay una libreria que te hace eso y mucho mas:

https://www.b4x.com/android/forum/threads/appupdating-automate-apps-updating-from-a-webserver.37783/

Saludos
 

jparraga

Member
Licensed User
Longtime User
gracias x tu respuesta!
Ese mapa q muestras y del que hablas donde se crea?
yo en firebase sólo completo los campos de su form y envío!

MAP se refiere a:
B4X:
 Dim m as Map

Se trata de trabajar con JSON que es lo primero en el ejemplo que he puesto en #2, y se utilizan los objetos Map de B4x. El JSON es lo que se recibe y en tu caso lo haces desde el formulario de Firebase, pero deberías utilizar una demo en B4J que tiene en el tutorial ( https://www.b4x.com/android/forum/t...s-firebase-cloud-messaging-fcm.67716/#content ) para enviar.

Con el código que te he puesto de la función fm_MessageArrived, puedes ver el resultado de lo que te entra al recibir la Notificación.

Repito que si generas tu el mensaje de Notificación (mira el tutorial) quitando la parte "notification" consigues que Android no se entere y te entra en la App donde tu puedes decidir que hacer. Con la parte de "notification" también te entra en la App, pero Android muestra si o si la Notificación al usuario.
Si al entrar y analizar decides crear tu un aviso de notificación al usuario lo puedes hacer muy fácil. Yo utilizo el objeto NotificationBuilder por que da más posibilidades ( https://www.b4x.com/android/forum/threads/notification-builder-library.27376/ ), pero con el objeto Notification del tutorial te vale perfectamente.
 

desof

Well-Known Member
Licensed User
Longtime User
Hola

Dentro del servicio de la recepción de la notificación, puedes crearte una variable global y ponerla a True (por ejemplo) cuando tu le das a la barra de estado al recibir el mensaje, Android lo que hace es abrirte la App (pero nada mas) en el Activity_Resume puedes verificar esa variable y entonces darle un mensaje al usuario que actualice o hacerlo tu, tambien puedes grabar una variable en un fichero y al arrancar la App leerlo y si existe hacer lo mismo en el Resume.


Yo antes verificaba por código haciendo una consulta al Play Store si habia una actualización mas reciente, pero ahora hay una libreria que te hace eso y mucho mas:

https://www.b4x.com/android/forum/threads/appupdating-automate-apps-updating-from-a-webserver.37783/

Saludos

Estoy reperdido con esto ... esto que dices es en el modulo de servicio FireBaseMessagings ?
así ?

B4X:
Sub Service_Create
        
     fm.Initialize("fm")
     HAY_MENSAJE=True   
    
End Sub

Al modulo de servicio hay que encenderlo para que escuche los mensajes recibidos o no hace falta.

Yo hasta ahora envio desde Firebase y llegan perfecto! pero no logro capturarlo desde la app.

Y otra cosa para no molestar a los usuarios que ya tienen instalada la app en Firebase dice que se puede enviar a un solo usuario y quisiera enviar sólo a mi movil pero no se de donde obtengo el Token
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Desof

Estoy reperdido con esto ... esto que dices es en el modulo de servicio FireBaseMessagings ?
así ?
No, tendria que ser donde recibes el mensaje

B4X:
Sub fm_MessageArrived (Message As RemoteMessage)
   ' manejas el texto del mensaje
   ' y si tienes que dar aviso, haz lo de abajo
   HAY_MENSAJE=True 
   ' Ir a grabar mensaje a fichero y dar notificación
Pero te recomiendo que lo guardes en un fichero, por que si tu das la notificación y el usuario la borra, no te enterarás que existe un aviso. Cuando arranques la App miras el fichero si recibiste la notificación, y pones esa variable al valor del fichero, y en el Resume la lees y haces lo que tengas que hacer si existe aviso

Si pruebas esto el resto de preguntas verás que se han solucionado

Saludos
 
Top