Spanish Enviar notificaciones Push utilizando Google

desof

Well-Known Member
Licensed User
Hola a duras penas estoy tratando de traducir lo que encuentro sobre como dotar de una forma de que mi app reciba notificaciones y no puedo lograrlo.Tengo creado el proyecto en Google el ID y activada la Api pero no encuentro un ejemplo ni alcanzo a entender su implementacion.
Si alguien lo está usando que hable mi idioma se lo agradecería mushisimo !!

Gracias
 

bgsoft

Well-Known Member
Licensed User
Hola

Probar en esta dirección de un tutorial de Erel:
https://www.b4x.com/android/forum/t...ion-gcm-framework-and-tutorial.19226/#content

Si no lo conseguis decirme donde os habeis quedado e intento ayudaros, aunque creo que al final será interesante hacer un tutorial, pero eso me llevaria bastante tiempo que ahora no tengo mucho :(. Entiendo vuestro problema, por que la verdad que no es facil encontrar un buen ejemplo y que se entienda.

A grandes rasgos, a ver si esto que os comento os sirve de algo, y si no, lo dicho, decis donde estais parados.

Necesitas una cuenta de Gmail donde se enviará las peticiones de registro (del/los que reciben Push)

EL QUE ENVIA MENSAJES :
- la ApyKey generada en la Consola de Desarrolladores de Google (al crear el proyecto)
- el keys.Add (el id del dispositivo que se dió de alta, está en el mail de la cuenta que creasteis para tal fin)
- Se envia via http y es ahí donde se pasa el ApyKey y el KeyAdd de los dispositivos que se quiera enviar el mensaje Push

El que recibe:
- Tiene que registrarse para poder recibir los mensajes Push
- Se necesita el Project Id de la Consola de Desarrolladores de Google (al crear el proyecto)
- Crear un servicio donde se recibiran los mensajes Push
- Añadir en MAIN en #Region Activity Attributes
#AdditionalRes: c:\Archivos de programa\Android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\res, com.google.android.gms
Yo tengo ahí las SDK (c:\Archivos de programa\Android\), tendreis que poner vuestra dirección
- En el Manifest tendreis que poner el apy key:
AddApplicationText(
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyD-pY067skez5-ZtetBS27c2J19sSxxxxx"/> ' esta es la API KEY
<meta-data android:name="com.google.android.gms.version"
android:value="@Integer/google_play_services_version"/>
<activity android:name="de.amberhome.objects.preferenceactivity"/>
)

- Tambien teneis que añadir esto:
'C2DM Permisos
AddManifestText(<permission android:name="$PACKAGE$.permission.C2D_MESSAGE" android:protectionLevel="signature" />)
AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false"/>)
AddPermission($PACKAGE$.permission.C2D_MESSAGE)
AddPermission(com.google.android.c2dm.permission.RECEIVE)
' Push Service Receiver Attribute
SetReceiverAttribute(PushService, android:permission, "com.google.android.c2dm.permission.SEND")
' Service Receiver Text
AddReceiverText(PushService,
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="$PACKAGE$" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="$PACKAGE$" />
</intent-filter>)

Registrar un dispositivo (se hace en el que recibe los mensajes Push):
- Aqui empleareis la cuenta de email para registrar y el registro lo hareis en un servicio
- Al registrar hay que pasar el Project Id de la Consola de Desarrolladores de Google (al crear el proyecto)
- Pondreis en marcha el servicio que se encargará de recibir los push


Bueno, al final casi hago un tutorial :D

Espero que esto os haya aclarado mas como hay que hacerlo


Saludos
 

desof

Well-Known Member
Licensed User
Muchas gracias amigo por tu extensa respuesta!

uf!! que complicado que es !!

Entendí claro solo el primer punto!

En este caso el que enviaría soy Yo a todos los usuarios que tienen mi app descargada de Google Play
Desde donde enviariá yo ? desde una app creada para tal fin ?
o desde mi cuenta de Gmail ?
 

dar2o3

Active Member
Licensed User
Uff lo tienes bastante verde el tema, tienes que crearte un servidor, b4j es perfecto para eso y una base de datos, cada app tiene que pregunrtar al servicio gcm cual es su token (un identificativo que proporciona google a cada telefono, por decirlo asi) registrarse en la bd y guardar el token que proporciona google, tu desde el servidor envías al servicio gcm a que tokens y que mensaje quieres enviar, gcm no es mas que digamos una pasarela, eres tu (la base de datos) el que gestiona los usuarios y a que usuarios (tokens) quieres enviar mensajes.
 

desof

Well-Known Member
Licensed User
Dicho asi no suena tan dificil pero si todos mis usuarios tienen la misma aplicacion como voy a gestionar a cual enviar ?
De hecho no me interesa filtrar quiero eniarles a todos.
Ellos la descargan a la app de Play que cambios le tengo que hacer a esta para poder utilizarla para que reciban un push ?
 

cuellar

Member
Licensed User
Esta chica explica muy bien cómo funciona el servicio de google

http://belencruz.com/2013/01/google-cloud-messaging-parte-i-introduccion/
http://belencruz.com/2013/01/google-cloud-messaging-parte-ii-activacion-del-servicio/
http://belencruz.com/2013/02/google-cloud-messaging-parte-iii-aplicacion-cliente/
http://belencruz.com/2013/02/google-cloud-messaging-parte-iv-aplicacion-cliente/
http://belencruz.com/2013/03/google-cloud-messaging-parte-v-envio-de-mensajes/
http://belencruz.com/2013/04/google-cloud-messaging-parte-vi-respuesta-al-envio-de-mensajes/

Hará un tiempo, siguiendo las premisas que da belencruz.com y los tutoriales de b4x logré implementar el envío de mensajes. No me pareció complicado.
Justo ahora necesito incluirlo en una aplicación, pero desgraciadamente perdí todo el código y voy a tener que empezar otra vez desde cero y no me acuerdo de nada, hehehe.
Conforme vaya avanzando, seguiré posteando en este hilo.
 

desof

Well-Known Member
Licensed User
Esta chica explica muy bien cómo funciona el servicio de google

http://belencruz.com/2013/01/google-cloud-messaging-parte-i-introduccion/
http://belencruz.com/2013/01/google-cloud-messaging-parte-ii-activacion-del-servicio/
http://belencruz.com/2013/02/google-cloud-messaging-parte-iii-aplicacion-cliente/
http://belencruz.com/2013/02/google-cloud-messaging-parte-iv-aplicacion-cliente/
http://belencruz.com/2013/03/google-cloud-messaging-parte-v-envio-de-mensajes/
http://belencruz.com/2013/04/google-cloud-messaging-parte-vi-respuesta-al-envio-de-mensajes/

Hará un tiempo, siguiendo las premisas que da belencruz.com y los tutoriales de b4x logré implementar el envío de mensajes. No me pareció complicado.
Justo ahora necesito incluirlo en una aplicación, pero desgraciadamente perdí todo el código y voy a tener que empezar otra vez desde cero y no me acuerdo de nada, hehehe.
Conforme vaya avanzando, seguiré posteando en este hilo.

Genial!! muchas gracias creo que seremos muchos los que agradeceremos tu ayuda y la de los otros compañeros !!

Gracias
 

inakigarm

Well-Known Member
Licensed User
Hola a todos:

Os apunto los pasos que he seguido yo en base al ejemplo de @Erel https://www.b4x.com/android/forum/threads/b4x-push-server.48560/#content con:

- Un cliente B4A
- El servidor de control B4J que construye la base de datos de usuarios y mediante el navegador, envía los mensajes al GCM de Google para que lo reciba la app de Android
(Coincide bastante con lo apuntado por @bgsoft )

Pasos: https://www.dropbox.com/s/nrouw2rx7agnbk4/Push server.pdf?dl=0 (en Pdf con imágenes)

1) Acceder a la consola de desarroladores de Google https://console.cloud.google.com/home
2) Crear un proyecto: (en mi caso, lo he llamado EjemplopushB4X en la ubicación europe-west)
3) Después de crear el proyecto, se abre esta ventana: (hemos de recordar NO el ID del Proyecto sino el número del proyecto que será lo que debemos poner en la app de B4A de Android en la variable en Process Global Sender Id)

4) Creamos las credenciales para utilizar la API de GCM (Google Cloud Messaging)


  • Escogemos la API de Google Cloud Messaging:
  • Habilitamos la API en nuestro proyecto EjemplopushB4X
  • A continuación, creamos las credenciales para que el servidor de B4J pueda comunicar con el CGM:
  • Seleccionar en la nueva ventana crear API (no seguir la ayuda en pantalla y elegir la API para navegador): - en el ejempplo no filtramos por dirección Http desde donde se reciben las peticiones en el GCM, que sería la IP del servidor B4J)
Con esto, ya hemos creado un proyecto, tenemos el Sender ID, hemos habilitado la API de Google Cloud Messaging y creado una API-Key (credencial) para que el servidor B4J se comunique con el GCM.

Nos descargamos el proyecto PushServer de Erel del enlace 1) y vamos al fichero de config.txt (en carpeta Objects) y pondremos en AndroidApiKey= la Api key creada (AndroidApiKey=AIzaSyCHLyrNTgozvkAhrOYAJ-OoLZzdNk8JmHc)

Si no tenemos dispositivos B4i clientes, pondremos # delante de las líneas del archivo config.txt que hacen referencia a los clientes IOS


Ejecutamos el proyecto del server B4J y lo dejamos “corriendo”


5) Descargamos el cliente B4A del enlace 1) y lo abrimos en B4A: (en principio, el manifest ya está configurado correctamente)
• Modificamos el Sender ID registrado en el punto 3) y la dirección IP dónde tenemos el servidor B4J ejecutándose (en mi caso, la dirección IP 192.168.1.53 porque lo tengo en mi LAN)

• Ejecutamos el programa en Debug (en mi caso, conectando con el B4A-Bridge con mi móvil y vemos si envía el Token)

Vemos que el servidor B4J ha recibido la petición de registro y lo añade a la base de datos push.db – tabla Tokens (carpeta Objects)

6) Envío de mensajes Push mediante el navegador:

Después de registrar correctamente el dispositivo en el servidor B4J, podemos enviar mensajes push a un dispositivo, a todos, etc..

Para enviar a todos los dispositivos registrados, desde el navegador por ejemplo, enviamos el texto hola (el campo de password es una medida de Seguridad para que cuando introducimos la orden en el navegador si el password introducido no coincide con el password almacenado en la variable global del servidor B4J no se envíe nada):

Si no ha habido ningún problema, podemos ver en el Log del servidor que ha enviado el mensaje y que en el móvil, recibimos una notificación que al seleccionar, nos envía al Activity del ejemplo PushExample.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Hola

No se como lo llevais despues de lo de http:belencruz, respondo a desof :

Desde donde enviariá yo ? desde una app creada para tal fin ?
o desde mi cuenta de Gmail ?
Tienes que crear una aplicación de envio de mensajes Push, puedes hacerlo desde otra plataforma que no sea Android si quieres, lo que pasa que en Android ya tienes como hacerlo. En la parte que pongo "el que envia el mensaje" te digo a grandes rasgos que elementos vas a necesitar para hacer un envio.


Dicho asi no suena tan dificil pero si todos mis usuarios tienen la misma aplicacion como voy a gestionar a cual enviar ?
De hecho no me interesa filtrar quiero eniarles a todos.
Ellos la descargan a la app de Play que cambios le tengo que hacer a esta para poder utilizarla para que reciban un push ?
En tu aplicación que se van a descargar del Play Store, tienes que dar de alta (una sola vez) a ese "dispositivo", para identificarlo emplea el ID del dispositivo, y si quieres añadirle algo tuyo (Ej. "ID_DESOF1_" & ID dispositivo) . Luego emplearas ese ID para saber a quien enviar. Está lo mas importante en "registrar un dispositivo"

Saludos
 

desof

Well-Known Member
Licensed User
Mal amigo he seguido paso a paso ek tutorial de BElen pero siempre me falla algo o en un punto no avanzo por que luego hay que trasladarlo a mi proyecto.
Solo he logrado entender a grandes rasgos como funciona

Estoy a puunnto de claudicar e intentarlo mas adelante de nuevo se que en algun momento alguien va a subir un ejemplo que diga solo cambiar con con tu Api.key tal cosa, poner el php en tal lado y cambiarle tal cosa.

Ese tipo de ayuda es la que uno a veces busca en vez de tener que aprender todo desde el inicio.
Es muy valorable la ayuda de todos pero a veces los que estamos del otro lado no estamos a la altura de comprender los detalles muy finos.

Gracias
 

desof

Well-Known Member
Licensed User
Hola a todos:

Nos descargamos el proyecto PushServer de Erel del enlace 1) y vamos al fichero de config.txt (en carpeta Objects) y pondremos en AndroidApiKey= la Api key creada (AndroidApiKey=AIzaSyCHLyrNTgozvkAhrOYAJ-OoLZzdNk8JmHc)
.

Me he trancado aquí ! a cual proyecto te refieres de descargar ? yo tengo uno que descarque que se llama así pero no tiene ningun config.txt en la carpeta OBJECT ?
 

inakigarm

Well-Known Member
Licensed User
Me he trancado aquí ! a cual proyecto te refieres de descargar ? yo tengo uno que descarque que se llama así pero no tiene ningun config.txt en la carpeta OBJECT ?
Mi Post trata de utilizar notificaciones Push con GCM según el Post de Erel siguiente:
https://www.b4x.com/android/forum/threads/b4x-push-server.48560/#content

Tienes la parte del servidor B4J --> (B4X-PushServer.zip) y la de los clientes Android (B4A-PushClient.zip) y IOS (B4i-PushClient.zip); por tanto, tienes que bajar la parte del servidor y al menos, una de los clientes para probarlo.

Cuando bajes el archivo del servidor B4X-PushServer.zip y lo descomprimas, creará una carpeta Objects dentro del directorio del proyecto donde está el config.txt

upload_2016-3-2_22-52-15.png
 

desof

Well-Known Member
Licensed User
Algo no anda bien amigo ! yo descargo lo que tu dices y al obtener tengo distinta estructura que lo muestras en pantalla mira

MIwdi.jpg
 

inakigarm

Well-Known Member
Licensed User
?? Es verdad, bajándome el archivo no está config.txt !!

Supongo que lo tenía antes bajado y en la nueva actualización de Enero no lo subió correctamente.

Vamos por partes:

1) Me bajo el Zip que hay en la web
2) Cuando lo descomprimo en local, abro el proyecto en B4J haciendo doble click en el archivo PushServer.b4j
3) Al hacerlo, me crea las carpetas Files y Objects en el directorio

4) Copia este archivo (config.txt) en Objects y en B4J pulsa Run (F5) seleccionando Release

5) Mira a ver si te arranca bien el servidor
 

Attachments

  • config.txt
    548 bytes · Views: 199

desof

Well-Known Member
Licensed User
ahora me tira esto
B4J version: 4.00
Parsing code. Error
Error parsing program.
Error description: Unknown type: okhttprequest
Are you missing a library reference?
Occurred on line: 11 (HttpJob)
Private req As OkHttpRequest

y no encuentro esa referencia
 

desof

Well-Known Member
Licensed User
loa actualize y lo mismo

B4J version: 4.20 (1)
Parsing code. Error
Error parsing program.
Error description: Unknown type: okhttprequest
Are you missing a library reference?
Occurred on line: 11 (HttpJob)
Private req As OkHttpRequest
 

desof

Well-Known Member
Licensed User
ahra lo descargue de nuevo al codigo y Anduvo pero no tengo la Base de datos tampoco en el ejemplo ?
Se crea automaticamente ?
 
Top