私は、アプリケーションの実行時にHTTP POSTリクエストを使用して診断データをリモートサーバーに送信するアプリケーションで作業します。現在、私たちはアプリ内の別のスレッドから送信されるメッセージをキューに入れます(キューには独自のプラットフォームに依存しないコードを使用し、送信するにはcurl
を使用します)。アプリが終了してもiOSで非同期HTTP POSTリクエストを送信する
私が解決しようとしている問題は、診断ポストがキューに入れられているときと実際に他のアプリケーションで送信されているときの間でアプリがクラッシュする(またはクラッシュは主な懸念事項ですが他の方法で終了します)スレッドは情報が実際に送信されることはありません。クラッシュレポートの作成にクラッシュ・リキチャを使用していることに注意してください。この診断情報はその上にあります(主に、アプリケーションの状態、回復可能なエラーの検出などに関する情報)。
私は、この処理するための方法についてのカップルのアイデアを持っていた:
1 - 他のプラットフォームでは、私はこれらの要求を送信して処理する新しいプロセスを起動しますが、どのような情報私はあなたがしているように見える見つけたかもしれませんiOSでこれを行うことは許可されていません。
2 - これらのリクエストをディスクにキューイングして、私たちがすぐに送信できない場合に私たちのアプリが起動したときにそれらを送信することもできます。しかし、これは、ユーザーが私たちのアプリをもう一度起動するまで待つ必要があります(私たちがこの診断情報を使用している部分は、新しいユーザーが持っているデバッグの問題の一部です)。新しいユーザーがクラッシュした場合、もう一度開きます)。
これを可能にするメカニズムはありますか?
現在、私たちはcurl
を使用してこれらのリクエストを送信していますが、これを提供する場合はiOS固有のAPIに切り替えることができます。私はNSURLConnection::sendAsynchronousRequest
を見つけましたが、これはまだすべてが私のアプリケーション内で起こるようです(同じ問題があると思います)。
アプリが終了した場合は、通常、ユーザーがアプリを再起動するまで終了します。終了したアプリを再起動できるVoIPプッシュなどの特定のバックグラウンドケースがあります。あなたの最善の策はオプション2で、ユーザーがあなたのアプリを再起動したときにデータを送信します。アプリがクラッシュすると、アプリで何かをしようとするとすぐに再起動する可能性があります。 – Paulw11