1 min read

TwitterのCallbackURLに制限がついた

今朝方、自作のTwitterクライアントアプリにアカウントを追加で認証しようと思ったらなぜかリクエストトークンの取得に失敗する。
エラーログを見ると403が返ってきていた。Twitterからのメッセージはこう

Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings

なんかCallbackURL関係が変わったのか?と思って調べてみるとこんなツイートが

なるほどわからん

つまり、リクエストトークンを得るために指定するCallbackURLは、使用するappの設定にあるCallbackURLsの中に含まれている必要があるそう。
今まではCallbackURLsではなくCallbackURLで一つしか指定できなかった。
今回複数設定できるようになったことでそこらへんの調整の一環なのかな?と思った(詳しいことは知らん

ちなみにこの制限が施行されたのは2018/06/12らしい。
割と早めに気付くことができてよかった。

で、CallbackURLはhttp(s)?から始まるものしか使えない
今まではリクエストトークン取得時にテキトーに指定してもそれでコールバックしてくれたのだが、今回からはそれができなくなってしまった。
何が困るかというとカスタムURLスキームだ。自アプリにAccessTokenのクエリを渡したいのにhttpだからブラウザのほうが優先されてしまう。
ブラウザか自アプリかの選択は出るが、今まではそれすら出ずアプリに直行できていたのでなんか不便になったなと思った。

AndroidAppでの対応

  • 新しいコールバックのURLをTwitterのappのCallbackURLsに追記 or 上書き
  • AndroidManifest.xmlの対象Activityのintent-filterdataの中のscheme host pathPatternの書き換え
  • リクエストトークンを取得する際のCallbackURLをTwitterのappのCallbackURLsに登録されているものにする
  • Activity#onNewIntentで飛んできたIndentの判定時にCallbackURLをstartsWithなどで判断していると思うのでそこも上記と同じように

そこまで時間がかかることなく対応できたのでまあよかった。