megutech

自身の備忘録として主にWEBサーバー周りの技術について投稿しています。

X (Twitter) のIntent URL `/intent/tweet` vs `/intent/post`

WebからXへシェアする機能を実装したところ、Xアプリが起動 -> アプリ内ブラウザ起動 -> Safariへリダイレクト -> Xアプリ起動という無限ループに陥った。
調査の結果、Intent URLのエンドポイントによって挙動が異なることが判明したので備忘録として残す。

環境

発生した問題

Webサイトにシェアボタンを実装し、/intent/post を使用したところ以下の無限ループが発生:

  1. Xアプリが起動
  2. アプリ内ブラウザが起動
  3. アプリ内ブラウザがデフォルトブラウザ(Safari)を開こうとする
  4. SafariがXアプリを開こうとする
  5. 1に戻る

調査

Intent URLの種類

以下の2種類のエンドポイントが存在する:

https://x.com/intent/tweet
https://x.com/intent/post

挙動の違い

/intent/tweet

  • Xアプリがネイティブで起動
  • 投稿画面が直接開く
  • 正常動作

/intent/post

  • Xアプリは起動する
  • しかしアプリ内ブラウザが起動
  • そのブラウザ内で投稿画面が表示される
  • 無限ループの原因

公式ドキュメントの確認

X Developer Platform の公式ドキュメントを確認したところ、/intent/tweet のみが記載されている

/intent/post については記載がない。

対応

Intent URLの変更

- https://x.com/intent/post?text=...
+ https://x.com/intent/tweet?text=...

結論

  • 使用すべきは /intent/tweet
  • 公式ドキュメントに記載されている
  • 挙動が安定している

感想

ブランディングで「これからはPostだ」という方針だったので /intent/post を使っていたが、無限ループに陥って調査したところ、公式ドキュメントには記載すらされていなかった。
結局 /intent/tweet に戻すことで解決した。

公式ドキュメントは大事。