anonymous Log in
Search
Recents:
v3.0
sd
Como detectar INEQUIVOCAMENTE el dispositivo.
30/03/21 11:02

Fernando

Replies: 2

Buenas a tod@s los foristas.

CONCIDERACIONES :
* Aplicación OFFLINE/ANDROID.
* Me disculpo por lo largo, la idea es pedir colaboración y al mismo
tiempo aportar IDEAS al foro, más allá de si la IDEA es buena o mala.

El ClientInformation.ID que genexus nos provee, como bien lo indica sus
notas, es un “ACEPTABLE IDENTIFICADOR DEL DISPOSITIVO”.
Desde un comienzo y hasta ahora estoy utilizando este identificador para
reconocer al usuario “offline” que se está conectándo a los API del sistema.
(SEND/RECEIVE/REST).
Entorno a este identificador se construyen los parámetros que regirán el
comportamiento de la aplicación (VENDEDOR/COBRADOR/FLETERO… etc), cada quien
con sus opciones de menú.

Todo esto funciona bien PEROOOO….

Cuando el usuario realiza un UPGRADE de la aplicación, dependiendo del grado
del UPGRADE, GeneXus le genera al mismo dispositivo OTRO
ClientInformation.ID., con esto se debe volver a re-configurar el
dispositivo.
Este cambio de ClientInformation.ID se produce tambien cuando el dispositivo
sufre un UPGRADE del ANDROID o por lo menos así lo he detectado.
Un cambio del identificador produce que todo el historial producido por el
anterior (Ej. tracking) ya no esté relacionados con el nuevo, sin contar con
los procesos que quedan sin finalizarse en el dispositivo con el
identificador anterior.

LO QUE ESTOY PROBANDO:
a. Durante el proceso de identificación del usuario genero un código
único a través de un servicio REST siguiendo ciertos criterios, a ese código
luego le genero un CryptoHash.
b. Generado el código guardo en el dispositivo un archivo del tipo
aplicationname.conf donde a parte del código guardo otras informaciones
encriptada.
PROBLEMAS :
1. Si utilizo cualquiera de las opciones de DIRECTORY, este archivo se
guarda en el entorno de la aplicación; por lo que los procesos de eliminar
la aplicación o borrar el cache BORRAN el archivó generado.
2. Si utilizo por ejemplo Path = ‘/storage/emulated/0/Documents/’ +
‘aplicationname.conf’ el archivo se guarda en el dispositivo (emulador) es
visible por el usuario y no se borra al eliminar la aplicación o borrar el
cache.
* El problema es que al intentar leer nuevamente el archivo generado
File.OpenRead() da un error desconocido (-1), previamente File.Exists
devuelve true.

CONSULTA:
a. Alguien ha podido generar un IDENTIFICADOR que INEQUIVOCAMENTE y por
una UNICA VEZ permita reconocer el dispositivo.
b. Alguien a podido guardar un archivo fuera de la carpeta de la
aplicación y luego lo a podido volver a leer.

ALGUNAS IDEAS QUE NO ME OFRECEN TOTAL GARANTIA:
* Producir un PIN unico para el usuario, pero no me garantiza que al
momento de instalar o reinstalar la aplicación se ingrese el PIN de otro
usuario que esta en producción.
* Lectura del CODIGO GENERADO a travez de un QR, puede pasar lo
anterior.
Ambas situaciones son responsabilidad del administrador de la aplicación,
pero no esta exento de errores.

DESDE YA GRACIAS POR LOS COMENTARIOS.

Atentamente.

Replies

d.solano

30/03/21 19:02
Hola Fernando, haz probado identificar a cada usuario con su login de GAM y de ahí asignarles los roles que comentas (VENDEDOR/COBRADOR/FLETERO… etc) o no estas utilizando el GAM para nada? Si fuera por GAM todo el “tracking” del usuario lo harías por su login o nombre de usuario asociado en GAM o el GUID que nos da el User.getId() de la API de GAM Saludos.

Fernando

30/03/21 21:10
Estimado, antes que nada gracias por responder. Si lo pensé y lo descarte por las mismas razones expuestas, un usuario podría habilitar mas de un dispositivo al mismo tiempo con las mismas credenciales y esto creo me generaría otros inconvenientes de todos modos después de 3 años de tenerlo en producción puede que vuelva a revisar esta alternativa. Gracias.


Back to sd