web-dev-qa-db-ja.com

Swiftでバッジカウンターを更新

次のコードを使用すると、アプリのコンパイル直後にバッジアイコンに(2)が表示されます。

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = 2
    installation.saveInBackground()
}

私は次のバリアントを試しました:新しいvar badgeCount = 0 以降:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    badgeCount++
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = badgeCount
    installation.saveInBackground()
}

しかし、新しい通知を受け取っても、+ 1に更新されません。誰でもそれを修正する方法を知っていますか?

15
Orkhan Alizade

アプリが実際に開いていない限り、この方法でバッジ番号は更新されません。通知の受信時にバッジ番号を更新する場合は、json Push通知のBadgeプロパティを目的の番号に設定する必要があります。

(jsonを使用しない)通常のメッセージを送信している場合、バッジ番号を増やすトグルがあります。 Jsonを使用している場合、これを使用します。

{
    "aps": {
        "alert": "Test Push Notification",
        "sound": "yourSound.aiff",
        "Badge": "desiredNumber"
    }
}

サーバーからこれを送信したくない場合は、Parseのクライアントプッシュを使用して1つのデバイスから別のデバイスに送信し、Parse.comのアプリの設定に移動して「クライアントプッシュ」を有効にできます。次に、上記のJsonを別のユーザーのデバイスに送信します。

15
Swinny89

コードがコンパイルされるたびに、以前にアプリに保存されていたバッジアイコンが表示されます。アプリでバッジアイコンを0に設定しない場合、コンパイルするかバックグラウンド状態になるたびにバッジアイコン番号がアプリに表示されます。

あなたの問題のために、バッジアイコンを

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount

また、タスクの完了時にバッジアイコンを0に設定すると、アプリにバッジアイコンが表示されます

UIApplication.sharedApplication().applicationIconBadgeNumber = 0
16
Rizwan Shaikh

同様のシナリオに取り組み、バッジ番号を増やしてリセットする最終的な解決策を見つけました。

増分バッジ番号

  1. バッジ番号のカウントを常にメモリに保存します(NSUserDefaults
  2. 通知を設定する必要があるたびに、現在のバッジ番号の増分を取得し、その番号を_.applicationIconBadgeNumber_に設定し、メモリ内のカウントを更新します。

バッジ番号をリセット

  1. 私の場合、アプリケーションを開いたら、すべてのバッジカウントをリセットする必要があります。 didFinishLaunchingWithOptionsAppDelegateUIApplication.sharedApplication().applicationIconBadgeNumber = 0を設定しました。また、メモリ内のカウントをリセットします。
5
Rahul Krishna

これらの回答はいずれももはや有効ではありません。

AppDelegateではなく、Pushコードを確認する必要があります

Parseドキュメントから:

badge: (iOS/OS X only)
the value indicated in the top right corner of the app icon. 
This can be set to a value or to Increment in order to increment the current value by 1.
0
Eric Johnson