将电话号码复制/粘贴到键盘中或以编程方式拨打iOS程序中的免费电话号码

9

我正在尝试使用我的应用程序进行通话

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

这是印度的免费电话号码。但是拨打时,它会转换为+1(800)-000-000(转换并说成美国号码)。我已经参考了将电话号码复制/粘贴到键盘中当我重新拨打印度的免费电话号码时,iPhone连接到美国。但是找不到解决方案。所以请问有人能帮我避免这个ISD呼叫印度本地呼叫吗?

请重新表述您的问题。看起来复制/粘贴并不是您想要的。 - Teja Nandamuri
3个回答

2

telprompt需要使用国际格式的号码。因此,您需要将其转换为该格式。我认为对于印度和您尝试拨打的号码,应该使用+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,但不确定。

顺便提一下:在处理电话号码时,您应始终使用国际格式。否则,当前位于目的地国家之外的设备可能会拨打其他人的电话或根本无法拨打电话。


通过你的回答,我的循环在“if”部分执行,这再次展示了相同的问题。 - soumya
@ Michael Ochs,是的,我已经尝试过了。但是它给了我一个消息,说“这不是一个有效的数字”。。只有关闭拨号辅助功能才能保存,但那是手动操作。 - soumya
@sujania 你能不能在你的iPhone上手动拨打这个号码? - Michael Ochs
是的,但你需要手动找到可用的国际号码。(+91...)。这就是你需要输入的号码。由于这是一个本地问题,我无法提供太多帮助。在德国,我们的区号都以“0”开头,我们的国际代码是“+49”,在转换时,我们跳过区号前面的“0”。例如,本地号码“0123456789”将成为国际号码“+49123456789”。将后者放入“NSURL”中即可使用,无论呼叫者在哪个国家。 - Michael Ochs
@sujania 这也可能有所帮助:https://countrycode.org/india 在印度,国际格式的免费电话号码似乎需要以“+91 080”开头。 - Michael Ochs
显示剩余3条评论

1
县/区代码已添加(对于印度:+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.

谢谢您的帖子,但是使用您的代码,国家代码返回为“US”,而应该是ISO国家代码:“in”,上面的telprompt再次将我重定向到ISD号码。 - soumya
嗨@Sujania,你可能正在检查模拟器,因为我已经检查过了,在设备上它返回了正确的值! - Sam92
我的要求不是获取本地国家代码,而是在用户设备电话设置中启用拨号辅助功能时避免将免费电话号码视为国际长途。我只在iPhone5s设备上进行测试。 - soumya

0
如果您使用telprompt,您的应用程序可能会被苹果拒绝。请使用以下代码来以编程方式拨打电话号码,并确保您以正确的格式输入要拨打的号码。
NSString *phoneNumber = @"+1800000002;
NSString *phoneURLString = [NSString stringWithFormat:@"tel:%@", phoneNumber];
NSURL *phoneURL = [NSURL URLWithString:phoneURLString];
[[UIApplication sharedApplication] openURL:phoneURL];

源代码:用call替换tel或telprompt


这个代码给我的错误和我当前得到的一样。 - soumya
1
如果您想确保获得印度号码,为什么不添加+91呢?所以 @"+911800000002" - dirkgroten
@dirkgroten 如果我添加+91,那么它会提示我输入的不是有效的数字。 - soumya
1
如果你的应用程序没有检查打开的URL,它可能会被拒绝。所以,如果 ([[UIApplication sharedApplication] canOpenURL:phoneURL]) {..打开URL } - Alex Kosyakov
@Sujania,我认为这与“拨号辅助”功能有关。转到设置->电话->关闭拨号辅助,然后查看是否可以使用@"1800000002"(不要加“+”)进行操作。不幸的是,无法确定用户是否启用此选项。我建议向苹果报告此问题未被拨号辅助正确识别。 - dirkgroten
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接