1. ホーム
  2. ios

[解決済み] iOSのプッシュ通知:アプリがバックグラウンドにあるときにユーザーが通知をタップしたかどうかを検出する方法は?

2022-06-09 22:36:59

質問

このトピックに関するstackoverflowのスレッドがたくさんありますが、私はまだ良い解決策を見つけられませんでした。

アプリがバックグラウンドでない場合、私はチェックすることができます launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]application:didFinishLaunchingWithOptions: を呼び出して、通知から開かれたかを確認します。

アプリがバックグラウンドにある場合、すべての投稿で提案されているのは application:didReceiveRemoteNotification: を使用してアプリケーションの状態をチェックすることを示唆しています。しかし、私が実験したところ (そしてこの API の名前が示すとおり)、このメソッドはタップされたときではなく、通知を受信したときに呼び出されます。

つまり、問題は、アプリを起動してからバックグラウンドになり、通知が application:didReceiveNotification ( application:didFinishLaunchWithOptions: はこの時点ではトリガーしません)、ユーザーが通知をタップしてアプリを再開したのか、それとも単にアプリのアイコンをタップしたのかをどのようにして知るのでしょうか?なぜなら、ユーザーが通知をタップした場合、その通知で言及されたページを開くことが期待されるからです。そうでない場合は、開くべきではありません。

私は handleActionWithIdentifier を使うこともできますが、これはカスタムアクションボタンがタップされたときにのみトリガーされ、ユーザーが通知のメインボディをタップしたときにはトリガーされません。

ありがとうございます。

EDITです。

を読んだ後、私はこのように私の質問を明確にすることができると思った。

これらの2つのシナリオをどのように区別することができますか。

(A) 1.アプリがバックグラウンドになる、2.通知を受ける、3.ユーザーがその通知をタップする、4.アプリがフォアグラウンドになる。

(B) 1.アプリがバックグラウンドになる、2.通知を受ける、3.ユーザーが通知を無視し、後でアプリのアイコンをタップする、4.アプリがフォアグラウンドになる

以降 application:didReceiveRemoteNotification: はどちらの場合もステップ2でトリガーされます。

あるいは application:didReceiveRemoteNotification: は (A) のみステップ 3 でトリガーされるはずですが、私のアプリの設定が間違っていたため、ステップ 2 で表示されているのでしょうか。

どのように解決するのですか?

OKやっとわかりました。

ターゲット設定➝ Capabilitiesタブ➝ Background Modesで、"Remote Notifications"にチェックを入れておくと。 application:didReceiveRemoteNotification: は、通知が届くとすぐに(アプリがバックグラウンドにある限り)トリガーされ、その場合、ユーザーが通知をタップするかどうかを判断する方法はありません。

そのチェックを外すと application:didReceiveRemoteNotification: は、通知をタップしたときのみトリガーされます。

このボックスをチェックすると、アプリのデリゲートメソッドの1つがどのように動作するかが変わるのは少し奇妙です。このボックスがチェックされていると、Apple は通知の受信と通知のタップに 2 つの異なるデリゲート メソッドを使用することになります。ほとんどの開発者は、通知がタップされたかどうかを常に知りたいと考えていると思います。

これが、この問題に遭遇した人の役に立つことを願っています。Apple もまた、明確に文書化していませんでした。 ここで という文書がないので、理解するのに時間がかかりました。