Haben iPhone-Apps die Berechtigung, Anrufe ohne Benutzerinteraktion zu tätigen?

Ich habe gerade über einen Betrug mit verpassten Anrufen gelesen, bei dem dem Benutzer Gebühren in Rechnung gestellt werden, selbst wenn er die Nummer nicht zurückruft. Mir kam der Gedanke, dass eine bösartige iPhone-App Premium-Nummern anrufen könnte, um Benutzer um Geld zu betrügen – tatsächlich scheint dies in der Vergangenheit passiert zu sein.

Laut Apples eigener Dokumentation :

Wenn ein Benutzer auf einer Webseite auf einen Telefonlink tippt, zeigt iOS eine Warnung an, in der er gefragt wird, ob der Benutzer die Telefonnummer wirklich wählen möchte, und leitet den Wählvorgang ein, wenn der Benutzer akzeptiert. Wenn ein Benutzer eine URL mit dem Tel-Schema in einer nativen App öffnet, zeigt iOS keine Warnung an und initiiert den Wählvorgang, ohne den Benutzer weiter aufzufordern.

Es scheint mir, dass eine scheinbar harmlose iPhone-App beispielsweise warten könnte, bis das Telefon aufgeladen ist (und daher wahrscheinlich nicht vom Benutzer besucht wird) und dann einen Anruf bei einer Premium-Rufnummer einleitet, um dem Entwickler einen ordentlichen Bonus einzustreichen . Es scheint keine Berechtigung in iOS zu geben, die ich ändern kann, um dieses Verhalten zu verhindern, da dies die Telefon-App mit einer URL öffnet, anstatt auf Telefondaten zuzugreifen.

Kann jemand bestätigen, ob mein Verständnis richtig ist, und wenn ja, warum um alles in der Welt hat Apple ein so klaffendes Loch nicht geschlossen?

Antworten (3)

Ich habe das iOS-Verhalten experimentell überprüft, indem ich versucht habe, einen Telefonanruf von einer meiner Apps zu initiieren.

Hier sind die Ergebnisse:

  • Es ist möglich, einen Telefonanruf ohne Bestätigung durch den Benutzer programmgesteuert zu starten. Ich habe gerade eine einzelne Codezeile geschrieben, die direkt nach dem Laden der App ausgeführt wird. Das heißt, wenn sich Ihre App im Vordergrund befindet, kann sie jederzeit einen Anruf starten, auch ohne dass der Benutzer irgendwo tippen muss.
  • Ich habe eine stille Remote-Push-Benachrichtigung an die App gesendet, um sie aufzuwecken, wenn sie nicht ausgeführt wird, und dann denselben Code auszuführen. Es wurde kein Anruf gestartet; iOS erlaubt einer App nicht, einen Telefonanruf zu initiieren, wenn die App im Hintergrund ausgeführt wird.

Um Ihre Fragen zu beantworten, besteht die einzige Möglichkeit, einen Anruf zu starten, ohne dass der Benutzer es bemerkt, darin, den Benutzer irgendwie davon zu überzeugen, die bösartige Anwendung im Vordergrund laufen zu lassen und dann den Anruf zu starten, da iOS diesen Vorgang nicht zulässt wenn die App im Hintergrund läuft.

Derzeit bietet iOS keinen Mechanismus, um das Starten von Telefonanrufen von einer bestimmten App aus zu blockieren, aber dies kann nur passieren, wenn sich die App im Vordergrund befindet.

Danke für die umfassende Untersuchung, brillante Antwort. Ich bin froh zu hören, dass es nur im Vordergrund ist, obwohl ich nicht anders kann, als zu denken, dass es nicht allzu schwer ist, eine App zu erfinden, die wahrscheinlich unbeaufsichtigt und im Vordergrund bleibt - die Kamera-App, die einen Zeitraffer macht, ist eine gutes Beispiel für die Art der Sache. Ich würde es immer noch vorziehen, URLs in anderen Apps zu öffnen, war eine Berechtigung für jede andere geöffnete App - nur das erste Mal pro externer App bestätigt, nicht jedes Mal. Ich akzeptiere jedoch, dass dies Auswirkungen auf die UX hat. Ich denke, jeder muss einfach wachsam sein.

Ich habe eine Test-App erstellt, um dies zu überprüfen. App kann URL wie z. B. tel://123456789nur öffnen, wenn sie im Vordergrund und aktiv ist. Wenn ich diesen Code auch direkt nach dem Eintritt in den Hintergrundzustand aufrufe, hat die API zum Öffnen dieser URL nichts getan. Um Ihre Frage zu beantworten: Apps können ohne Ihr Wissen keinen Anruf tätigen.

Um dies zu testen, fügen Sie dies in Ihr ein AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}
Tolle Antwort, danke für den Code. Wenn ich beide Antworten akzeptieren könnte, würde ich es tun.

Beim Versuch, einen Anruf unter iOS >= 10.3 zu initiieren, wird dem Benutzer immer ein Popup angezeigt. Dokumente