6

プッシュ通知用にアプリを正常に登録できます。

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

しかし、これを実行するたびに、UI が通常 2 ~ 3 秒間ハングします。アプリのライフサイクルの早い段階で推奨されている場合でも (例: WillFinishLaunching)、最初の ViewController が読み込まれると UI がハングします。

私の最初の考えは、別のスレッドで登録を実行することでしたが、MonoTouch はこれを防ぎます。

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

私の次の考えは、少なくともボックスをポップアップして、UIAlertView何かが起こっていることをユーザーに知らせることでしたが、何らかの理由で、登録が行われるまで表示されず開いUIAlertViewてすぐに閉じてしまいました!

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);

どうすればいいですか

  1. プッシュ通知の登録が UI スレッドを拘束しないようにする
  2. UIのフリーズを隠蔽?
4

1 に答える 1

1

public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) をオーバーライドしましたか

また

public override void FailedToRegisterForRemoteNotifications (UIApplication アプリケーション、NSError エラー)

Registered... 関数内で、デバイストークンをアップロードするために Web サービスを呼び出した同様の問題がありました。しかし、Web 呼び出しは別のスレッド内になかったため、UI がフリーズしました。

于 2013-05-31T13:50:58.310 に答える