質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

4872閲覧

ローカルプッシュ通知を受信する度にアプリケーションバッジ += 1させたい(Swift, iOS)

Dressing

総合スコア13

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2018/10/30 17:26

編集2018/11/02 22:45

初めて質問させていただきます。よろしくお願いいたします。

Xcode10.0/Swift4.2を使用しています。

▼目標
題名の通り、セットさせておいたローカルプッシュ通知を(アプリケーションがバックグラウンドの状態で)受信する度に、アプリケーションのバッジをインクリメントさせたいです。

▼状況
UserDedaultsへの保存や、通知セット時へのバッジ数の代入も考えましたが、良い方法が思い浮かびませんでした。そこで、AppDelegateで通知を受信した時にバッジナンバーに+1しようとしましたが、(UIApplication.shared.applicationIconBadgeNumber += 1)バックグラウンドで受信を検知できなかったため、ここで詰まっています。ローカルプッシュ 通知の場合は、通知の度に数を足していくことはできないのでしょうか?

▼コードなど
■バッジの許可は以下のコードで取得しています。
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in

■AppDelegateに以下のメソッドを追加してみましたが、受信時のメソッドはやはりこれらではないようでした。
(1)
func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {

(2)
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {

(3)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

▼その他
通知を受信した時が、フォアグラウンド の場合はバッジを表示させなくても大丈夫です。
アプリケーションが終了させられている場合は、おそらく処理できないと思うので、仕方ないと思っています。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

バッテリー節約の観点から、Appleはアプリをなるべくバックグラウンドで動作させたくないので、アプリをバックグラウンド動作させられるのは特定の用途に限られています。

ローカル通知は、一定時間後にアプリを動作させるためのものではなく、一定時間後にユーザーに通知メッセージを出すためのものなので、ローカル通知を仕掛けたからといってアプリはバックグラウンドで動作しません。(ユーザーが通知メッセージをタップして初めてアプリはスタンバイから復帰してフォアグラウンドで動作します。)

アプリがスタンバイまたは停止している状態でローカル通知を受けた時にバッジを更新したいのであれば、ローカル通知をセットする時にバッジの値を一緒にセットすればいいと思います。スタンバイ中に複数回通知する予定なのであれば、時間順にバッジの番号を1ずつ増やしたローカル通知を1個ずつセットしておけばいいと思います。

投稿2018/11/03 15:07

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dressing

2018/11/03 21:27

お知恵をお貸しいただきありがとうございます。 悩んでいたので助かりました。 バッジ番号には常に1が入るようにしてはいるので、そのままでいこうと思います。 AとBの通知をセットしたとして、Aは受信済の状態で、Bの受信をした時には、既にAはリストから消えている可能性があるためです。通知時間もまちまちにセットできるようにしているので、「とりあえず、通知があります」という意味で「1」を表示することにしようと思います。本当は「数字なし」が良いのですが、バッジが消えてしまうようなので、そこは諦めます。
TakeOne

2018/11/03 22:37

Aが通知されてからBが通知されるまでの間にアプリを起動したら、その時点でバッジ番号をクリアして、未通知で残っているローカル通知を一旦全てキャンセルし、新しいバッジ番号を付与したローカル通知Bをセットし直せばいいです。追加のローカル通知を仕掛けた時も同じようにしてずれた分のバッジ番号をセットし直せばいいです。
Dressing

2018/11/04 23:05

なるほど!通知受信時に+=1することばかり考えていて、その方法は思いつきませんでした。 その方法でチャレンジしてみようと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問