web-dev-qa-db-ja.com

プッシュ通知バッジの自動インクリメント

私は自分のアプリケーションにPushサービスを実装しており、アプリケーションのバッジについて考えています。私のアプリはメールアプリ(ちょっと)であり、受信トレイに追加された新しいメッセージについてプッシュを介してユーザーに通知したいのですが、バッジ=受信トレイ内の新しいメッセージの数が欲しいです。

サーバーサイド(プロバイダー)で新しいメッセージをチェックし、番号をバッジとして送信することを考えました。

問題は、サーバー側でバッジ値を計算し、その後それをプッシュペイロードの一部としてAPSNに送信することなく、アプリケーションのバッジを自動インクリメントする方法はありますか?

たぶん、JSONバッジフィールドで「++」などの変数を送信する方法があるかもしれません。そのためのハックはありますか?または、サーバー側のカウントシステムを使用する必要がありますか?

25
natanavra

いいえ、サーバー側でこれを追跡する必要があります。バッジの値を含めない場合、バッジは完全に削除されます。

もちろん、これはユーザーが通知を受信し、アプリが実行されていない、またはアプリを起動しないことを選択した場合にのみです。ユーザーがアプリを起動するか、すでに実行している場合、増分に関しては何でもできます。

2014年3月更新:可能な更新についてのコメントを参照してください。私は数年間プッシュを行っていないので、これを自分で確認することができませんでした。

29
bpapa

ある程度は可能ですが、トレードオフがあります。

未読の合計は、常に、Pushペイロードの一部としてアドオンJSON値として送信できます(Pushは、明示的に理解していないキーを無視します)。ユーザーがアプリを開いたら、値を読み取り、UIApplicationのapplicationIconBadgeNumberプロパティを介してプログラムでバッジを手動で調整します。

そのようにすることの問題は、ユーザーがアプリを開かなくても(つまり、ユーザーが通知を受け取り、ユーザーが[表示]ではなく[キャンセル]をクリックした場合でも、Pushがバッジの値を調整することです。これらの場合、バッジは変更されませんが、アプリが実行されると(「表示」をクリックした場合)、アプリは正しく設定できます。

1
Ramin

サーバー側で維持されるプッシュバッジカウントの自動インクリメントを提供するApp42バックエンドサービスを試すことができます。詳細は blog のリンクをたどってください。これがブログ投稿の内容です:

App42プッシュ通知の自動インクリメンタルバッジ数によって達成できるいくつかの使用例を以下に示します。

プッシュバッジを1ずつ自動インクリメントするには、以下に示すようにプッシュメッセージを送信する必要があります。

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService (); // Initializing PushNotification Service.
string userName = "UserName";
string message= "{'badge':'increment'}";
pushNotificationService.SendPushMessageToUser(userName,message, new UnityCallBack())

N.B:説明されているサンプルはUnity/C#用ですが、同じプロセスを他のプロセスにも適用できます。

バッジに任意の数を指定する場合、またはバッジの数を0に減らす場合は、このメソッドを使用して、ユーザーが通知をクリックしたときに数を更新できます。この場合、updatePushBadgeforDeviceまたはupdatePushBadgeforUserを呼び出す必要があります。

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService (); // Initializing PushNotification Service.
string userName = "UserName";
string deviceToken = "DeviceToken";
int badges = 10; // For clear count make it 0 
pushNotificationService.UpdatePushBadgeforDevice(userName, deviceToken, badges,  new UnityCallBack());

PushNotificationService pushNotificationService = App42API.BuildPushNotificationService (); // Initializing PushNotification Service.
string userName = "UserName";
int badges = 10; // For clear count make it 0
pushNotificationService.UpdatePushBadgeforUser(userName, badges,  new UnityCallBack());

updatePushBadgeforDevice –このメソッドは、ユーザーが登録した特定のデバイスのプッシュバッジ数を更新するために使用されます。

updatePushBadgeforUser –このメソッドは、ユーザーが調達するすべてのデバイスのプッシュバッジ数を更新するために使用されます。この場合、ユーザーは自分の名前で登録された複数のデバイスを持っていると想定しています。

1
user3663334