处理iPhone上的国际电话号码

时间:2010-06-23 16:10:00

标签: ios iphone phone-number telephony dialing

我有一个应用程序,它通过以下方式使用联系人数据:

  1. 从客户端发送短信
  2. 从我们的服务器发送短信
  3. 将用户的电话号码上传到其他人可以匹配的数据库
  4. 这在美国很好用,但国际化有一系列问题。这些是我使其成功的假设:

    #1 - 从客户端发送短信非常简单。逐字地使用地址簿中的数字(不进行规范化)并让操作系统弄清楚。如果他们可以通过给定号码拨打电话,他们可以发送短信(对吧?)

    #2 /#3 - 从服务器发送SMS更复杂。大多数SMS API需要国际标记(“+”前缀和国家代码),而用户将在其联系人列表中具有各种各种本地和全球电话号码以及各种前缀(区号,国家代码等)。因此,这里需要规范化。在数据库中匹配用户的电话号码也需要规范化。

    要规范化电话号码,我必须首先通过查找“+”“011”和“00”前缀来决定用户是否要指定全局号码。如果是这样,我删除前缀,将其替换为“+”并使用该号码。

    如果我认为这个数字是本地的,我可以尝试自己处理国家代码(启发式,不可靠)。这需要知道用户的默认国家/地区代码。在iPhone上,我可以获得用户的首选区域(可选)和用户的MCC和MNC(取决于位置?)。我倾向于用户选择的国家/地区代码,因为他们当地的大多数电话号码都属于该国家/地区。

    我相信如果不解析整个数字并找出区域代码和其他组件,这是我能做的最好的事情。我假设大多数国家/地区允许“0”作为其国家/地区代码的前缀。

    有意义吗?是否有更简单/更理智的方式来做到这一点?

1 个答案:

答案 0 :(得分:0)

#1这是一个公平的假设,除非用户出国。

#2 /#3要进行更可靠的规范化,您需要获得用户的粗略位置。这是psudeo代码:

  • 如果数字以“+”开头,则保持原样
  • 其他获取用户的当前国家/地区(请参阅this post):
    • 如果带有country exit codes的蛋挞,请将其替换为“+”
    • 如果以国家/地区代码开头,请添加“+”
    • 如果以一个“0”开头,则将其替换为“+”
    • 否则,假设它是本地号码,添加区号和国家/地区代码。 由于这个的复杂性,可能更容易提示用户输入一些信息,例如他们当前的区号和国家代码,或者他们的位置。