9

数週間前にAppleのガイドラインを読んだところ、接続を試みる前にアプリが到達可能性のステータスをチェックする必要があると書かれていました。これを行わなかったためにアプリがアプリストアから拒否されたと読んだことがあります。

ただし、到達可能性APIは、到達可能性が利用可能かどうかを判断するのに最大30秒かかる場合があります(Appleのドキュメントによると、これは私自身も時々発生します)。この状況では、APIは到達不能を返します。

したがって、実際に到達可能性がある状況が発生する可能性がありますが、APIは到達可能性がないと言っており、30秒ほど到達可能であることがわかりません。

特に接続がユーザーによって開始された場合、30秒待たなければならないことは容認できないほど長くなります。このシナリオを考えてみましょう。

  • ユーザーがインターネット関連のアクティビティを実行するボタンをクリックします
  • Appleのガイドラインに従って、コードは到達可能性APIを使用して、接続を試行する前に到達可能性があるかどうかを確認します。
  • Reachability APIは、到達可能性がない(実際には存在する)と言っているので、コードはユーザーに接続性がないことを通知します(プロセスで混乱させます)
  • 30秒後、Reachability APIは、到達可能性があることをコードに通知します
  • しかし、ユーザーがアプリを終了し、待機にうんざりして他の場所に移動したため、手遅れになりました。

Appleのガイドラインに従って最初に到達可能性を確認することにより、絶対にひどいユーザーエクスペリエンスが発生し、アプリがサーバーに接続できなかった可能性があります。

これはばかげているようです、確かに私は何かが欠けていますか?

レスポンシブアプリを提供しながら、Appleのガイドラインに従うにはどうすればよいですか?

私はReacabilityAPIでこれらの遅延を経験し、それを捨てたいと思っています-到達可能性がないと言われることがあるので、到達可能性があると言っているので、アプリに到達可能性に関係なく接続を試行してもらいたいAPIは言います。しかし、これを行うと、アプリが拒否される可能性がありますか?

このジレンマの解決策はありますか?

4

2 に答える 2

6

炎上戦争になるので、答えるのをためらっています。 回答-到達可能性は機能しません。バックグラウンドスレッドでどれだけ時間がかかるかは問題ではありません。

それに関するより大きな問題は、あなたが到達可能であるときに到達可能性がないと言っているのではなく、実際には到達できないときに到達可能であると言っているということです。それがポイントです。

Appleは、到達可能性を使用しないアプリを拒否していません。彼らは、3Gからwifiへのネットワークスイッチオーバーを処理できないアプリや、接続の喪失を適切に処理できないアプリを拒否しています。

到達可能性に関係なくタイムアウトと再試行を考慮して信頼できるバックエンドに適切にpingを実行せず、接続が失われたときにユーザーに通知しないアプリは拒否されます。

ネットワーク上でプラグを抜くとロックするアプリは拒否されます。

アップルは有用で明確なものにしようとしましたが、アップルが提供するコードは、アップルが使用するコードではなく、十分ではありません。

上記の拒否シナリオで機能させるためのアプリ開発者はあなたに任されています。

それでおしまい。したがって、Appleの到達可能性とsimplePingを忘れてください。

アプリを実行し、リクエストが発生したときにネットワークを強制終了します。ハングしますか?失敗。リクエストが発生していないときにネットワークをプルします(ただし、すぐに発生する可能性があります)。ユーザーに通知しますか?

これが、ネットワークの問題によるアプリの拒否全体です。

一度も機能したことがないものについて文句を言わないでください。私はこれをAppleの問題にしたいと思っていますが、それは私たちの問題であり、StackOverflowでそれを提供するには、コードに長時間取り組んでいました。

これを自問してください、私は信頼できるバックエンドにpingを実行していますか?

私はそれをスレッドでやっていますか?

そのスレッドのタイムアウトのタイミングを計っていますか?

過剰反応する前に再試行していますか?

簡単ですが、そうではありません。

于 2012-08-10T17:04:20.417 に答える
5

あなたは彼らの言葉でリンゴを少し取りすぎていると思います...

HIGが実際に表現しようとしているのは、接続が必要な場合でも、アプリは接続がないことを期待する必要があるということです。

したがって、接続がアクティブである必要があることをユーザーに適切に通知する必要があります。

私たちが通常行うことは、アプリに接続されているサービスに到達しようとするだけで、それが失敗した場合は、ユーザーに接続を有効にするように指示します。

ReachabilityAPIの使用は必須ではありません

于 2012-08-10T17:04:34.433 に答える