3

UILocalNotifications を使用して定期的にチェックインするようにユーザーに通知する必要がある iPhone アプリに取り組んでいます。彼らが数時間チェックインしないと、数回通知されるかもしれませんが、最新の通知を表示したいだけです.

これで、アプリが開いている場合、didReceiveLocalNotification:(UILocalNotification *)notification へのコールバックを受け取り、通知が表示されているかどうかを追跡できます。

アプリが実行されていないときにユーザーが -action- ボタンをクリックすると、コールバックが返されます

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

だから私は古い通知を閉じることができます。ただし、「キャンセル」をクリックすると、一連の階層化された通知で「キャンセル」をクリックする必要があります。これは、私が知る限り、コールバックを取得できないためです (アプリが起動されていない場合、どうすればよいでしょうか)。 UILocalNotification を作成するときに、アプリからの新しいリマインダーが自動的に他のリマインダーを破棄するようにするフラグや何かがあるようには見えません。

アプリがバックグラウンドで実行されている場合は、さらに悪いことです。まず、ユーザーがキャンセルをクリックしてもコールバックがまったく得られないため、同じ問題が発生します。ユーザーは何度もキャンセルをクリックする必要があります。次に、ユーザーがアクションをクリックすると、ApplicationDidBecomeActive への呼び出しを受け取りますが、それと、ユーザーが単に切り替えたときとを区別することはできません。ここでそれらを却下して再スケジュールできますが、完全に機能していないようです。却下される前にいくつかのポップアップが表示されることがあります.

助言がありますか?通知が自動的に期限切れになる方法があれば、それも素晴らしいでしょう. 私はオンラインで少し調べましたが、あまり助けが見つかりませんでしたが、大きな見落としのように見えるので、これを適切に処理する方法があることを願っています.

ありがとう。

4

2 に答える 2

1

あなたが指摘したように、ユーザーが「キャンセル」すると、コールバックを取得できなくなります。

あなたのケースで一度だけユーザーに思い出させることは可能ですか? 一度に 1 つの通知のみをスケジュールし、アプリの起動/再開時に更新します。

于 2011-04-08T04:12:46.547 に答える
0

私はまだ次のことを試していませんが、これはあなたのケースの回避策になると思います. CLLocationManagerを使用startMonitoringSignificantLocationChanges

デバイスの場所が大幅に変更されるたびに、オプションが渡されてアプリがバックグラウンドで起動され、そこからlocationManager:didUpdateLocations:スケジュールを設定できる可能性があります。UILocalNotification

于 2012-10-10T05:21:45.957 に答える