拨打包含#的号码。 (IPhone SDK)

时间:2010-08-24 08:17:09

标签: iphone ios

我需要拨打一个以#开头的号码。 例如,俄罗斯的电话号码看起来像+79123817711,我需要拨打#79123817711。 我正在尝试这个:

NSURL *url = [NSURL URLWithString:@"tel://#79123817711"];
[[UIApplication sharedLibrary] openURL:url];

但它已被#23替换为#,当然,不会拨打电话。

有没有办法打这样的电话。

我知道,这不是电话,而是USSD请求。但是这个ussd的功能看起来像是一个电话。

4 个答案:

答案 0 :(得分:6)

iOS SDK(Apple URL方案参考)告诉: 为防止用户恶意重定向电话或更改电话或帐户的行为,电话应用程序支持tel方案中的大多数但不是全部特殊字符。具体来说,如果URL包含*或#字符,则电话应用程序不会尝试拨打相应的电话号码。

所以,没有运气。

答案 1 :(得分:0)

只需将*替换为%2a,将#替换为%23

答案 2 :(得分:0)

我尝试了iOS10。但是它没有用。但是从iOS 12开始,它开始工作了。 不知道如何。

NSString *mobileNocleanedString = @"*454*200#";

NSURL *phoneUrl = [NSURL URLWithString:[NSString  stringWithFormat:@"tel:%@",mobileNocleanedString]];

if ([[UIApplication sharedApplication] canOpenURL:phoneUrl]) {
    [[UIApplication sharedApplication] openURL:phoneUrl];
}

答案 3 :(得分:0)

我已经通过对ussd进行编码并将其传递到url中来实现这一点,并且效果很好

这里是一个例子:

extension String {
      /// Calling ussd number
      func callUSSD() {
          guard let urlString = self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return }
          guard let url = URL(string: "tel://\(urlString)") else { return }
         UIApplication.shared.open(url, options: [:])
    }
}

用法:

@IBAction func callTapped(_ sender: UIButton) {
    "*1124#".callUSSD()        
}