今、私は自分のアプリのネットワーキングシステムを構築しようとしています。私は自分のネットワーキングオペレーションがネットワーク障害後に自分自身を再試行できるようにしたい。利用者の強い要請で行われた要求の場合その後、ネットワークタスクを再起動する必要がありますか?
:
は常に接続を試みることは、Appleがこのような行為(Designing for Real-World Networks)について言っているものです。ネットワークサービスが利用可能かどうかを推測しないで、その決定をキャッシュしないでください。 接続に失敗した場合は、SCNetworkReachability APIを使用して、障害の原因を診断してください。次に、
- 一時的なエラーのために接続が失敗した場合は、接続を再試行してください。
- ホストに到達できないために接続に失敗した場合は、SCNetworkReachability APIが登録されたコールバックを呼び出すのを待ちます。ホストが再びアクセス可能になると、ブラウザのウィンドウを閉じるかキャンセルボタンをクリックするなど、ユーザーがリクエストを取り消すための何らかのアクションを行っていない限り、ユーザーの介入なしに接続の試行を自動的に再試行する必要があります。
私は正常にこの機能を実装しますが、私は«一時的なエラーの»が実際に何であるかを決定する問題を抱えています。
は、今私は500 ... 599の範囲でNSURLErrorNotConnectedToInternet
、NSURLErrorNetworkConnectionLost
、NSURLErrorInternationalRoamingOff
、NSURLErrorCallIsActive
、NSURLErrorDataNotAllowed
またはNSURLErrorTimedOut
を受信し、HTTPステータスコードの後にタスクを再試行するんだけど、私はそれらが十分にあるかはわかりません。
また、再試行動作を使用する経験豊富な開発者からアドバイスをいただき、誠にありがとうございます。タスクを再試行するタイミングと実行しないタイミングをどのように決定しますか?
ありがとうございます!
VerizonとSprintのAFAIKでは、現在のデバイスでも、通話中にデータにアクセスすることはできません(LTEを使用し、VoLTEがそのセルサイトで有効になっている場合を除く) )。 – dgatwood