5

tôi có thể đăng ký thành công ứng dụng của tôi cho thông báo đẩy:RegisterForRemoteNotificationTypes gây UI để treo

UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(
    UIRemoteNotificationType.Alert 
    | UIRemoteNotificationType.Badge 
    | UIRemoteNotificationType.Sound); 

Nhưng bất cứ khi nào tôi thực hiện điều này, giao diện người dùng của tôi bị treo cho thường 2-3 giây. Ngay cả khi tôi có nó sớm trong vòng đời của ứng dụng như được đề xuất (ví dụ: ngay cả WillFinishLaunching) giao diện người dùng của tôi vẫn bị treo khi lần tải ViewController đầu tiên của tôi.

Suy nghĩ đầu tiên của tôi là thực hiện việc đăng ký trong một thread riêng biệt, nhưng MonoTouch ngăn chặn điều này:

// From MonoTouch.UIKit 
public virtual void RegisterForRemoteNotificationTypes(UIRemoteNotificationType types) 
{ 
    UIApplication.EnsureUIThread(); 

suy nghĩ tiếp theo của tôi là ít nhất bật lên một hộp UIAlertView để cho người dùng biết một cái gì đó đang xảy ra, nhưng vì lý do nào đó, nó không hiển thị cho đến khi sau khi đăng ký diễn ra, dẫn đến việc mở UIAlertView và đóng ngay lập tức!

modalPopup = new UIAlertView("Working", "The application is loading...", null, null); 
modalPopup.Show(); 
// It doesn't show here! 
RegisterForRemoteNotificationTypes(); 
// It shows here! 
modalPopup.DismissWithClickedButtonIndex(0, true); 

Làm thế nào tôi có thể một trong hai

  1. Dừng việc đẩy mạnh đăng ký thông báo từ trói thread UI của tôi
  2. che đậy đóng băng UI?

Trả lời

1

Bạn có ghi đè lên public override void RegisteredForRemoteNotifications (UIApplication ứng dụng, NSData deviceToken)

hoặc

public override void FailedToRegisterForRemoteNotifications (ứng dụng UIApplication, lỗi NSError)

Tôi đã có vấn đề tương tự trong chức năng Đăng ký ..., tôi đã gọi một dịch vụ web để tải lên mã thông báo thiết bị. Tuy nhiên, cuộc gọi web không nằm trong một chuỗi khác vì vậy nó đã làm đóng băng giao diện người dùng.