2013-04-18 39 views
18

Tôi đang gặp phải sự cố với việc cập nhật giá trị số huy hiệu ứng dụng thông báo đẩy.Số huy hiệu biểu tượng ứng dụng không tăng: Xcode

tôi đang làm như:

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

     UIApplicationState state = [application applicationState]; 
     if (state == UIApplicationStateActive) { 
      // do stuff when app is active 

     }else{ 
      // do stuff when app is in background 
      [UIApplication sharedApplication].applicationIconBadgeNumber = 
      [UIApplication sharedApplication].applicationIconBadgeNumber+1; 
       /* to increment icon badge number */ 
     } 
} 

Nhưng, biểu tượng được hiển thị số huy hiệu là '1' luôn, và nó không được incrementing khi nhiều thông báo là có/một thông báo đưa ra sau khi khác.

Bất cứ lời khuyên là đáng ...

+0

Đáng tiếc là tôi không thể giúp đỡ với phù hiệu. Nhưng điều này chắc chắn không phải là một vấn đề liên quan đến xcode. Bạn chỉ cần sử dụng xcode để khóa mã của bạn, v.v. –

Trả lời

31

Số huy hiệu được thiết lập bởi hệ điều hành khi bạn nhận được một tải trọng thông báo JSON tương tự như sau:

{ 
    "aps" : { 
     "alert" : "New notification!", 
     "badge" : 2 
    } 
} 

Như bạn thấy, đó là máy chủ chịu trách nhiệm thiết lập các số chính xác trong badge Chìa khóa. Máy chủ của bạn cần theo dõi hoặc tính toán số lượng thông báo đang chờ xử lý cho từng người dùng và tạo số badge trước khi gửi thông báo tới Apple.

Trách nhiệm của khách hàng là xóa huy hiệu thông báo hoặc giảm bớt thông báo khi người dùng nhìn thấy thông báo. Các mã để làm như vậy là

application.applicationIconBadgeNumber = application.applicationIconBadgeNumber - 1; // Decrement counter 

hoặc

application.applicationIconBadgeNumber = 0; // Reset counter assuming the user is able to see all notifications at once. 
+1

Giá trị "huy hiệu" kết thúc của máy chủ phải là loại được truyền dưới dạng số nguyên. –

+2

+1 cho câu trả lời nhưng điều này không tốt ... iOS nên cập nhật từ số thông báo trong trung tâm thông báo ... –

+1

Bạn có thể sử dụng let cloudKitNotification = CKNotification (fromRemoteNotificationDictionary: userInfo as! [String: NSObject]) thay vì chiến đấu với phản hồi JSON. – DogCoffee

2

Các -(void)application:didReceiveRemoteNotification: sẽ chỉ được gọi khi ứng dụng của bạn đang chạy ở phía trước.

Nếu bạn muốn huy hiệu tăng lên khi ứng dụng của bạn không chạy, bạn nên đặt số huy hiệu trong push notification payload. Bạn nên ở đó để theo dõi phía máy chủ số huy hiệu, vì thuộc tính badge của tải trọng thông báo đẩy sẽ được sử dụng làm số hiệu huy hiệu. Nó sẽ không tăng số hiệu huy hiệu cho bạn.

Vì hệ thống xử lý thông báo đẩy đến, ứng dụng của bạn không được thông báo về các thông báo đẩy đã nhận cho ứng dụng của bạn. Chỉ khi bạn chạy ứng dụng ở nền trước, số -(void)application:didReceiveRemoteNotification: sẽ được gọi. Không có cách nào để giúp bạn ứng dụng để repsond để đẩy thông báo khi nó không ở phía trước.

4

tôi đã cùng một vấn đề và giải quyết nó bằng cách tạo int. biến trong class.h

như thế này:

một tùy chỉnh class.H

@property int badge; 

một tùy chỉnh class.M

-(id)init{ 

_badge=0; 

self = [super init]; 
if (self) { 

} 
return self;} 

-(void)reminderCreator:(NSDate*)onTime withText:(NSString*)text{ 

_badge += 1; 

UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.fireDate = onTime; 
localNotification.alertBody = text; 
localNotification.soundName=UILocalNotificationDefaultSoundName; 

localNotification.applicationIconBadgeNumber=_badge; 

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; } 

vì vậy nếu bạn khởi tạo lớp tùy chỉnh này, một nơi nào đó (có thể tại viewController của bạn) và sau đó gọi phương thức remindCreator nhiều lần để thiết lập vài localNotifications, nó sẽ gán số tăng lên cho mỗi thông báo.

1 nếu điều này giúp :)

+0

cảm ơn bài đăng, nhưng tôi là thông báo đẩy chứ không phải là địa phương. –

6

bạn có thể tạo một biến tĩnh thay vào đó, và gán nó vào applicationIconBadgeNumber:

static int i=1; 
[UIApplication sharedApplication].applicationIconBadgeNumber = i++; 
+0

Tính năng này hoạt động - chỉ cần thêm nó vào phương thức didReceiveRemoteNotification của bạn – Ronaldoh1

Các vấn đề liên quan