14

Tôi cần phải luôn biết tùy chọn nào người dùng chọn trên cài đặt thông báo đẩy.
(Các tùy chọn là - cảnh báo, âm thanh và phù hiệu)Mục tiêu c - Phát hiện khi người dùng thay đổi cài đặt thông báo của ứng dụng

Vì vậy, khi ra mắt ứng dụng của tôi, tôi gọi:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 

và phát hiện những gì người dùng đã chọn.

Nhưng làm cách nào tôi có thể phát hiện liệu người dùng có thay đổi cài đặt sau trong suốt thời gian sử dụng của ứng dụng không?
Có một số phương thức đại biểu được gọi khi có thay đổi xảy ra với cài đặt này không?

Trả lời

22

Không có đại biểu. Bạn cần truy vấn thuộc tính UIApplicationenabledRemoteNotificationTypes định kỳ, ví dụ: applicationDidBecomeActive:.

Để biết chi tiết kiểm tra các câu trả lời:

Determine on iPhone if user has enabled push notifications

View In Lock Screen and enabledRemoteNotificationTypes - iOS5

Edit:
Nếu bạn cần phải thiết lập lại các cài đặt thông báo push và cảnh báo cho phép, có một cái nhìn tại Apple technical note TN2265 . Trong phần "Đặt lại thông báo cấp quyền thông báo đẩy trên iOS" chúng giải thích cách đặt lại cài đặt trên iOS. Tuy nhiên, nhiều nhà phát triển phàn nàn rằng quy trình không hoạt động. Không chắc chắn nếu this link sẽ hoạt động, bạn sẽ cần phải có quyền truy cập vào diễn đàn Apple, nhưng nó là một trong những chủ đề về vấn đề chính xác này.

Tôi tự hỏi liệu Apple có thể xóa hộp thoại cấp phép trong iOS 5.1 hay không. Nếu không, tại sao họ yêu cầu ứng dụng hiển thị cảnh báo? Theo AppStore review guidelines:

5.3 Apps sở hữu gửi thông báo đẩy mà không được sử dụng đồng ý sẽ bị từ chối

Ví dụ đường dẫn (ứng dụng) yêu cầu người dùng chọn sử dụng để thông báo push ở giữa của hát-up quá trình, không phải khi ứng dụng bắt đầu lần đầu tiên.

Bạn không chắc chắn mục đích của lời nhắc là gì vì ứng dụng không thể truy vấn trạng thái của cài đặt thông báo. Đặc biệt, ứng dụng có thể kiểm tra loại thông báo nào (sử dụng enabledRemoteNotificationTypes) được bật nhưng KHÔNG nếu thông báo đẩy cho một ứng dụng cụ thể được bật hoặc tắt (nút bật/tắt Trung tâm thông báo ở trên cùng). Ít nhất đó là hành vi trong iOS 5.1. Ngay cả khi người dùng vô hiệu hóa thông báo cho ứng dụng đó, ứng dụng vẫn có thể đăng ký các thông báo đẩy (sử dụng registerForRemoteNotificationTypes) và S receive nhận được mã thông báo APNS.

+0

cảm ơn :) bạn có biết tôi nên làm gì để có được hộp "pop cho phép ứng dụng này" mà người dùng nhận được khi lần đầu khởi chạy ứng dụng? Tôi cần nó để gỡ lỗi các kịch bản khác nhau, tôi đã cố gắng xóa ứng dụng và cài đặt lại nhưng không có hộp bật lên ... – Eyal

+0

Tôi đã chỉnh sửa câu trả lời để bao gồm một số liên kết hữu ích. Tuy nhiên nhiều nhà phát triển phàn nàn rằng các thủ tục như được vạch ra bởi Apple không hoạt động. Tôi chưa bao giờ thấy hộp thoại cho phép khi phát triển ứng dụng của mình vì vậy tôi thậm chí không biết nó tồn tại cho đến khi đọc một số bài đăng từ các nhà phát triển khác. – Amiramix

+0

Phần cuối không đúng, ít nhất là trên iOS 7, enabledRemoteNotificationTypes chỉ dành cho ứng dụng của bạn và nếu người dùng đặt thông báo là không, bạn sẽ không nhận được mã thông báo APN. – jcesarmobile

6

Kiểm tra xem ứng dụng của bạn có hoạt động không chỉ khi khởi chạy.

0

Đây là ví dụ khi Push được triển khai thông qua UrbanAirship. Mỗi khi người dùng chọn tham gia/không tham gia để đẩy sau đám cháy ủy nhiệm và với phương pháp dưới đây, bạn có thể kiểm tra (CÓ/KHÔNG).

Cùng có thể đạt được với đại biểu UIApplication nếu không sử dụng UrbanAirship.

- (void)registrationSucceededForChannelID:(NSString)channelID deviceToken:(NSString)deviceToken 
    { 
     NSLog(@"registrationSucceededForChannelID : %@",[self appRegisterForPushNotification][email protected]"YES":@"NO"); 
    } 


    - (BOOL)appRegisterForPushNotification { 
     if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) { 
      UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; 
      return ((types & UIUserNotificationTypeAlert) || (types & UIUserNotificationTypeSound)); 
     } 
     return NO; 
    } 
Các vấn đề liên quan