4

アプリがプッシュ通知を受け取った後、メインのいくつかのボタンのタイトルを変更したいと思いますViewController。この動作を実現するために、アプリのデリゲートでメソッドを上書きし、ルート ビュー コントローラーとして更新したいコントローラーをapplication: didReceiveRemoteNotification:再インスタンス化して、ボタンのタイトルを好きなように設定しました。UINavigationController

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
       UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController];
       [self.window setRootViewController:navController];
       [self.welcomeViewController.buttonToUpdate setTitle: @"Updated Text" forState: UIControlStateNormal];
}

これは最善の解決策ではないかもしれませんが (おそらく をUIButtons完全に忘れて、View Controller で を使用しUITableView、その行をボタンとして機能させることはできますか?)、次のシナリオでは機能します。

1) フォアグラウンドでのアプリ。プッシュ通知アラートがポップアップし、ユーザーが [OK] をタップすると、ビューが正常に更新されます。

2) アプリがバックグラウンド/閉じている。デバイスがロック モードになっています。プッシュ通知が届き、ユーザーがデバイスのロックを解除し、アプリが読み込まれ、ビューも正常に更新されます。

たとえば、ユーザーが別のアプリを使用していて、プッシュ通知が届いたときに問題が発生したようですが、ユーザーはプッシュ通知ではなく、アプリのアイコンをタップしてアプリを開きます。その場合、application: didReceiveRemoteNotification:呼び出されないようで、質問のビューは更新されません。

私の説明が明確であることを願っています。さまざまなアプローチに関する提案、または私のアプローチを使用して最後のシナリオを処理する方法については、オープンです。

ありがとう!

4

1 に答える 1

8

APNS開発ガイドから:

オペレーティングがアプリケーションのローカル通知またはリモート通知を配信するときに考えられるシナリオを確認してみましょう。

通知は、アプリケーションがフォアグラウンドで実行されていないときに配信されます。この場合、システムは通知を表示し、アラートを表示し、アイコンにバッジを付け、おそらく音を鳴らします。

表示された通知の結果として、ユーザーはアラートのアクションボタンをタップするか、アプリケーションアイコンをタップ(またはクリック)します。アクションボタンがタップされた場合(iOSを実行しているデバイスで)、システムはアプリケーションを起動し、アプリケーションはそのデリゲートのアプリケーションを呼び出します。didFinishLaunchingWithOptions:メソッド(実装されている場合)。通知ペイロード(リモート通知の場合)またはローカル通知オブジェクト(ローカル通知の場合)を渡します。

iOSを実行しているデバイスでアプリケーションアイコンがタップされた場合、アプリケーションは同じメソッドを呼び出しますが、通知に関する情報を提供しません

発生している動作は、アプリアイコンをタップしたときに予想される動作です。この場合、ユーザーがアプリを正常に起動し、プッシュ通知が届かないかのようになります。この場合、別の何かを表示する唯一の方法(私は考えることができます)は、アプリケーションの起動時にサーバーに接続し、プッシュ通知が最近そのデバイスに送信されたことを示す情報を取得することです。

于 2013-02-18T19:57:12.330 に答える