21

私はiPhoneアプリケーションに取り組んでおり、デバイスがローミングしているかどうかを確認して、ホームネットワークの外にいる場合にユーザーに高額な接続のコストをインテリジェントに回避できるようにしたいと考えています。

私が書いているアプリケーションはジェイルブレイクされた電話用ですが、可能であれば標準のSDKを使用したいと思います。

これが私がすでに見つけたものです:

1. Apple SDK:Apple のドキュメントで、AppleのSCNetworkReachabilityAPIに約束があります。APIは、WIFIまたは携帯電話ネットワークに接続しているかどうか、ネットワーク接続が現在確立されているかどうかなどへのアクセスを提供します。ただし、SCNetworkReachability APIリファレンスPDFで「ローミング」または「ローミング」を検索すると、どちらもnilになります。彼らのサンプルコードもそうです。

2.ジェイルブレイクされたiPhoneFSのGrep: [設定]->[一般]->[ネットワーク]タブでは、ユーザーはローミングをオンまたはオフにできます。これについてはplistファイル( "/Applications/Preferences/Network.plist")を調べて、次の参照を見つけることができました。

        PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
        cell = PSSwitchCell;
        default = 1;
        defaults = "com.apple.commcenter";
        key = InternationalRoamingEDGE;
        label = "EDGE_ROAMING_TOGGLE";
        requiredCapabilities =             (
            telephony
        );

ユーザーがInternationalRoaming設定を変更したという通知にサインアップできるように見えるので、これは確かにリードです。それでも、これを実際にローミングしているという知識に変える方法はわかりません。

3.SpringBoardのクラスダンプされたソースを確認します。class -dump を使用してSpringBoardのクラスをダンプしました。「ローミング」または「ローミング」への参照が見つかりませんでした

4.明らかに、私はSOでこれをチェックすることから始めました: 関連するものは何も見つかりませんでした。

さらなるステップ:誰かがここで何かアドバイスがありますか?私はこれが可能であることを知っています。しかし、Appleは明らかに見つけるのを非常に難しくしています。プライベートフレームワークを使用せずにこれが可能かどうかは非常に疑わしいです。(CoreTelephonyなど)。これはジェイルブレイクされたアプリなので、SpringBoardに挿入されたコードでキャリア名をスクリーンスクレイピングすることに頼るかもしれませんが、私はむしろそのルートに行きたくないのです。どんなアドバイスも大歓迎です。ありがとう。

4

3 に答える 3

1

シンボリックリンクの解決策はそれを行う唯一の方法ではありませんが、間違いなくそれが最善です。私が気付いたように、返された文字列には、オペレーターとキャリアの MCC と MNC コードが含まれています!!! コアのテレフォニー フレームワークでさえ、ローミング中に iPhone が接続されているオペレーターに関する情報を取得できません。

 Logs: 
 carrier: /System/Library/Carrier Bundles/iPhone/72410/carrier.plist
 operator: /System/Library/Carrier Bundles/iPhone/20810/carrier.plist

ご覧のとおり、キャリア (元のセルラー プロバイダー) の行には、「フォルダー」72410 内にファイルが含まれています。これは、MCC 724 (ブラジル) と MNC 10 (VIVO) を意味します。オペレーター (実際には私の携帯電話が接続されているもの - 私はローミング中) はフォルダー 20810 内にあり、これは MCC 208 (フランス) と MNC 10 (SFR) を意味します。

ちなみに、iOS5のiPhone4を使っています。

于 2011-11-12T09:51:58.257 に答える
0

非脱獄デバイスでは、http://ipinfo.io (私自身のサービス) のようなサードパーティのサービスを使用して、デバイスの IP アドレスに基づいてキャリア コー​​ドの現在の国を調べることができます。デバイスがローミングしているかどうかを判断するための CTCarrier の詳細。標準の ipinfo.io API 応答は次のとおりです。

$ curl ipinfo.io/24.32.148.1 
{
    "ip": "24.32.148.1",
    "hostname": "doc-24-32-148-1.pecos.tx.cebridge.net",
    "city": "Pecos",
    "region": "Texas",
    "country": "US",
    "loc": "31.3086,-103.5892",
    "org": "AS7018 AT&T Services, Inc.",
    "postal": "79772"
}

ただし、モバイル IP の mnc/mcc の詳細も含むカスタム パッケージを利用できます。詳細については、 http://ipinfo.io/developersを参照してください。

于 2014-08-09T19:11:50.863 に答える