メインコンテンツへスキップ
nefs — portfolio

【EvenG2】長い通知を開くとアプリが固まる?クリック無反応バグの正体

長い通知を開くと、アプリ全体のクリックが一切効かなくなった。原因は、本文コンテナ内のスクロールとスワイプによるページめくりが、同じ画面で同居できないという制約だ。

通知確認アプリ「MOCO Inbox」の詳細画面で、220文字を超える通知を開いたときだけこの症状が起きた。ニュース速報のSlack通知など、長めの本文での発生が目立った。

この記事では、2026年9月時点で確認できた原因と、実際に効いた対策を実践ログとして記録する。

この記事でわかること

  • 2026年9月時点の検証で分かったクリック無反応不具合の症状
  • 220文字超の通知だけがアプリを固まらせる理由
  • 実際に効いた対策(ページ分割方式への変更)
  • 特定までに外れた仮説

本文はページ分割してヘッダー側でスワイプ送りにする

対策は、本文を事前にページ配列へ分割し、ヘッダー側のスワイプでページ送りする方式に変えることだった。読書アプリで使っていたtext_block_to_pages相当のロジックをそのまま流用した。isEventCaptureの位置もヘッダー側に置き換えた。

本文コンテナ内スクロール方式とページ分割スワイプ方式を対比した図

句点区切りで220文字上限に分割し、超過分は読点や文字数で強制的に分割する。この方式に変えたことで、詳細画面はreader読書中画面と同じ実装方針にそろった。

なぜ220文字超の通知でアプリ全体が固まるのか

詳細画面の本文コンテナに220文字を超える本文をそのまま渡していた。isEventCapture:1でSDK標準のコンテナ内スクロールに任せる実装だった。この状態で実機を使うと、クリック自体を含めアプリ全体の操作を受け付けなくなった。

本文スクロール中はページめくりが効かなくなる仕組み

本文コンテナ内スクロールと、スワイプによる明示的なページめくりは、同一画面で同居できない。本文側のisEventCaptureを1にすると、枠を超えた本文はSDK標準のスクロールインジケータで読めるようになる。

その一方で、スワイプ自体がJSのonEvenHubEventに届かなくなり、ページめくりが動作しなくなった。notify詳細画面は当初、ページめくり機能が無い前提で本文側のisEventCaptureのまま運用していた。

本文側isEventCapture=1が招く「スクロールは効くがページめくりが効かない」状態を示す図

特定までの経緯

症状は、ニュース速報のSlack通知など、220文字を超える本文だけが開けないという形で現れた。原因の特定には、いくつかの仮説を外していく過程が必要だった。

装飾記号説が外れた理由

当初は、通知本文に含まれる特定の全角装飾記号が原因ではないかと疑った。しかし、切り分けを進めると装飾記号とは無関係と判明。

症状はあくまで220文字超の本文だけが開けないという形で現れており、原因は文字の種類ではなく本文の長さにあると絞り込めた。

EvenG2の実機不具合に気づいたらどうする?

220文字を超える本文だけが開けない症状には、コンテナ内スクロールとスワイプページめくりの同居を疑うと良い。今回も、見た目の違い(装飾記号の有無)より、本文の長さという条件のほうが的確な手がかりだった。

EvenHub SDK周辺は仕様変更が速く、今回の対策も2026年9月時点のものだ。似た症状に遭遇したら、まず「どの条件の通知だけ起きるか」を切り分けるところからはじめると良い。