Скопируйте/вставьте номер телефона в клавиатуру или наберите бесплатный номер в iOS программно

Я пытаюсь позвонить из своего приложения, используя

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

Это бесплатный номер в Индии. Но при наборе он преобразуется в +1 (800)-000-000 (преобразование и произнесение набора в номер США)

Я указал Скопировать/вставить номер телефона на клавиатуру И когда я повторно набираю бесплатный номер в Индии, iPhone подключается США]. Но не смог найти решение.

Так может ли кто-нибудь помочь мне избежать этого местного звонка ISD в Индии ..


person soumya    schedule 29.04.2016    source источник
comment
Пожалуйста, переформулируйте свой вопрос. Похоже, копирование/вставка - это не то, что вам нужно.   -  person Teja Nandamuri    schedule 29.04.2016


Ответы (3)


Телефонная подсказка требует номер в международном формате. Так что вам нужно преобразовать его в это. Я думаю, что для Индии и номера, на который вы пытаетесь позвонить, это должно быть +911800000002.

Итак, это должно работать:

NSURL *phoneURL = [NSURL URLWithString:@"telprompt://+911800000002"];
if ([[UIApplication sharedApplication] canOpenURL:phoneURL]) {
    [[UIApplication sharedApplication] openURL:phoneURL];
} else {
    // handle that case. e.g show number to user so that they can
    // type it in a phone manually or copy it to the clipboard and
    // notify user about that.
}

В зависимости от того, как местные номера по сравнению с международным форматом работают в Индии, вам может потребоваться удалить 1 на вашем номере, но я не уверен в этом.

На заметку: вы всегда должны использовать международный формат при работе с телефонными номерами. В противном случае устройство, которое в данный момент находится за пределами страны назначения, может позвонить кому-то еще или просто не сможет совершить вызов вообще.

person Michael Ochs    schedule 12.05.2016
comment
С вашим ответом мой цикл выполняется, если часть цикла, который снова демонстрирует ту же проблему - person soumya; 12.05.2016
comment
Вы пробовали мой комментарий с удалением 1? Так что использовать +91800000002? Проблема, с которой вы столкнулись, заключается не в API Apple, а в том, что вам нужно знать, как работает индийская телефонная нумерация в соответствии с международными форматами. - person Michael Ochs; 13.05.2016
comment
@ Майкл Окс, Да, я пробовал это. но дал мне сообщение «да». - person soumya; 13.05.2016
comment
@sujania, ты можешь набрать такой номер на своем iPhone вручную? - person Michael Ochs; 16.05.2016
comment
Для ручного набора он подключается к правильному номеру без изменения формата. - person soumya; 16.05.2016
comment
да, но вам нужно найти международный номер, который работает вручную. (+91...). Это число, которое вам нужно вставить туда. Я не могу вам помочь с этим, так как это локальная проблема. В Германии все наши коды городов начинаются с 0, наш международный код — +49, и при преобразовании мы пропускаем ведущую цифру 0 в коде города. Так, например. местный 0123456789 будет международным +49123456789. Помещение последнего в NSURL работает независимо от того, в какой стране находится звонящий. - person Michael Ochs; 16.05.2016
comment
@sujania Это также может помочь: countrycode.org/india Похоже, нужно начать с бесплатных номеров в международном формате. с +91 080 в Индии. - person Michael Ochs; 16.05.2016
comment
@ Майкл Окс, спасибо за ссылку, но звонок перенаправляется на неправильный номер без использования 1 или неверный номер с добавлением +91 - person soumya; 16.05.2016

Добавлен код округа (для Индии: +91)

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://+911800000002"]];

Общий способ узнать код страны

NSLocale *currentLocale = [NSLocale currentLocale];  // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; // get country code, e.g. ES (Spain), FR (France), etc.
person Sam92    schedule 17.07.2016
comment
спасибо за сообщение, но код страны возвращается как США для меня с вашим кодом, который должен соответствовать коду страны ISO: in, и приведенная выше телеподсказка снова перенаправляет меня на номер ISD. - person soumya; 18.07.2016
comment
Привет @Sujania, возможно, вы проверяете симулятор, потому что я проверил его, и на устройстве он возвращает правильное значение! - person Sam92; 20.07.2016
comment
, Мое требование не получать местный код страны, а избегать звонков по бесплатному номеру в качестве ISD, когда в настройках телефона пользовательского устройства включена помощь при наборе номера. Я тестирую только на устройстве iPhone5s - person soumya; 20.07.2016

Ваше приложение может быть отклонено Apple, если вы используете telprompt. Используйте следующий код, чтобы программно набрать номер и убедитесь, что вы вводите номер, который хотите вызвать, в правильном формате.

NSString *phoneNumber = @"+1800000002;
NSString *phoneURLString = [NSString stringWithFormat:@"tel:%@", phoneNumber];
NSURL *phoneURL = [NSURL URLWithString:phoneURLString];
[[UIApplication sharedApplication] openURL:phoneURL];

источник: Замена тел или telprompt для вызова

person Glenn Posadas    schedule 29.04.2016
comment
это дает ту же ошибку, что и сейчас. - person soumya; 29.04.2016
comment
Если вы хотите получить индийский номер, почему бы не добавить +91? Таким образом, 1_ - person dirkgroten; 29.04.2016
comment
@dirkgroten Если я добавлю +91, мне будет делать массаж как недействительный номер - person soumya; 29.04.2016
comment
Ваше приложение может быть отклонено, если вы не проверяете URL-адрес открытия, поэтому: if ([[UIApplication sharedApplication] canOpenURL:phoneURL]) {..open url} - person Alex Kosyakov; 29.04.2016
comment
@Sujania, я думаю, это должна быть функция Dial Assist. Перейдите в «Настройки» -> «Телефон» -> «Отключите помощь при наборе номера» и посмотрите, работает ли она теперь с @"1800000002" (+ не ставьте). К сожалению, невозможно определить, включена ли эта опция у ваших пользователей. Я бы сообщил об ошибке в Apple о том, что Dial Assist не распознает ее должным образом. - person dirkgroten; 02.05.2016
comment
@dirkgroten спасибо ... Да, только с этим он дает действительный ежедневный вызов ... но пытается использовать ту же функциональность, когда включена помощь при сбое ... Надеюсь, как вы мне сказали, это может быть невозможно - person soumya; 02.05.2016
comment
Этот ответ неверен. а) почему это должно быть отклонено? Использование telprompt в течение многих лет! б) указание +1 вместо 1... делает 1 международным кодом, указывающим на США. - person Michael Ochs; 12.05.2016