2013-09-03 52 views
11

Hơi giống với When is didRegisterForRemoteNotificationsWithDeviceToken called?.didRegisterForRemoteNotificationsWithDeviceToken được gọi hai lần?

Khi người dùng trước tiên cài đặt ứng dụng và nó sẽ nhắc xem có chấp nhận thông báo, didRegisterForRemoteNotificationsWithDeviceToken sẽ được gọi nếu người dùng chấp nhận?

Tôi hiện đang gọi registerForRemoteNotificationTypes sau khi người dùng đăng nhập thành công hoặc tạo tài khoản.

Sau đó, các đại biểu didRegisterForRemoteNotificationsWithDeviceToken được gọi ngay cả khi không gọi registerForRemoteNotificationTypes trong AppDelegate.

Nếu tôi làm theo các tài liệu và mã ví dụ:

Bằng cách yêu cầu các thiết bị token và đi qua nó để các nhà cung cấp mỗi khi ra mắt ứng dụng của bạn, bạn sẽ giúp đảm bảo rằng các nhà cung cấp có dấu hiệu hiện nay cho điện thoại .

- (void)applicationDidFinishLaunching:(UIApplication *)app { 

    // other setup tasks here.... 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:... 
} 

Nhưng bằng cách yêu cầu token khi ứng dụng khởi chạy, các đại biểu sẽ được gọi là hai lần.

Một vài câu hỏi và rõ ràng cần thiết:

  1. Đối với ban đầu nhanh chóng xảy ra, một cuộc gọi cho registerForRemoteNotificationTypes phải được thực hiện cho dấu nhắc xuất hiện? Tuy nhiên, đại biểu sẽ được gọi hai lần nếu tôi gọi điều này theo cách thủ công trong AppDelegate. Có giả sử như vậy không?

  2. Nếu người dùng chấp nhận lời nhắc ban đầu, didRegisterForRemoteNotificationsWithDeviceToken có được gọi tự động không? Hoặc chúng ta phải gọi registerForRemoteNotificationTypes trong AppDelegate? Nhưng sau đó, đại biểu sẽ được gọi hai lần để ra mắt trong tương lai?

  3. Nếu người dùng từ chối và sau đó chấp nhận thông qua Cài đặt, điều gì sẽ xảy ra?

CẬP NHẬT

0. Đối với ban đầu nhanh chóng xảy ra, một cuộc gọi cho registerForRemoteNotificationTypes phải được thực hiện cho dấu nhắc xuất hiện? Tuy nhiên, đại biểu sẽ được gọi hai lần nếu tôi gọi điều này theo cách thủ công trong AppDelegate. Có giả sử như vậy không?Điều này không đúng. Phát hiện ra rằng thực tế đã có 2 registerForRemoteNotiicationTypes được thực hiện trong AppDelegate.

Trả lời

6

Nếu người dùng chấp nhận lời nhắc ban đầu, willRegisterForRemoteNotificationsWithDeviceToken được gọi tự động? Không, quy trình đăng ký thông báo từ xa của bạn bắt đầu khi nhấp vào 'cho phép truy cập', nhưng phương thức didRegisterForRemoteNotificationsWithDeviceToken chỉ được gọi khi đăng ký APNS thành công.

Nếu ứng dụng của bạn đã đăng ký trước đây, kêu gọi registerForRemoteNotificationTypes: Kết quả trong hệ điều hành đi qua các thiết bị token để các đại biểu ngay lập tức mà không bị thêm overhead

Bạn có thể xác định xem một ứng dụng được đưa ra như kết quả của người dùng nhấn vào nút tác vụ hoặc thông báo là được gửi đến ứng dụng đã chạy bằng cách kiểm tra trạng thái ứng dụng . Trong quá trình triển khai ứng dụng của đại biểu: didReceiveRemoteNotification: hoặc ứng dụng: didReceiveLocalNotification: phương thức, nhận giá trị của thuộc tính application1ate và đánh giá nó. Nếu giá trị là UIApplicationStateInactive, người dùng đã nhấn vào nút tác vụ; nếu giá trị là UIApplicationStateActive, ứng dụng sẽ ở phía trước nhất khi nó nhận được thông báo.

+0

Ok. Nó sẽ chỉ được gọi nếu người dùng chấp nhận lời nhắc và đăng ký thành công? Nếu không phương pháp thất bại sẽ được gọi? Điều gì xảy ra nếu người dùng từ chối lời nhắc, phương pháp lỗi có được gọi không? –

+0

Nếu người dùng từ chối lời nhắc, anh ta đã không bắt đầu quá trình đăng ký APNS và phương pháp lỗi sẽ không bao giờ được gọi. phương thức didFailToRegisterForRemoteNotificationsWithError chỉ được gọi khi đăng ký thất bại. – thatzprem

1

Không. phương pháp này chỉ được gọi một lần khi khởi chạy ứng dụng. nếu nó được gọi hai lần thì nó sẽ được gọi từ mã của bạn. Hãy thử để thấy rằng nếu bạn đang đặt mã như

[application registerUserNotificationSettings:mySettings]; 
[application registerForRemoteNotifications]; 

trong didFinishLaunchingWithOptions

sau đó trong đi đến

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 

là bạn có thể được gọi [application registerForRemoteNotifications];

để loại bỏ mã này.

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