2016-05-14 6 views
0

インタラクティブ通知を使用していて、アプリがバックグラウンドで一時停止されているときにうまく動作しますが、アプリが終了すると問題が発生します。アプリが起動していないときのhandleActionWithIdentifier

私は、アプリが起動していないときにインタラクティブ通知が発生したときにNSLogを使用してアプリのライフサイクルを判断しました。

次はアプリが目に見えて起動することなく、記載されているために、上行く: handleActionWithIdentifier のviewDidLoad viewwilllayoutsubviews viewdidlayoutsubviews viewdidappear

をdidfinishlaunching

アプリは、その後 didenterbackgroundを呼び出したりせずに終了しているようですwillTerminate

mに問題が発生している理由私はdiddbackgroundに無効化されたviewdidloadのタイマーを作成するからです。

didndbackgroundが呼び出されていないので、インタラクティブ通知をトリガした後にアプリケーションを起動すると、タイマーのインスタンスが2つ終了します。

誰でもアプリが終了するのはなぜだが、didenterbackgroundやwillTerminateは呼び出されないのですか?

+0

アプリがバックグラウンドに直接起動されているので。フォアグラウンドからバックグラウンドに移行しません – Paulw11

答えて

0

あなたdidfinishlaunchingの呼び出しは、あなたがフォアグラウンドにいることを意味してはいけません。 @ PaulW11のコメントでは、アプリが実行されていないときの地元の通知のために、あなたはバックグラウンドに直接立ち上げられ、フォアグランドからバックグラウンドへの移行は見られません。

フォアグラウンドで起動している場合、システムはapplicationDidBecomeActive:を呼び出します。そこにタイマーを開始するコードを置くべきです。

ドキュメントはローカル通知の通知をバックグラウンドで実行を受けることを言う:

ユーザーがリモートまたはローカル 通知のための警告でカスタムアクションをタップすると、システムは アプリケーションを呼び出します。handleActionWithIdentifier: forRemoteNotification:completionHandler: または アプリケーション:handleActionWithIdentifier:forLocalNotification:completionHandler: メソッドをバックグラウンドで実行すると、アプリは関連付けられた アクションを実行できます。

あなたはそれがフォアグラウンドまたはバックグラウンドから呼び出されていますかどうかを確認するためにあなたのapplication:handleActionWithIdentifier:forLocalNotification:completionHandler:メソッドを記述する必要があります。

私は、フォアグラウンドまたはバックグラウンドにいる場合伝えるために、このような(のObjective-C)のコードを使用します。

BOOL inBackground = [UIApplication sharedApplication].applicationState == UIApplicationStateBackground; 
関連する問題