2012-05-01 25 views
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 
} 

但沒有......

你能幫助我嗎?

回答

2

你應該更好地定義你想要做什麼,因爲我不清楚你是否在談論遠程或本地通知,或者你想得到什麼以及你得到什麼。

無論如何,關於遠程通知(APNS),考慮到您應該將徽章設置爲有效負載的一部分,如果您希望在關閉應用程序時設置徽章。除非用戶手動打開應用程序(從NotificationCenter或Dock中),否則不會調用您的應用程序。

在另一方面,當你正在運行的應用程序,您將收到呼叫

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

在AppDelegate中,然後可以使用

application.applicationIconBadgeNumber = badge; 
+0

我想知道錯誤的位置有效負載生成一個通知給我但徽章不會改變必須手動更改嗎?到應用程序關閉,這是我的問題。關閉時,消息到達,但徽章保持不變。 – user1319267

+0

我解決了它。APNs當它被髮運的徽章數沒有被鑄造爲int。現在一切正常。 – user1319267

0

看看這個,也許這是一個設置問題!: application Icon Badge Number in ios5

嘗試也給applicationIconBadgeNumber一個int值,而不是NSInteger的。

+0

設置是否正確:( – user1319267

+0

在服務器上結束標誌應該是Integer的類型 –

6

的設置徽章徽章圖標號由作爲推送消息接收的有效載荷中的徽章屬性進行管理。該應用程序本身沒有扮演什麼角色,直到應用程序變爲活動狀態。將'badge'屬性設置爲任何整數值(注意:它不應該是字符串,不應該包含在「」中)。接收到通知的操作系統查找「徽章」的值,並立即將其設置在應用徽章圖標上。所有這些都發生在應用程序不活動時。爲了確保它基於應用程序中發生的事情增加或減少,應用程序應該使用更新的徽章號碼向服務器發送消息。

在激活狀態下,應用程序有責任處理遠程通知並更改徽章圖標。

注意:'badge'屬性包含在有效載荷內收到的'aps'字典中。我的有效負載看起來像: aps = { alert =「推送通知!」; badge = 9; sound = default; }

0

OK。現在我的報道關於奇怪的事情。 我明白了!它現在很好用。

問題是: 我創建我的應用程序與推送通知一切正常與簡單整數(1,8,99),但後來我注意到我的整數35。06中的PHP變量$ price根本不能識別它,即使是(int)$ price也不成功。我認爲這個數字太長了(但實際上4位數字非常受歡迎)。我決定使用

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

但正如它提到的,它不起作用,當應用程序沒有啓動。沒有機會。它永遠不會更新徽章。我花了很多時間思考可能會出現什麼問題,並突然想到了一些事情。

在有效載荷我只是做這個

'badge' => $price*100 

的過程中它的工作對我好=) 我不知道是什麼問題,爲什麼沒有工作(INT)$價格

(它實際上是整數),但現在可以。 現在我的徽章顯示這樣的事情3.506,當然你可以移動的步點,你有你35.06

希望它可以幫助你。

相關問題