2011-09-29 30 views
7

AppDelegateで推奨されるすべてのメソッドを実装して、リモート通知サービスを有効にしました。バックグラウンドでのAPNSリモート通知の処理

起動中と電源をオフにしている間は、実行中にそれらを受け入れることができます。

しかし、バックグラウンドで多くの受信通知を処理できないため、問題があります。私は最新の通知でのみ働くことができます。

これを行うには、どのようなマニュアルをお勧めしますか?バックグラウンドですべての通知を受け取るにはどうすればよいですか?私のサービスプロバイダ(apnsデータの送信者)への手動呼び出しを介してのみ解決できますか?

+1

本当にAPNSを正しく実装している場合、アプリは決して通知を「処理」しません。 iOSはすべての通知を受け取り、ユーザーはそれらの通知を使用してアプリを開くことができます。それでおしまい。 –

+1

通知システムは、サーバーとデバイス間で重要なデータを送信するために使用するためのものではありません。それは単にデバイスに衝突してサーバに接続し、実際に何が起こっているのかを知ることを意味しています。このプッシュ通知に適していないことを除いて、重要なことをするのに十分な信頼性もありません。サーバーの負荷が問題になる場合は、アプリの価格を上げるか、それをカバーするものを増やしてください。あなたのアプリが良ければ、ユーザーは喜んで支払うでしょう。 –

答えて

6

私がここで作業したすべてのプロジェクトでは、プッシュ通知が却下された場合にこの情報をローカルに保存する方法はありませんでした。これらのすべてのケースでは、アプリケーションが接続するサーバ上の小さなファイルを使用して、再びアクティブになったときにプルします。また、アプリには、迅速な検索のためにサーバに保存されていたすべての通知を見ることができる場所もありました。

プッシュ通知が設定されていることを理解する方法で、通知が破棄されると、システムはそれを破棄します。バッジ番号を更新して正しい音を鳴らすなど、何かを行うことになりますが、その通知に固有の追加情報は失われます。

+0

回答ありがとうございます。私が不思議に思うのは、アプリケーションがフォアグラウンドにあるとき、プッシュ通知がAppDelegateに正しく配信されるということです。しかし、私はバックグラウンドで長いタスクを実行しているときに、私もこれらの通知を受け取りたいと思います。あなたはそれが可能だと思いますか? –

+0

私はそれが可能ではないと思います。私が仕事をしてきたことのすべてから、いつも '逃した'通知を得るためにサーバーに行く必要がありました。アプリがバックグラウンドになっている間に通知が却下された場合、変更する唯一のものはバッジ番号でした。 –

3

これが役立つかどうかはわかりませんが、バックグラウンドにいたときにいくつの通知が欠落しているかだけを知りたい場合は、通知番号を含む変数を作成し、通知を処理するたびにアプリに格納することができます。あなたがバックグラウンドから出て、新しい通知を受け取ると、保存されている番号で新しい番号を減算して、届かなかった通知の数を調べることができます。私は、アプリがバックグラウンドの間に受け取ったすべての通知デバイスに関連する完全なデータをiOSが提供できる方法はないと思います。

+0

良い提案ですが、ローカルに保存する方法を探しています。クライアントトークンIDの通知IDの後に通知を受け取るために自分の状況でサーバが重いので... –

+0

プッシュでローカルに受信した情報を保存しますかアプリがバックグラウンドにあるとき? – Nilesh

+0

@Nileshええ、私のアプリはバックグラウンドで長いタスクを実行している間、受信通知を保存したいと思います。 –

3

最高の解決策は、送信された通知のリストをサーバー上の関連するすべてのデータとともに保持することです。これにより、アプリケーションは起動時にそのデータにアクセスできます。複数の通知をサーバに保存されていないデータで送信すると、アプリケーションがというアプリからアプリを開いたときに通知を受信するだけなので、リスクが高くなる可能性があるため、1つの通知をタップすると、 1。

あなたのサーバーのリストにすべてがある場合、アプリケーションは単純にそのリストをプルダウンして処理して、データが失われていないことを確認します。