2013-06-07 48 views
8

Khi bạn cài đặt ứng dụng lần đầu tiên và muốn đăng ký thông báo Đẩy, ứng dụng sẽ hỏi bạn có muốn nhận thông báo hay không. Điều này đang được lưu vĩnh viễn trong cài đặt, ngay cả sau khi xóa ứng dụng.Nhận mã thông báo thiết bị cho thông báo đẩy sau khi ứng dụng bị xóa

Về cơ bản, để tiết kiệm token chúng tôi đang làm điều này:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *token = [[[deviceToken description] 
      stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
      stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    [[NSUserDefaults standardUserDefaults] setValue:token forKey:kDeviceTokenKey]; 
} 

Nhưng vấn đề là, NSUserDefaults được lau khi ứng dụng được lấy ra khỏi điện thoại, nhưng các thiết lập push thì không. Vì vậy, nó sẽ không yêu cầu một lần nữa, do đó không gọi phương thức đại biểu một lần nữa, do đó tôi không có mã thông báo nữa, nhưng push vẫn được kích hoạt.

Có cơ hội nhận lại mã thông báo trong kịch bản được mô tả không?

+0

Bạn gọi phương thức 'registerForRemoteNotificationTypes:' ở đâu? – Stas

+0

Trong phương thức 'didFinishLaunchingWithOptions' –

Trả lời

23

Từ Push Notification Programming Guide

Đơn nên đăng ký mỗi khi nó ra mắt và cung cấp cho nhà cung cấp nó token hiện hành. Nó gọi phương thức registerForRemoteNotificationTypes: để khởi động quy trình đăng ký .

Bằng cách yêu cầu mã thông báo thiết bị và chuyển đến nhà cung cấp sau mỗi lần thời gian ứng dụng của bạn khởi chạy, bạn sẽ giúp đảm bảo rằng nhà cung cấp có mã thông báo hiện tại cho thiết bị. Nếu người dùng khôi phục bản sao lưu về thiết bị hoặc máy tính khác với bản sao lưu được tạo cho (ví dụ: người dùng di chuyển dữ liệu sang thiết bị hoặc máy tính mới), anh ta hoặc cô ấy phải khởi chạy ứng dụng ít nhất một lần để nó nhận lại thông báo . Nếu người dùng khôi phục dữ liệu sao lưu sang thiết bị mới hoặc máy tính hoặc cài đặt lại hệ điều hành, mã thông báo thiết bị thay đổi. Hơn nữa, không bao giờ lưu trữ mã thông báo thiết bị và cung cấp cho nhà cung cấp của bạn; luôn nhận được mã thông báo từ hệ thống bất cứ khi nào bạn cần. Nếu đơn đăng ký của bạn đã được đăng ký trước đó, hãy gọi số registerForRemoteNotificationTypes: kết quả trong hệ điều hành chuyển mã thông báo thiết bị cho đại biểu ngay lập tức mà không phải trả thêm phí .

Để trả lời câu hỏi của bạn: Gọi registerForRemoteNotificationTypes: khi khởi chạy và sử dụng mã thông báo mới nhất.

+0

Cảm ơn, bạn hoàn toàn đúng. Tôi đã thực hiện phương thức 'didFail' và khi nó bật ra, nó chỉ là một vấn đề về chứng chỉ (Team Provisioning Profile không hoạt động) –

+0

Bạn có thể mở rộng về cách thực hiện điều này không? Khi tôi xóa, vv mã thông báo mới không được đăng ký vì một số lý do. – John

2

gọi registerForRemoteNotificationTypes trên mỗi lần khởi chạy ứng dụng của bạn để phương thức didRegisterForRemoteNotificationsWithDeviceToken nhận cuộc gọi và bạn sẽ nhận được mã thông báo thiết bị của mình mỗi lần từ APNS. Và mã thông báo thiết bị cho ứng dụng của bạn giống nhau trên mỗi lần khởi chạy.

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