web-dev-qa-db-ja.com

次のシナリオでローカル通知をスケジュールするにはどうすればよいですか?

専門家、私は1日に3回(朝、午後、夕方)ユーザーに通知する必要があるシナリオを持っています。また、これらの通知のタイミングは、日付ごとのデータベース値に基づいて、毎日異なります。

これら3つの通知は構成可能です。意味するユーザーは、設定で朝の通知をオフにしながら、午後と夕方を設定することを選択するかもしれません。

私の理解によれば、私はローカル通知を使用してこれを達成できます。

私は次のことを実行できます。-アプリケーションが終了する前に、didFinishLaunchingWithOptions内で、次の通知が何であるかを確認できます(オン/オフ)。設定されている場合は、スケジュールします。そうでない場合は、次の通知タイプに進み、同じことを行います。すべての通知がオフになっている場合、当然、通知はスケジュールされません。

通知が表示されたら、「閉じる」と「表示」の2つのボタンでアラートを表示します。ユーザーが[表示]を選択した場合、アプリはアクティブに戻り、ユーザーが終了する前に次の通知がスケジュールされます。

ここまでは順調ですね。

ユーザーが「閉じる」を選択した場合はどうすればよいですか?アプリが起動せず、その結果、次の通知がスケジュールされません。

どうすればこれを達成できますか?これを行うより良い方法はありますか?

助けて!助けて!助けて!

27
Haris Farooqui

すべての(または多くの)通知を一度にスケジュールするだけです。ユーザーがアプリをViewして次の通知をスケジュールするのを待つ必要はありません。

ILocalNotificationのドキュメント から、

アプリケーションは、限られた数のスケジュールされた通知のみを持つことができます。システムは、最も早く発生した64個の通知を保持し(自動的に再スケジュールされた通知は単一の通知としてカウントされます)、残りは破棄します

したがって、1日に3つの通知がある場合は、3週間の通知を一度に事前にスケジュールできます。ユーザーが1か月間アプリを開かない場合でも問題が発生すると思いますが、そのシナリオについて心配する必要がありますか?

とにかく、これらの通知を1つずつスケジュールする必要がないことを明確にしたかっただけです。

例:

UILocalNotification* n1 = [[UILocalNotification alloc] init];
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60];
n1.alertBody = @"one";
UILocalNotification* n2 = [[UILocalNotification alloc] init];
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90];
n2.alertBody = @"two";
[[UIApplication sharedApplication] scheduleLocalNotification: n1];
[[UIApplication sharedApplication] scheduleLocalNotification: n2];

したがって、最初の通知が表示されたときにユーザーがCloseを選択した場合でも、2番目の通知は配信されます。

ちなみに、didFinishLaunchingWithOptionsメソッドは、アプリケーションが閉じる直前ではなく、起動した直後に呼び出されます。つまり、いつでも新しい通知をスケジュールできます。

41
Nate

repeatIntervalプロパティを使用して、無期限に再スケジュールすることもできます。ただし、NSCalendarUnitの単位に制限されます。詳細は docs を参照してください

3
Nick Yap