Возврат к поведению приложения после телефонного звонка, отличного по собственному коду от UIWebView
Согласно документации Apple, чтобы сделать телефонный звонок из моего приложения, мне нужно реализовать следующие протоколы:
HTML-ссылка:
<a href="tel:1-408-555-5555">1-408-555-5555</a>
Строка URL собственного приложения:
tel:1-408-555-5555
Тем не менее, после завершения телефонного звонка, инициированного с помощью HTML-ссылки внутри UIWebView, я перенаправлен обратно в свое приложение. Но после завершения телефонного звонка, сделанного из строки URL-адреса собственного приложения, мой iphone остается в обычном приложении телефона iphone, и если я хочу вернуться в свое приложение, я должен сделать это вручную.
Насколько я могу судить по прочтению того, что говорили другие, изменить это поведение невозможно.
Вот мой вопрос:
- Правда ли, что невозможно вернуться в приложение после телефонного звонка из строки URL-адреса собственного приложения?
- Был бы какой-то недостаток в реализации UIWebView вместо UILabel в ситуациях, когда я действительно хотел, чтобы пользователь перенаправлялся обратно в мое приложение после завершения телефонного звонка?
4 ответа
Поведение действительно различается между звонками
-[UIApplication openURL:]
сtel:
URL и щелкнув ссылку на тот же URL вUIWebView
,Используя
UIWebView
вместо UILabel могут быть некоторые недостатки, но вам не нужно отображатьUIWebView
чтобы получить егоtel
Поведение при обработке URL. Вместо этого просто загрузитеtel
URL-запрос в экземпляре UIWebView без добавления его в иерархию представлений.
Например:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@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
Самый простой способ выглядит так:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]];
Вы получите приглашение, и ваше приложение восстановит фокус после завершения вызова.
Позвольте мне немного упростить. Все, что вам нужно, это маленький фрагмент:
UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
который я получил здесь.
* Недавно успешно протестирован на iOS 5.0.
Метод Эрика Бротто все еще работает в 5.1. Вы должны добавить веб-представление к основному представлению до loadRequest, например так:
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]];
(Я добавил очиститель номера телефона, чтобы удалить любой нечисловой символ, который блокирует этот метод)