Подтвердить что ты не робот

Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем 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 в ситуациях, когда я действительно хотел, чтобы пользователь был перенаправлен обратно в мое приложение после завершения телефонного звонка?
4b9b3361

Ответ 1

  • Поведение отличается от вызова -[UIApplication openURL:] с помощью URL tel: и нажатия ссылки на тот же URL-адрес в UIWebView.

  • Использование UIWebView вместо UILabel может иметь некоторые недостатки, но вам не нужно фактически отображать UIWebView, чтобы получить поведение обработки URL-адреса tel. Вместо этого просто загрузите запрос URL tel в экземпляр 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

Ответ 2

Самый простой способ:

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

Вы получите приглашение, и ваше приложение восстановит фокус после завершения вызова.

Ответ 3

Позвольте мне немного упростить. Все, что вам нужно, это небольшой фрагмент:

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

который я получил здесь.

* Недавно успешно протестирован на iOS 5.0.

Ответ 4

Метод Эрика Бротто по-прежнему работает в 5.1. Вы должны добавить webview к основному представлению перед 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]]; 

(Я добавил очиститель номера телефона, чтобы удалить любой не номер char, который блокирует этот метод)