我需要拨打一个以#开头的号码。 例如,俄罗斯的电话号码看起来像+79123817711,我需要拨打#79123817711。 我正在尝试这个:
NSURL *url = [NSURL URLWithString:@"tel://#79123817711"];
[[UIApplication sharedLibrary] openURL:url];
但它已被#23替换为#,当然,不会拨打电话。
有没有办法打这样的电话。
我知道,这不是电话,而是USSD请求。但是这个ussd的功能看起来像是一个电话。
答案 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()
}