2017-01-27 7 views
2

3つ以上のアクセスポイントがあるWi-FiネットワークにiPhoneを接続しているとします。近くのアクセスポイントのWi-Fi強度を連続的に収集するループ

私は各アクセスポイントからwifiアクセス強度/信号/ etcの周囲にすべての可能なフィールドを収集し、バックグラウンドであってもそれを三角測量に使用したいと考えています。

while true { 
    ... 
    for access_point in access_points { 
     ... 
     signal_strength = ... 
    } 
} 

は、私は、以前のSOの回答や他の記事を読んで、それはしばらくの間、脱獄せずにiOS版では許可されていなかったように思えるが、今再びavailiableされてきました。

誰でもこれを行う方法のコードスニペットを表示できますか?すべてiOS開発の初心者です。

+0

これは、以前のコメントでこれを行うために自分の会社のフレームワークを宣伝していたユーザーによって下降されました... – lollercoaster

答えて

2

私はこれで作業して以来かなりの時間がかかりましたので、もう一度確認しましたが、今読んだことが誤解されています。私が知る限り、アップルは突然、公開フレームワークをアクセスポイント、つまり特定のMACアドレスとその信号強度をスキャンするように制限するという以前の決定を元に戻しませんでした。

あなたはなく、個々のMACアドレスのために、(すなわち、SSIDなど)ネットワークための特定RSSI(信号強度)を照会することができます。 iOS 5を使用する前にプライベートAPIを使用することができます.jailbrokenデバイスでプライベートAPIを使用すると、それが可能です。

自分の古いコードを手元に置いていません(iBeaconsを使用する前に、屋内の位置追跡のためにこれをやっていました)ので、サンプルスニペットを自分で提供することはできません。私のコードは日付がついていて、もはや機能しませんが、何かhereが見つかります。

iOS 10でこれをもう一度許可すると主張するソースに本当に興味があります。 Appleはこれをプライバシー上の理由から閉鎖しました(正式には少なくともこれもそうかもしれませんが、場所トラッキングを扱う開発者がAppleのフレームワークに完全に頼る必要があるということもあります)。 。

また、特にiOS開発が初めての場合は、これが些細なことではないことに注意してください。私は背景のアイデアにも取り組んでいません。あなたが何をしても、バックグラウンドで連続して走るスキャナーを持たないので、あなたはそれを忘れてしまいます。これは、iOSプログラミングの非常に基本的な原則に反しています。

2

私はすべてのWi-Fiネットワークをpingする方法をこのquestionに回答しました。

func getInterfaces() -> Bool { 
    guard let unwrappedCFArrayInterfaces = CNCopySupportedInterfaces() else { 
     print("this must be a simulator, no interfaces found") 
     return false 
    } 
    guard let swiftInterfaces = (unwrappedCFArrayInterfaces as NSArray) as? [String] else { 
     print("System error: did not come back as array of Strings") 
     return false 
    } 
    for interface in swiftInterfaces { 
     print("Looking up SSID info for \(interface)") // en0 
     guard let unwrappedCFDictionaryForInterface = CNCopyCurrentNetworkInfo(interface) else { 
      print("System error: \(interface) has no information") 
      return false 
     } 
     guard let SSIDDict = (unwrappedCFDictionaryForInterface as NSDictionary) as? [String: AnyObject] else { 
      print("System error: interface information is not a string-keyed dictionary") 
      return false 
     } 
     for d in SSIDDict.keys { 
      print("\(d): \(SSIDDict[d]!)") 
     } 
    } 
    return true 
} 

この使用してプライベートなライブラリを行うことが可能であるとして、あなたは彼らがそれらを活用場合はiOSのストアで販売されているアプリは販売できないことを意味し、ジェイルブレイクアプリの中で、この機能を見ている可能性があります。

+0

iOSのどの部分がこれを行うために活用する必要がありますか(許可されません) ?それはなんと呼ばれていますか?あなたは 'SSIDDict 'でどんな情報を入手しますか? – lollercoaster

+0

また、私は無線LANネットワークの強さを望んでいない、私はアクセスポイント(ルータ)の強さが欲しい... – lollercoaster

関連する問題