2012-06-22 32 views
38

Có thể tăng giá trị huy hiệu khi nhận được thông báo không. HOẶC Tôi có nên gửi số lượng dưới dạng tải trọng không?Tăng Huy hiệu thông báo Đẩy iPhone

Nếu tôi gửi giá trị huy hiệu là "1" mỗi lần, làm cách nào tôi có thể tăng giá trị huy hiệu trong biểu tượng của ứng dụng nếu ứng dụng không mở.

tôi đã sử dụng mã này nhưng không hoạt động.

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + 1; 
} 
+1

bạn chỉ có thể gửi số lượng mới như tải trọng, để đảm bảo số đếm chính xác sẽ hiển thị khi ứng dụng ở chế độ nền và tiền cảnh – janusbalatbat

Trả lời

50

Thông thường trong tất cả các ứng dụng đếm thông báo chưa đọc được duy trì trong các máy chủ. Khi máy chủ gửi thông báo đẩy tới mã thông báo thiết bị cụ thể, họ sẽ gửi số huy hiệu cùng với trọng tải. Sau khi thiết bị được thông báo và ứng dụng của bạn ở chế độ nền (hoặc đã chết), hệ điều hành sẽ tự động cập nhật số lượng huy hiệu cho biểu tượng ứng dụng của bạn. Trong trường hợp bạn có ứng dụng đang chạy hay không, bạn sẽ được thông báo trong số

application:didReceiveRemoteNotification: 

ủy quyền và do đó bạn có thể nhận được số huy hiệu từ (NSDictionary *) userInfo. Và do đó, bạn có thể cập nhật số lượng huy hiệu biểu tượng ứng dụng bằng cách sử dụng hàm

[UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue]; 

Hãy nghĩ điều này sẽ giúp bạn.

+6

Không phải chìa khóa để lấy số huy hiệu ra khỏi dict aps là @ "huy hiệu"? Xem: http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html # // apple_ref/doc/uid/TP40006786-CH3-SW16 – qix

+0

ứng dụng: didReceiveRemoteNotification: liệu phương thức này có được gọi ngay cả khi ứng dụng bị giết không? – jailani

+1

@Mathew Varghese, mỗi người dùng sẽ có các thông báo chưa đọc khác nhau, số lượng huy hiệu sẽ chính xác như thế nào bằng cách tiếp tục đếm trên phía máy chủ? – Subha

12

Nếu ứng dụng không mở, bạn sẽ không thể tăng huy hiệu ngoại trừ tải trọng.

+6

@Geek mã của bạn sẽ không được gọi ... Vì ứng dụng của bạn không chạy – Antzi

5

Khi thông báo đẩy đến khi ứng dụng của bạn ở chế độ nền & bạn muốn tăng số hiệu huy hiệu, bạn nên gửi badgeCount đến máy chủ, để máy chủ biết số hiện tại.

Nếu bạn quản lý số lượng huy hiệu từ phía máy chủ sau đó mã này là đủ: -

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    NSLog(@"remote notification: %@",[userInfo description]); 

    if (userInfo) { 
     NSLog(@"%@",userInfo); 

     if ([userInfo objectForKey:@"aps"]) { 
      if([[userInfo objectForKey:@"aps"] objectForKey:@"badgecount"]) { 
       [UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue]; 
      } 
     } 
    } 
} 
+0

Làm cách nào để tôi có thể gửi số lượng huy hiệu cho máy chủ? @ elppa –

+0

@ moosa, máy chủ gửi thông báo đẩy trong thiết bị của bạn khi máy chủ si de kbown mã thông báo thiết bị và máy chủ của bạn thay đổi số lượng huy hiệu thông qua id mã thông báo thiết bị của bạn, tôi nghĩ không cần phải gửi số lượng huy hiệu đến máy chủ – Deepesh

+0

Vì vậy, trong tải trọng nếu valur huy hiệu được gửi đi 1 luôn, nó sẽ tăng dần trong ứng dụng nếu nó không được mở? –

3

Airship đô thị hỗ trợ this sử dụng tính năng "autobadge" của họ.

+1

Mỗi liên kết, 'autobadge là một tính năng Airship đô thị để theo dõi số huy hiệu trong các máy chủ của chúng tôi', vì vậy trọng tải phải chỉ bao gồm số huy hiệu lớn hơn số lần đẩy trước đó. –

+1

Không. Đọc liên kết - bạn có thể gửi "+1" và Airship đô thị sẽ tăng nó cho bạn. –

+1

... Airship đô thị duy trì số lượng cho bạn trên * máy chủ của họ *, họ đặt số huy hiệu trong tải trọng cho bạn ... nó không chỉ là "+1" trong tải trọng (đó là số bất kỳ nên được đặt), đẩy thông báo không có bất kỳ khái niệm nào về số huy hiệu "+1", AFAIK. –

0

Sau khi nhận được thông báo từ xa khi bạn mở ứng dụng,

lấy số huy hiệu hiện tại trong "didBecomeActive" Phương pháp tập tin appdelegate bạn sử dụng mã dưới đây:

int badgeCount = [UIApplication sharedApplication].applicationIconBadgeNumber; 
    badgeCount = badgeCount + 1; 
Các vấn đề liên quan