2011-06-29 55 views
5

Tôi đã tắt thông báo Đẩy từ ứng dụng cài đặt thiết bị của tôi (Bên trong biểu tượng ứng dụng của tôi trong cài đặt) và khi tôi gọi sau đoạn mã không có cuộc gọi đại biểu nào được gọi lại.Đăng ký Thông báo Đẩy

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound]; 

application:didRegisterForRemoteNotificationsWithDeviceToken: 
application:didFailToRegisterForRemoteNotificationsWithError: 

Có cách nào để biết trước khi đăng ký Push tất cả các loại thông báo đã được bật không? Trong ứng dụng của tôi, tôi đang tiến hành thêm sau khi tôi nhận được mã thông báo thiết bị trong cuộc gọi didRegisterForRemoteNotificationsWithDeviceToken. Bây giờ, nếu người dùng không chọn bất kỳ một trong số họ, tôi không thể tiến xa hơn vì vậy muốn cung cấp cho một con đường thay thế cũng có.

Trả lời

10

Bạn có thể sử dụng

UIRemoteNotificationType notificationTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 

Và sau đó kiểm tra mặt nạ bit trở để làm gì và không được kích hoạt

if (notificationTypes == UIRemoteNotificationTypeNone) { 
    // Do what ever you need to here when notifications are disabled 
} else if (notificationTypes == UIRemoteNotificationTypeBadge) { 
    // Badge only 
} else if (notificationTypes == UIRemoteNotificationTypeAlert) { 
    // Alert only 
} else if (notificationTypes == UIRemoteNotificationTypeSound) { 
    // Sound only 
} else if (notificationTypes == (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert)) { 
    // Badge & Alert 
} else if (notificationTypes == (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)) { 
    // Badge & Sound   
} else if (notificationTypes == (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)) { 
    // Alert & Sound 
} else if (notificationTypes == (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)) { 
    // Badge, Alert & Sound  
} 

Bạn có thể đọc thêm ở the docs here

+0

Cảm ơn. Điều này hoạt động nhưng nó không đọc riêng từng cờ. Nếu chỉ có một cờ được bật (Âm thanh/Cảnh báo/Huy hiệu), chúng tôi có thể đọc nó nhưng nếu có nhiều cờ được bật, chúng tôi không nhận được giá trị. Bất kỳ đầu mối làm thế nào để xử lý này. Tôi muốn đọc tất cả những lá cờ này một cách khác nhau. – Abhinav

+0

Khi giá trị trả lại là một mặt nạ bit, bạn sẽ cần kiểm tra mọi kết hợp có thể theo cách thủ công. Tôi đã cập nhật câu trả lời của mình ở trên để minh họa điều này. –

+1

câu trả lời bdmontz là đúng cách khi so sánh bit-mặt nạ. Ví dụ trên là phức tạp không cần thiết. – Emil

9

Tôi nhận ra điều này là nhận được khá cũ, nhưng có một cách tốt hơn để kiểm tra những bit được thiết lập trong một bitmask. Trước hết, nếu bạn chỉ muốn kiểm tra nếu ít nhất một bit được thiết lập, hãy kiểm tra xem toàn bộ bitmask có phải là số không.

if ([[UIApplication sharedApplication] enabledRemoteNotificationTypes] != 0) { 
    //at least one bit is set 
} 

Và nếu bạn muốn kiểm tra các bit cụ thể được đặt, logic và bất kỳ bit nào bạn muốn kiểm tra bằng bitmap.

UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 
if (enabledTypes & UIRemoteNotificationTypeBadge) { 
    //UIRemoteNotificationTypeBadge is set in the bitmask 
} 
+0

Nó mang lại cho tôi luôn luôn UIRemoteNotificationTypeNone trên iOS 7. Bất kỳ lý do? –

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