【问题标题】:Dealing with international phone numbers on iPhone在 iPhone 上处理国际电话号码
【发布时间】:2010-06-23 16:10:00
【问题描述】:

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

  1. 从客户端发送短信
  2. 从我们的服务器发送短信
  3. 将用户的电话号码上传到其他人可以匹配的数据库中

这在美国运行良好,但国际化存在一系列问题。这些是我让它发挥作用的假设:

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

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

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

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

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

有意义吗?有没有更简单/更理智的方法来做到这一点?

【问题讨论】:

    标签: ios iphone phone-number telephony dialing


    【解决方案1】:

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

    #2/#3 要进行更可靠的标准化,您需要获取用户的粗略位置。这是伪代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多