2012-09-05 14 views
5

通知を受け取るためにAPNSサービスに登録するiOS 5.1アプリケーションがあります。登録が成功し、通知が正しく受信されます。この問題は、通知を処理しようとするときに発生します。 iOSで未読プッシュ通知を処理するにはどうすればよいですか?

は、アプリケーションが実行されると、AppDelegateのメソッド didReceiveRemoteNotificationが正しく呼び出され、意図したように通知が処理されます。ただし、これは、アプリケーションがフォアグラウンドで実行されている場合にのみ発生します。

メソッドが呼び出されていないこと、しかし、ときに、アプリケーションがバックグラウンドで実行されているか、単に停止しています。私はuserInfo辞書から通知を取得し、それを処理するメソッドdidFinishLaunchingWithOptionsメソッドにいくつかの行を追加する必要があることを読んだことがあります。これはうまくいきますが、通知センターで通知をクリックしてアプリケーションを開いた場合にのみ有効です。つまり、バッジをクリックしてアプリケーションを開くと、バックグラウンドで実行していた場合はコンテキストを変更するだけで、アプリは通知が届いたことを認識しません。さらに、複数の通知が届いた場合、通知センターで、保留中の通知を読むためにどのような方法があります

:-)痛みで通知センター、をクリックして、一度それらの1つだけを扱いますか?私はメソッドcancelAllLocalNotificationsを使用してそれらをフラッシュする方法があることを知っていますが、私はちょうどそれらを読む方法を見つけていません。そして、私は本当にそれらのすべてを扱う必要があります。アプリケーションがフォアグラウンドになったときに、情報を再度取得するためにサードパーティーの通知サーバーと通信プロトコルを実装することを考えましたが、情報がオペレーティングシステムに既に存在するため、何とかアクセスできないと奇妙に感じます。

だから誰もそれを行う方法を知っていますか?前もって感謝します。

答えて

3

プッシュ通知が到着すると、ユーザーが「キャンセル」をクリック、あなたのアプリが再びそのプッシュ通知を読むための方法はありません。このデバイスに送信される通知のリストを取得するには、別の機能(おそらくサーバー側で)を実装する必要があります。チャット機能をアプリで提供されていて、プッシュ通知を経由してチャットメッセージを送信する場合

たとえば、あなたはまた、サーバー上にチャットメッセージを維持する必要があります。ユーザーがプッシュ通知で「キャンセル」をクリックすると、そのチャットメッセージはiOSデバイスに表示されません。その場合、アプリケーションがフォアグラウンドで後で受信されると、サーバーへの呼び出しが行われ、過去のすべてのチャットメッセージがプッシュ通知によってフェッチされます。

+0

プッシュ通知が到着することが保証されていないことは確かです。おそらく、私はそれが私が望むすべての情報が含まれていることを確かめることができないので、notifiactionサービスからそれらを読むことを試みる時間を無駄にしています。とにかく、解決策を破棄する前に、そうする方法があるかどうかを知る必要があります。 – Bartserk

+0

あなたは正しいです。私が知る限り、サーバーサイドからフェッチする以外の方法はありません。 –

1

[OK]を、ので、可能な解決策は、「読み取り」フラグとメッセージIDフィールドでメッセージを持つ別のデータベーステーブルを持っているだろうか?デフォルトでは、読み取りフラグがNOで、アプリがこれを読み込んで表示すると、フラグはYESに更新されますか?

再生には256バイトしか必要ありませんが、どのような種類のIDフィールド長が必要ですか?

編集、

このプランが実行され、正常に動作しています。

+0

これは良い解決策です:)また、そのメッセージを「ユーザー」テーブルに関連付けることもできます。この方法で、ユーザーが持つ未読メッセージの数を確認するための集計値を作成できます。そして、その価値を使って、弾丸を安全に更新することができました。私はこの質問を書いた当時の主な関心事でした。 idに関しては、莫大な量の情報を扱っていない限り、良いoldeの32ビットの数値で十分であるはずです:) – Bartserk

+0

メッセージを比較する手段として、アプリトークンとメッセージIDを使用しています。短いIDだけを使用し、トークンは衝突を止めるのに十分でなければなりません。 –

+0

私は、アプリケーションのトークンをidとして使用することは、ドキュメントではお勧めできません。それは多かれ少なかれ動作しますが、アプリトークンはiOSのように変動します。たとえば、OSのアップデートや工場出荷時のリセットなどで変更される可能性があります。他の種類のデバイス関連のIDを生成することを検討する必要があります。 – Bartserk

関連する問題