¿Las aplicaciones de iPhone tienen permiso para hacer llamadas sin interacción del usuario?

9

Estaba leyendo acerca de una estafa de llamadas perdidas en el momento en que se le cobra al usuario incluso si no devuelve el número. Se me ocurrió que una aplicación de iPhone maliciosa podría hacer llamadas a números premium para estafar a los usuarios sin dinero; de hecho, parece que esto ha sucedido en el pasado.

Según la propia documentación de Apple :

Cuando un usuario toca un enlace telefónico en una página web, iOS muestra una alerta preguntando si el usuario realmente quiere marcar el número de teléfono e inicia la marcación si el usuario acepta. Cuando un usuario abre una URL con el esquema tel en una aplicación nativa, iOS no muestra una alerta e inicia la marcación sin avisar al usuario.

Me parece que una aplicación de iPhone aparentemente benigna podría, por ejemplo, esperar hasta que el teléfono se quede sin cargo (y, por lo tanto, es probable que no sea atendido por el usuario) y luego iniciar una llamada a un número de tarifa premium para otorgarle al desarrollador una bonificación ordenada . No parece haber ningún permiso en iOS que pueda cambiar para evitar este comportamiento, ya que esto abre la aplicación del teléfono con una URL en lugar de acceder a los datos del teléfono.

¿Alguien puede confirmar si mi entendimiento es correcto y, de ser así, por qué Apple no ha cerrado un agujero tan grande?

Cartroo
fuente

Respuestas:

8

Verifiqué experimentalmente el comportamiento de iOS al intentar iniciar una llamada telefónica desde una de mis aplicaciones.

Aquí están los resultados:

  • Es posible iniciar programáticamente una llamada telefónica sin la confirmación del usuario. Acabo de escribir una sola línea de código que se ejecuta justo después de cargar la aplicación. Esto significa que si su aplicación está en primer plano, puede iniciar una llamada en cualquier momento, incluso sin necesidad de que el usuario toque en ningún lado.
  • Envié una notificación remota remota silenciosa a la aplicación para activarla si no se está ejecutando y luego ejecutar el mismo código. No se inició ninguna llamada; iOS no permite que una aplicación inicie una llamada telefónica si la aplicación se ejecuta en segundo plano.

Entonces, responder a sus preguntas, la única forma de iniciar una llamada telefónica sin que el usuario se dé cuenta, es de alguna manera convencer al usuario de que deje la aplicación maliciosa ejecutándose en primer plano, y luego iniciar la llamada telefónica, ya que iOS no permitirá esta operación si la aplicación está en segundo plano.

Actualmente, iOS no proporciona ningún mecanismo para bloquear el inicio de llamadas telefónicas desde una aplicación en particular, pero solo puede suceder si la aplicación está en primer plano.

tomacco
fuente
Gracias por la investigación exhaustiva, respuesta brillante. Me alegra saber que solo está en primer plano, aunque no puedo evitar pensar que no es demasiado difícil inventar una aplicación que probablemente se deje desatendida y en primer plano: la aplicación de la cámara haciendo un lapso de tiempo es un Buen ejemplo del tipo de cosa. Todavía prefiero abrir URL en otras aplicaciones, ya que fue un permiso para cada aplicación abierta, solo se confirmó la primera vez por aplicación externa, no siempre. Sin embargo, acepto que tiene implicaciones para UX. Supongo que todos tienen que estar atentos.
Cartroo
5

He hecho una aplicación de prueba para verificar esto. La aplicación puede abrir URL como tel://123456789solo cuando está en primer plano y activa. Cuando llamo a este código incluso después de ingresar el estado de fondo, la API para abrir esta URL no hizo nada. Entonces, para responder a su pregunta, las aplicaciones no podrán realizar una llamada sin su conocimiento.

Para probar esto, pegue esto en su AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}
Mateusz Szlosek
fuente
Gran respuesta, gracias por el código. Si pudiera aceptar ambas respuestas, lo haría.
Cartroo
2

Cuando intente iniciar una llamada en iOS> = 10.3, siempre se mostrará una ventana emergente al usuario. Docs

Vaiden
fuente