iPhoneでドロップアウト後にEDGE接続がいつ復帰するかを判断する
-
05-07-2019 - |
質問
AppleのReachabilityサンプルを自分のプロジェクトに組み込んでいるので、ネットワークに接続しているかどうかがわかります。ネットワークに接続していない場合は、送信やリクエストを気にしません。ネットワーク接続を確立するたびに同期要求を開始するのではなく、バックグラウンドで到達可能性を更新し、現在の結果をすぐに利用できるようにする方が簡単だと思われるため、ステータス通知の実装を採用することにしました。
問題は、EDGEネットワーク上で偽陰性が発生し始めることです。電話は接続できますが、アプリはそうではないと考えています。私の理解では、EDGE接続のときに通知を受け取らないので、ある時点で接続を失い、回復したと思います。通常、ネットワーク接続を確認するには、アプリを再起動するだけで十分です。
これは最適な解決策ではないので、他の誰かがこの問題に出くわし、解決策について考えたことはないかと思っていました。
(これが3Gにも当てはまるかどうかわかりません。私は第1世代のiPhoneを実行しています。)
解決
到達可能性の通知は、Wi-Fiの検出に関しても、私にとって信頼できるものではなかったようです。そのため、代わりにポーリングを使用します。 5秒ごとにチェックしても害はないようです。
- (void) checkReachability {
BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork);
// Do something...
[self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0];
}
他のヒント
ネットには、優れた到達可能性の例があります。それは素晴らしくうまく機能します: http://servin.com/iphone/iPhone-Network-Status.html
しかし、あなたがそれを私自身の方法で使用しようとすると、ただ爆弾になります。
を使用して実装しようとしました:
NSString *sCellNetwork;
NSString *sNetworkReachable;
if (flags & kSCNetworkFlagsReachable || flags & kSCNetworkReachabilityFlagsIsWWAN)
{do it}
else {
Network fail alert;
}
所属していません StackOverflow