Ir al contenido


Foto

[Lazarus] Enviar notificaciones y ficheros a telefonos con Android


  • Por favor identifícate para responder
26 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 diciembre 2013 - 07:19

Esta aburrida tarde de domingo descubrí por casualidad la App "Pushbullet":
https://play.google....hbullet.android

Esta aplicación nos permite, una vez instalada en el teléfono, enviar notificaciones (las que aparecen en la barra superior) o ficheros al teléfono desde un ordenador o desde el móvil de un amigo, ademas de ver la notificaciones del teléfono móvil en el ordenador.

La única pega es que para enviar los mensajes y ficheros desde el PC hay que usar un plugin de Chrome , y como ya sabéis algunos yo solo uso Opera  (h)

Así que siguiendo la filosofía DIY (DoItYourself) me hice este pequeño programa en Lazarus que permite enviar notificaciones y ficheros.

Es solo un proyecto pero si alguien se anima a probarlo, aquí dejo el ejecutable y las dlls (usa libcurl). Solo hace falta instalar la App en el móvil, ir a la pagina de PushBullet, ingresar a nuestra cuenta y en "Account Settings" copiar el valor de la API Key y ponerlo en el programa.

Lo hice en unas pocas horas, para pasar la tarde, pero si a alguien le interesa subo el código y lo mejoramos ¿?

Saludos

Archivos adjuntos


  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 23 diciembre 2013 - 08:39

Que interesante proyecto amigo. Me permitiré compartirlo en face. Saludos
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 diciembre 2013 - 11:01

Que interesante proyecto amigo. Me permitiré compartirlo en face. Saludos

Por mi encantado. Pero entonces tendrás que cambiarlo a un foro publico
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 23 diciembre 2013 - 11:07

jejeje, a que mi estimado policarpio, y usted que ya lo puso en el face, con razon nadie dice nada :D :D :D

Muy interesante el juguetito amigo seoane, :)

Saludos
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 23 diciembre 2013 - 11:50


Que interesante proyecto amigo. Me permitiré compartirlo en face. Saludos

Por mi encantado. Pero entonces tendrás que cambiarlo a un foro publico


que wey, :s no me había fijado que estaba en un foro privado.  :lipsrsealed: Oks ¿entonces les parece bien si lo cambio a un foro público?
  • 0

#6 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 diciembre 2013 - 12:01



Que interesante proyecto amigo. Me permitiré compartirlo en face. Saludos

Por mi encantado. Pero entonces tendrás que cambiarlo a un foro publico



que wey, :s no me había fijado que estaba en un foro privado.  :lipsrsealed: Oks ¿entonces les parece bien si lo cambio a un foro público?



Por mi encantado. Estaba en un foro privado porque esta "en proyecto" pero si te parece interesante hazlo publico, y luego ya subiremos código y correcciones
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 23 diciembre 2013 - 12:30

Por mi encantado. Estaba en un foro privado porque esta "en proyecto" pero si te parece interesante hazlo publico, y luego ya subiremos código y correcciones


¿Te parece bien si lo muevo a Android?
  • 0

#8 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 diciembre 2013 - 01:20


Por mi encantado. Estaba en un foro privado porque esta "en proyecto" pero si te parece interesante hazlo publico, y luego ya subiremos código y correcciones


¿Te parece bien si lo muevo a Android?


Lo moví a Lazarus y nos dejamos de tantas formalidades  ;)
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 23 diciembre 2013 - 01:32

Lo moví a Lazarus y nos dejamos de tantas formalidades  ;)


Me parece muy bien, a ver si nos animamos a mover código :), si se puede hacer con XE5, yo me apunto :), aunque tengo poco tiempo disponible últimamente :(

Saludos
  • 0

#10 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 diciembre 2013 - 01:41

Me parece muy bien, a ver si nos animamos a mover código :), si se puede hacer con XE5, yo me apunto :), aunque tengo poco tiempo disponible últimamente :(


Lo siento amigo  :( pero yo renuncio a delphi mientras no bajen las licencias, el "Turbo" se me queda obsoleto y no puedo pagar una licencia de delphi de las nuevas (y no creo que los reyes me traigan una este año  :D ) Los de Embarcadero han escogido su camino, y yo tengo que seguir por donde pueda, en este caso Lazarus u oferta mejor  :)

Saludos
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 23 diciembre 2013 - 01:58


Me parece muy bien, a ver si nos animamos a mover código :), si se puede hacer con XE5, yo me apunto :), aunque tengo poco tiempo disponible últimamente :(


Lo siento amigo  :( pero yo renuncio a delphi mientras no bajen las licencias, el "Turbo" se me queda obsoleto y no puedo pagar una licencia de delphi de las nuevas (y no creo que los reyes me traigan una este año  :D ) Los de Embarcadero han escogido su camino, y yo tengo que seguir por donde pueda, en este caso Lazarus u oferta mejor  :)

Saludos


Y te entiendo amigo.

Pero quise decir que paralelamente a lo hecho con Lazarus, yo podría hacer algo con XE5, no pretendía que se hiciera todo con XE5. (y)

Saludos
  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 diciembre 2013 - 03:06

Que tal algo de código:



delphi
  1. // Aqui el metodo que hace el "Push"
  2. function Push(Url, APIKey, DeviceID, Title, ContentType, Content: AnsiString): String;
  3. var
  4.   Curl: TCURL;
  5.   Response: TStringStream;
  6.   HttpPost, Last: pcurl_httppost;
  7.   ContentName: AnsiString;
  8. begin
  9.   Result:= EmptyStr;
  10.   Curl:= curl_easy_init;
  11.   if Curl <> nil then
  12.   try
  13.     if (curl_easy_setopt(Curl, CURLOPT_VERBOSE, FALSE) <> CURLE_OK) or
  14.       (curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK) or
  15.       (curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK) or
  16.       (curl_easy_setopt(Curl, CURLOPT_URL, PAnsiChar(URL)) <> CURLE_OK) or
  17.       (curl_easy_setopt(Curl, CURLOPT_USERPWD, PAnsiChar(APIKey+':')) <> CURLE_OK) or
  18.       (curl_easy_setopt(Curl, CURLOPT_WRITEFUNCTION, @CurlSaveToStream) <> CURLE_OK) then
  19.       Exit;
  20.     HttpPost:= nil;
  21.     Last:= nil;
  22.     try
  23.       if (curl_formadd(@HttpPost, @Last, CURLFORM_COPYNAME, PAnsiChar('device_id'),
  24.           CURLFORM_COPYCONTENTS, PAnsiChar(DeviceId), CURLFORM_END) <> CURL_FORMADD_OK) then
  25.         Exit;
  26.       if (Title <> EmptyStr) and (curl_formadd(@HttpPost, @Last, CURLFORM_COPYNAME, PAnsiChar('title'),
  27.           CURLFORM_COPYCONTENTS, PAnsiChar(Title), CURLFORM_END) <> CURL_FORMADD_OK) then
  28.         Exit;
  29.       if (curl_formadd(@HttpPost, @Last, CURLFORM_COPYNAME, PAnsiChar('type'),
  30.           CURLFORM_COPYCONTENTS, PAnsiChar(ContentType), CURLFORM_END) <> CURL_FORMADD_OK) then
  31.         Exit;
  32.       ContentName:= 'body';
  33.       if ContentType = 'note' then
  34.         ContentName:= 'body'
  35.       else if ContentType = 'url' then
  36.         ContentName:= 'link'
  37.       else if ContentType = 'address' then
  38.         ContentName:= 'address'
  39.       else if ContentType = 'file' then
  40.         ContentName:= 'file';
  41.       if ContentType = 'file' then
  42.       begin
  43.         if (curl_formadd(@HttpPost, @Last, CURLFORM_COPYNAME, PAnsiChar('file'),
  44.             CURLFORM_FILE, PAnsiChar(Content), CURLFORM_END) <> CURL_FORMADD_OK) then
  45.           Exit;
  46.       end else
  47.         if (curl_formadd(@HttpPost, @Last, CURLFORM_COPYNAME, PAnsiChar(ContentName),
  48.           CURLFORM_COPYCONTENTS, PAnsiChar(Content), CURLFORM_END) <> CURL_FORMADD_OK) then
  49.           Exit;
  50.       Response:= TStringStream.Create(EmptyStr);
  51.       try
  52.         if (curl_easy_setopt(Curl, CURLOPT_FILE, Pointer(Response)) <> CURLE_OK) or
  53.           (curl_easy_setopt(Curl, CURLOPT_HTTPPOST, HttpPost) <> CURLE_OK) then
  54.           Exit;
  55.         if curl_easy_perform(Curl) = CURLE_OK then
  56.           Result:= Response.DataString;
  57.       finally
  58.         Response.Free;
  59.       end;
  60.     finally
  61.       if HttpPost <> nil then
  62.         curl_formfree(HttpPost);
  63.     end;
  64.   finally
  65.     curl_easy_cleanup(Curl);
  66.   end;
  67. end;   
  68.  
  69. // Que se llama de esta manera
  70. procedure TfrmMain.btnPushClick(Sender: TObject);
  71. var
  72.   DeviceId: String;
  73.   Title: String;
  74.   Body: String;
  75. begin
  76.   if (cmbDevices.ItemIndex >= 0) then
  77.   begin
  78.     DeviceId:= TDeviceItem(cmbDevices.Items.Objects[cmbDevices.ItemIndex]).Id;
  79.     Title:=    Trim(txtTitle.Text);
  80.     Body:=    Trim(txtBody.Text);
  81.     if (DeviceId <> EmptyStr) and (Title <> EmptyStr) and (Body <> EmptyStr) then
  82.       CheckResponse(Push('https://api.pushbullet.com/api/pushes', strAPIKey, DeviceId,
  83.         Title, 'note', Body));
  84.   end;
  85. end;



... esto para ir abriendo boca  ;)


Adjunto dejo la ultima version de "unit" Curl.pas necesaria para compilar el codigo anterior
  • 0

#13 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 diciembre 2013 - 07:06

Al final me decidí a publicar lo que llevo hecho en mi pagina web (estoy de vacaciones y tengo mucho tiempo libre  ;) ).

http://delphi.jmrds.com/?q=node/92

Pero eso no quita para que le echeis un vistazo al código y lo sigamos hablando aquí.

Saludos
  • 0

#14 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 24 diciembre 2013 - 08:45

Gracias amigo, Interesante lo de Curl, nunca lo he usado así que primero voy a leer un poco acerca del tema.
  • 0

#15 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 mensajes
  • LocationCali, Colombia

Escrito 29 diciembre 2013 - 03:59

Muy interesante, apenas terminen las fiestas, estaré investigando esto para Delphi.  Gracias por el aporte.
  • 0

#16 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 29 diciembre 2013 - 05:24

Muy interesante, apenas terminen las fiestas, estaré investigando esto para Delphi.  Gracias por el aporte.


No olvides echarle un vistazo a mi web, ahí estoy poniendo las ultimas versiones.

Ya le he añadido la posibilidad de enviar notificaciones no solo a nuestros teléfonos, si no ademas a los contactos que tengamos agregados. También le he añadido una barra de estado para ver el progreso cuando suben los archivos y he mejorado un poco la linea de comandos.

Archivos adjuntos


  • 0

#17 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 diciembre 2013 - 09:22

seoane me parece muy interesante tu proyecto aunque nunca me he adentrado en curl pues siempre preferí manejar yo mismo los sockets y ser independiente de librerías externas. Imagino que dependes en todos los casos de tener instalada Pushbullet en los smartphones implicados.

Ahora no tengo mucho tiempo para experimentos entre fiestas y familia pero el "año que viene" le prestaré más atención. Gracias por tus aportes e ideas.

Saludos.
  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 diciembre 2013 - 10:10

Hola

Lo estoy migrando a Delphi pero hay algunos objetos que no encuentro su definición, por ejemplo éste TJSONData. No encuentro una unidad que contenga el objeto.

Saludos
  • 0

#19 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 30 diciembre 2013 - 10:15

seoane me parece muy interesante tu proyecto aunque nunca me he adentrado en curl pues siempre preferí manejar yo mismo los sockets y ser independiente de librerías externas. Imagino que dependes en todos los casos de tener instalada Pushbullet en los smartphones implicados.


Pues lo mio con Curl fue amor a primera vista, y no sera porque no me gusten los sockets "a pelo"  ;) , pero para algunas cosas como el ssl me quita de muchos problemas.

Efectivamente, necesitas tener instala la aplicación en el teléfono (es gratuita en el "google play") y en el caso de querer mandar mensajes a teléfonos que no sean el tuyo te tienen que agregar a su lista de amigos.

Lo estoy migrando a Delphi pero hay algunos objetos que no encuentro su definición, por ejemplo éste TJSONData. No encuentro una unidad que contenga el objeto.

Es una clase que viene por defecto en Lazarus/freepascal y se utiliza para manejar datos en formato JSON. Segun creo (no lo se seguro) Delphi en sus ultimas versiones debería tener algo similar. Y si no a "parsear" a pelo  8o|


  • 0

#20 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 30 diciembre 2013 - 10:22

Aprovecho para comentar que el creador de la aplicación me a adelantado en un correo que están preparando su propia aplicación de escritorio.

Aunque me ha animado a seguir con el programa, les interesa que la mayor gente posible utilice su API.
  • 0




IP.Board spam blocked by CleanTalk.