2

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

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

这在美国运作良好,但国际化有一系列问题。这些是我使它工作的假设:

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

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

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

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

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

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

4

1 回答 1

0

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

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

  • 如果数字以“+”开头,则保持原样
  • 否则获取用户当前的国家(参考这篇文章):
    • 如果带有国家退出代码的馅饼,请将其替换为“+”
    • 如果以国家代码开头,请添加“+”
    • 如果以一个“0”开头,则将其替换为“+”
    • 否则,假设它是本地号码,添加区号和国家代码。由于这一项的复杂性,提示用户输入一些输入可能会更容易,例如他们当前的区号和国家代码,或者他们的位置。
于 2010-08-10T14:07:43.540 回答