私はあなたのためにその問題についていくらかの洞察を持っています。
- MSISDNはSIMカードに保存できますが、ほとんどのネットワークプロバイダー(南アフリカのすべてのプロバイダー)はMSISDNをSIMカードに保存しません。これにはいくつかの理由がありますが、最も注目すべきものは次のとおりです。
- 動的MSISDN割り当て:プリペイドSIMは、最初に使用されたときにMSISDNが割り当てられることがあります。これは、ネットワークに利用可能なMSISDNのプールがあり、新しいプリペイドSIMがオンラインになるたびにそれらを割り当てることを意味します。これは、SIMが出荷されるとき、まだMSISDNがないことを意味します。つまり、SIMを出荷する前にMSISDNを保存することはできません。一部のネットワークは、特に使用可能な数が少なくなっている場合に、非アクティブな期間の後にMSISDN割り当てを「期限切れ」にし、これらの数を使用可能なプールに戻します。
- 携帯電話番号ポータビリティ:一部の国では、モバイル加入者はMSISDNを維持しながら、ネットワークを変更できます。これは、MSISDNが1つのネットワーク用のSIMから別のネットワーク用のSIMに移動されることを意味します。
そのため、ユーザーはSIMのMSISDNエントリが空白になることがよくあります。ユーザーは引き続きMSISDNをSIM自体に保存できますが、これにより任意の番号を保存することもでき、設定されていることや、加入者の実際の電話番号であることが保証されるわけではありません。
2. SIMカードに保存されている番号を取得するために、あなたが尋ねた電話。番号が設定されていない場合は取得できません。また、ユーザーが間違った番号を設定している場合は、詳細が正しくありません。
3.正解です。この文字列は、SIM自体からフェッチされます。
MSISDNを検出するための唯一の半信頼性の高い方法は、モバイルオペレーターがヘッダーにMSISDNを含める場合にWAP / WEBを使用することです(Webビューのトリックを実行して、どのヘッダーが通過するかを確認できます)。ただし、これらはネットワークの場合にのみ表示されます。それをサポートし、ユーザーがモバイルデータを使用している場合-つまり、ユーザーがWiFiを使用している場合は機能しません。
私が考えることができる他のメカニズム(私が考えることができる唯一の保証されたメカニズム)は、常にオペレーターから正しいMSISDNを取得するため、USSDセッションを介したものですが、プログラムでUSSDセッションを開いて読み取る方法が見つかりませんでした応答(少なくともAndroidでは)。私はUSSDサービスを持っていますが、その出力はMSISDNだけですが、残念ながら、これはまだ使用可能であることが証明されていません。