8

アプリで通知の受信を処理しようとしていますが、実際にはうまくいきません。

使用する場合didReceiveLocalNotification:(UILocalNotification *)notification。アプリの入力に使用した通知を問題なく受信して使用できます

ただし、この関数は、アプリがすでに実行されている場合にのみ起動されます(アクティブ、非アクティブ、バックグラウンド、場合によっては一時停止されていますが、まだ試していません)。

これで、UILocalNotificationを返す関数didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsを使用できるようになりました。[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]

ただし、実行されていない状態からアプリを起動した場合、このイベントは発生しません。その後、LocalNotificationによってアプリが開きますが、使用できません。

さて、私の質問は、アプリが実行されていない状態のときに通知から、アプリの起動時に通知を受信して​​処理できるようにするにはどうすればよいですか?私がここで間違っていることはおそらくありますか?

これが私のアプリのサンプルコードです。

まず、didFinishLaunchingWithOptions残念ながら機能しない機能です。関数[sharedLocalNotificationsInstance processNotification:notification]が起動されることはありません...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance];
[sharedLocalNotificationsInstance checkNotifications];

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if ( notification != nil ) {

    // Process the received notification
    [sharedLocalNotificationsInstance processNotification:notification];

    application.applicationIconBadgeNumber = 0;
}

return YES;
}

そして2番目のコード:didReceiveLocalNotification関数は完全に機能します:通知を受け取り、[sharedLocalNotificationsInstance processNotification:notification]は完全に機能します。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{

// Used when the application launches from a notification
LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance];

// Process the received notification
[sharedLocalNotificationsInstance processNotification:notification];
}
4

2 に答える 2

4

これは、iOS がローカル通知を処理する方法です。アプリの状態 (アクティブ、バックグラウンドで実行中、まだ開始されていないなど) によって異なります。iOS は didFinishLaunchingWithOptions または didReceiveLocalNotification を呼び出すか、アプリにまったく触れません。

明確にするために、この記事を参照してください - http://www.thekspace.com/home/component/content/article/62-uilocalnotification-demystified.html

于 2012-09-12T03:06:09.293 に答える
1

<Matrix-Morpheus-Meme title="WHAT IF I TOLD YOU">

ユーザーがローカル通知アラートをタップしたためにアプリケーションが「実行されていない」状態から起動された場合、アプリケーションは Xcode ではなく iOS によって開始されたため、デバッガーの下では実行されません。その内部でブレークポイントを設定することはできず、NSLog() は Xcode コンソールに何も送信しません。でテストしUIAlertControllerます。

</Matrix-Morpheus-Meme>

于 2016-02-02T16:26:33.720 に答える