Volver al comportamiento de la aplicación después de una llamada telefónica diferente en código nativo que UIWebView

De acuerdo con la documentación de Apple , para hacer llamadas desde mi aplicación, necesito implementar los siguientes protocolos:

Enlace HTML:

1-408-555-5555 

Cadena de URL de aplicación nativa:

 https://stackoverflow.com/questions/5317783/return-to-app-behavior-after-phone-call-different-in-native-code-than-uiwebview/tel:1-408-555-5555 

Sin embargo, después de completar una llamada telefónica iniciada desde un enlace HTML dentro de UIWebView, me redirigen directamente a mi aplicación. Pero al completar una llamada telefónica hecha desde una cadena de URL de aplicación nativa, mi iPhone permanece en la aplicación telefónica habitual del iPhone, y si quiero regresar a mi aplicación, tengo que hacerlo manualmente.

Por lo que puedo decir al leer lo que otros han dicho, no hay forma de cambiar este comportamiento.

Aquí está mi pregunta:

  1. ¿Es cierto que es imposible regresar a una aplicación después de realizar una llamada desde una cadena de URL de aplicación nativa?
  2. ¿Habría alguna desventaja al implementar UIWebView en lugar de UILabel en situaciones en las que realmente quería que el usuario fuera redireccionado a mi aplicación después de completar una llamada telefónica?

  1. El comportamiento difiere entre llamadas -[UIApplication openURL:] con un tel: URL, y haciendo clic en un enlace a la misma URL en un UIWebView .

  2. Usar un UIWebView lugar de un UILabel puede tener algunas desventajas, pero no es necesario que UIWebView para obtener su comportamiento de manejo de URL de tel . En su lugar, simplemente cargue una solicitud de tel URL en una instancia de UIWebView sin agregarla a su jerarquía de vistas.

Por ejemplo:

 #import  #import  @interface PhoneCaller : NSObject { @private UIWebView *webview; } - (void)callTelURL:(NSURL *)url; @end @implementation - (id)init { self = [super init]; if (self) { webview = [[UIWebView alloc] init]; } return self; } - (void)callTelURL:(NSURL *)url { [webview loadRequest:[NSURLRequest requestWithURL:url]]; } - (void)dealloc { [webview release]; [super dealloc]; } @end 

La forma más simple parece ser:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]]; 

Recibirá un aviso y su aplicación recuperará el foco una vez que finalice la llamada.

Permíteme simplificar un poco. Todo lo que necesitas es este pequeño fragmento:

 UIWebView *callWebview = [[UIWebView alloc] init]; NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"]; [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 

que obtuve aquí .

* Recientemente probado con éxito en iOS 5.0.

El método de Eric’s Brotto todavía funciona en 5.1. Debe agregar la vista web a la vista principal antes de loadRequest, como esta:

 NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] invertedSet]] componentsJoinedByString:@""]; NSString *escapedPhoneNumber = [cleanedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *telURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", escapedPhoneNumber]]; UIWebView *mCallWebview = [[UIWebView alloc] init] ; [self.view addSubview:mCallWebview]; [mCallWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 

(Agregué un limpiador de número de teléfono, para eliminar cualquier carácter no numérico que bloquee este método)