1

開発中のアプリケーションのバッジを変更しようとしています。閉じたとき、残念ながら、バッジを変更せずにメッセージが通知されただけでした。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];

NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];

NSInteger badge = [[apsInfo objectForKey:@"badge"] integerValue];
if( [apsInfo objectForKey:@"alert"] != NULL)
{
    application.applicationIconBadgeNumber = badge;
}

しかし、それは何も変わりません。私は周りに解決策を見つけていません。プッシュ通知の到着時にどのメソッドが呼び出され、アプリケーションが閉じられますか?私も追加しました:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

#if !TARGET_IPHONE_SIMULATOR

NSLog(@"remote notification: %@",[userInfo description]);
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];

NSString *alert = [apsInfo objectForKey:@"alert"];
NSLog(@"Received Push Alert: %@", alert);

NSString *badge = [apsInfo objectForKey:@"badge"];
NSLog(@"Received Push Badge: %@", badge);
application.applicationIconBadgeNumber = [[apsInfo objectForKey:@"badge"] integerValue];

#endif
}

しかし、何も...

手伝って頂けますか?

4

4 に答える 4

6

バッジアイコン番号は、プッシュメッセージとして受信したペイロードのバッジプロパティによって管理されます。アプリ自体は、アプリがアクティブになるまで表示される数に関与する役割はありません。'badge'プロパティを任意の整数値に設定すると(注:文字列であってはならず、 ""で囲まれてはなりません)、必要な処理が実行されます。通知を受信したOSは、「バッジ」の値を探し、すぐにアプリのバッジアイコンに設定します。これはすべて、アプリがアクティブでないときに発生します。アプリで何が起こったかに基づいて確実にインクリメントまたはデクリメントするために、アプリは更新されたバッジ番号を使用してサーバーにメッセージを送信する必要があります。

アクティブ状態では、リモート通知を処理し、バッジアイコンを変更するのはアプリの責任です。

:「バッジ」プロパティは、ペイロード内で受信した「aps」ディクショナリに含まれています。私のペイロードは次のようになります:aps = {alert = "プッシュ通知!"; バッジ=9; サウンド=デフォルト; }

于 2012-12-30T12:14:41.620 に答える
2

リモート通知とローカル通知のどちらについて話しているのか、正確に何を取得したいのか、何を取得しているのかが明確ではないため、何をしたいのかをより適切に定義する必要があります。

とにかく、リモート通知(APNS)に関しては、アプリを閉じた状態でバッジを設定する場合は、ペイロードの一部としてバッジを設定する必要があることを考慮に入れてください。ユーザーが(NotificationCenterまたはドックから)手動でアプリを開かない限り、アプリは呼び出されません。

一方、アプリを実行している場合は、

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

AppDelegateで、を使用してバッジを設定できます

application.applicationIconBadgeNumber = badge;
于 2012-05-01T16:09:09.930 に答える
0

これを見てください、多分それは設定の問題です!: ios5のアプリケーションアイコンバッジ番号

また、applicationIconBadgeNumberにNSIntegerではなくint値を指定してみてください。

于 2012-05-01T14:45:41.030 に答える
0

わかった。今、奇妙なことについての私の報告。わかった!今のところうまくいきます。

問題は次のとおりです。プッシュ通知を使用してアプリを作成しましたが、単純な整数(1,8,99)ですべて問題ありませんでしたが、PHP変数$ priceの整数35.06が、 (int)$priceが失敗してもまったく認識しなかったことに気付きました。 。数字が長すぎると思いました(でも実際は4桁が大人気です)。使うことにしました

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

しかし、前述のように、アプリを起動しないとまったく機能しません。チャンスは無い。バッジが更新されることはありません。何が悪いのかを考えるのに多くの時間を費やしましたが、突然何かが頭に浮かびました。

ペイロードで私はちょうどこれをしました

'badge' => $price*100

もちろん、それは私にとってはうまくいきました=)何が問題なのかわかりません、なぜ(int)$ price(実際には整数です)が機能しませんでしたが、今は問題ありません。私のバッジには、この3.506のようなものが表示されます。もちろん、ステップでドットを移動すると、35.06になります。

それがあなたを助けることができることを願っています。

于 2015-02-17T13:33:39.083 に答える