Le app per iPhone sono autorizzate a effettuare chiamate senza l'interazione dell'utente?


9

Stavo leggendo di una truffa di chiamata persa proprio ora in cui l'utente viene addebitato anche se non richiamano il numero. Mi è venuto in mente che un'app per iPhone dannosa potrebbe effettuare chiamate a numeri premium per truffare gli utenti senza soldi, anzi, sembra che ciò sia accaduto in passato.

Secondo la documentazione di Apple :

Quando un utente tocca un collegamento telefonico in una pagina Web, iOS visualizza un avviso che chiede se l'utente desidera davvero comporre il numero di telefono e avvia la composizione se l'utente accetta. Quando un utente apre un URL con lo schema di telefonia in un'app nativa, iOS non visualizza un avviso e avvia la composizione senza richiedere ulteriori informazioni all'utente.

Mi sembra che un'app iPhone apparentemente benigna possa, per esempio, attendere fino a quando il telefono è stato lasciato in carica (e quindi probabilmente non essere frequentato dall'utente) e quindi avviare una chiamata a un numero di tariffa premium per accumulare allo sviluppatore un bonus ordinato . Non sembra esserci alcuna autorizzazione in iOS che posso modificare per prevenire questo comportamento, poiché si tratta di aprire l'app del telefono con un URL anziché accedere ai dati del telefono.

Qualcuno può confermare se la mia comprensione è corretta e, in tal caso, perché mai Apple non ha chiuso un simile buco?

Risposte:


8

Ho verificato sperimentalmente il comportamento di iOS provando ad avviare una telefonata da una delle mie app.

Ecco i risultati:

  • È possibile avviare programmaticamente una telefonata senza la conferma dell'utente. Ho appena scritto una singola riga di codice che viene eseguita subito dopo il caricamento dell'app. Ciò significa che se l'app è in primo piano può iniziare una chiamata in qualsiasi momento, anche senza che l'utente debba toccare da nessuna parte.
  • Ho inviato una notifica push remota silenziosa all'app per riattivarla se non è in esecuzione, quindi eseguire lo stesso codice. Nessuna chiamata avviata; iOS non consente a un'app di avviare una telefonata se l'app è in esecuzione in background.

Quindi rispondere alle tue domande, l'unico modo per iniziare una telefonata senza che l'utente se ne accorga, è in qualche modo convincere l'utente a lasciare in esecuzione l'applicazione dannosa in primo piano e quindi avviare la telefonata, poiché iOS non consente questa operazione se l'app è in background.

Attualmente iOS non fornisce alcun meccanismo per bloccare l'avvio delle telefonate da una particolare app, ma può succedere solo se l'app è in primo piano.


Grazie per l'indagine completa, risposta brillante. Sono felice di sapere che è solo in primo piano, anche se non posso fare a meno di pensare che non sia troppo difficile inventare un'app che probabilmente rimarrà incustodita e in primo piano: l'app della fotocamera che fa un time-lapse è un buon esempio del tipo di cosa. Preferirei ancora che aprire gli URL in altre app fosse un'autorizzazione per ogni altra app aperta - appena confermata la prima volta per app esterna, non tutte le volte. Accetto che abbia implicazioni UX, tuttavia. Immagino che tutti debbano solo essere vigili.
Cartroo,

5

Ho realizzato un'app di prova per verificarlo. L'app può aprire l'URL, ad esempio tel://123456789solo quando è in primo piano e attivo. Quando chiamo questo codice anche solo dopo aver inserito lo stato in background, l'API per aprire questo URL non ha fatto nulla. Quindi, per rispondere alla tua domanda, le app non saranno in grado di effettuare una chiamata a tua insaputa.

Per provare questo incolla questo nel tuo AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}

Ottima risposta, grazie per il codice. Se potessi accettare entrambe le risposte, lo farei.
Cartroo,

2

Quando si tenta di avviare una chiamata su iOS> = 10.3, verrà sempre visualizzato un popup per l'utente. Documenti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.