2

次の方法で連絡先データを使用するアプリがあります。

  1. クライアントから SMS を送信するには
  2. サーバーから SMS を送信するには
  3. ユーザーの電話番号を、他のユーザーが照合できるデータベースにアップロードするには

これは米国では問題なく機能しますが、国際化には一連の問題があります。これらは、それを機能させるための私の仮定です:

#1 - クライアントから SMS を送信するのは簡単です。アドレス帳の番号をそのまま (正規化せずに) 使用し、OS に認識させます。特定の番号を介して電話をかけることができれば、SMS を送信できる可能性があります (そうですか?)。

#2/#3 - サーバーからの SMS の送信はより複雑です。ほとんどの SMS API は国際表記 (「+」プレフィックスと国コード) を必要としますが、ユーザーは連絡先リストに、さまざまなプレフィックス (市外局番、国コードなど) を持つさまざまなローカルおよびグローバルの電話番号を持っています。したがって、ここでは正規化が必要になります。データベース内のユーザーの電話番号を照合するには、正規化も必要です。

電話番号を正規化するには、まず、"+"、"011" および "00" プレフィックスを探して、ユーザーがグローバル番号を指定するつもりだったかどうかを判断する必要があります。その場合は、プレフィックスを削除し、「+」に置き換えて、その番号を使用します。

番号がローカルだと思われる場合は、自分で国コードを追加してみることができます (ヒューリスティックで信頼性がありません)。これには、ユーザーのデフォルトの国コードを知る必要があります。iPhone では、ユーザーの優先地域 (選択可能) とユーザーの MCC および MNC (場所に依存しますか?) を取得できます。私はユーザーが選択した国コードに傾倒しています。なぜなら、彼らの地元の電話番号のほとんどがその国のものになる可能性があるからです。

これは、番号全体を解析したり、市外局番やその他のコンポーネントを特定したりせずに実行できる最善の方法だと思います。ほとんどの国では、国コードのプレフィックスとして「0」を使用できると思います。

わかる?これを行うためのより簡単な/より健全な方法はありますか?

4

1 に答える 1

0

#1これは、ユーザーが海外に行く場合を除いて、公正な仮定です。

#2/#3 より信頼性の高い正規化を行うには、ユーザーの大まかな位置を取得する必要があります。疑似コードは次のとおりです。

  • 数字が「+」で始まる場合は、そのままにしておきます
  • それ以外の場合は、ユーザーの現在の国を取得します (この投稿を参照してください):
    • 国の終了コードで始まる場合は、それを「+」に置き換えます
    • 国コードで始まる場合は、「+」を追加します
    • 1つの「0」で始まる場合は、「+」に置き換えます
    • それ以外の場合は、ローカル番号であると想定し、市外局番と国番号を追加します。これは複雑なため、現在の市外局番や国番号、場所など、ユーザーに何らかの入力を促す方が簡単かもしれません。
于 2010-08-10T14:07:43.540 に答える