専門家、私は1日に3回(朝、午後、夕方)ユーザーに通知する必要があるシナリオを持っています。また、これらの通知のタイミングは、日付ごとのデータベース値に基づいて、毎日異なります。
これら3つの通知は構成可能です。意味するユーザーは、設定で朝の通知をオフにしながら、午後と夕方を設定することを選択するかもしれません。
私の理解によれば、私はローカル通知を使用してこれを達成できます。
私は次のことを実行できます。-アプリケーションが終了する前に、didFinishLaunchingWithOptions内で、次の通知が何であるかを確認できます(オン/オフ)。設定されている場合は、スケジュールします。そうでない場合は、次の通知タイプに進み、同じことを行います。すべての通知がオフになっている場合、当然、通知はスケジュールされません。
通知が表示されたら、「閉じる」と「表示」の2つのボタンでアラートを表示します。ユーザーが[表示]を選択した場合、アプリはアクティブに戻り、ユーザーが終了する前に次の通知がスケジュールされます。
ここまでは順調ですね。
ユーザーが「閉じる」を選択した場合はどうすればよいですか?アプリが起動せず、その結果、次の通知がスケジュールされません。
どうすればこれを達成できますか?これを行うより良い方法はありますか?
助けて!助けて!助けて!
すべての(または多くの)通知を一度にスケジュールするだけです。ユーザーがアプリをViewして次の通知をスケジュールするのを待つ必要はありません。
アプリケーションは、限られた数のスケジュールされた通知のみを持つことができます。システムは、最も早く発生した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
メソッドは、アプリケーションが閉じる直前ではなく、起動した直後に呼び出されます。つまり、いつでも新しい通知をスケジュールできます。
repeatInterval
プロパティを使用して、無期限に再スケジュールすることもできます。ただし、NSCalendarUnit
の単位に制限されます。詳細は docs を参照してください