[解決済み] iOSのプッシュ通知:アプリがバックグラウンドにあるときにユーザーが通知をタップしたかどうかを検出する方法は?
質問
このトピックに関する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 もまた、明確に文書化していませんでした。 ここで という文書がないので、理解するのに時間がかかりました。
関連
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] UIViewに角丸をつける
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] UILabelで複数行のテキストを表示する
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み】iOSアプリの名前を変更する方法は?
-
[解決済み】iOSは、ユーザーによって強制終了されたアプリをバックグラウンドで起動するのでしょうか?
-
[解決済み] プッシュ通知で起動したアプリをデバッグする
-
[解決済み] アプリが開いていてフォアグラウンドの時にiOS純正の通知バナーを表示させる?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
dyld: ライブラリがロードされていません。エラーの解決
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] プッシュ通知からアプリが起動/開封されたかどうかを検出する