Normalmente para ese tipo de situaciones se utiliza una cuenta a modo de referencia para reconocer al usuario. Una app no puede obtener el número de serie del hardware a menos que le des permisos para ello. Discriminar por dirección IP es una locura, no es para nada efectivo, cuando desinstalas una app también se eliminan sus archivos. Dejar un archivo en la memoria interna o externa a modo de identificación tampoco es efectivo ya que cualquiera puede eliminar el archivo y volver a realizar un voto.
¿Cómo lo hacen los juegos?, normalmente en Android cuando inicias por primera ves una app luego de instarala te aparece una ventana de inicio de Google play games y debes seleccionar una cuenta, esa api te retorna un identificador único y ese identificador se envía al servidor para crear una sesión válida junto a su historial de cosas que ha hecho dentro de la app. El usuario aunque cambie de dispositivo móvil su id de google play games será el mismo. Hay muchos juegos que no te permiten jugar si no inicias sesión con google play games.
Si vas a crear una app entonces estarás obligado a autenticar al usuario para identificarlo, no puedes utilizar su id de movil o dirección ip porque estos pueden cambiar, lo que quieres detectar es si es la misma persona no si es el mismo movil, asi que la mejor manera de saber si es la misma persona o no es utilizando una cuenta de sesión ya sea con un sistema de autenticación propio como un usuario y contraseña o Google oauth el cual ya tiene su api incorporada en los móviles, llegar y desplegar para seleccionar.
Mira, dale un vistazo a esto:
http://www.androiddeft.com/android-login-with-google-account/Saludos.