TwitterのCallbackURLに制限がついた
今朝方、自作のTwitterクライアントアプリにアカウントを追加で認証しようと思ったらなぜかリクエストトークンの取得に失敗する。
エラーログを見ると403が返ってきていた。Twitterからのメッセージはこう
Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings
なんかCallbackURL関係が変わったのか?と思って調べてみるとこんなツイートが
As announced last month, today marks the beginning of callback URL whitelisting enforcement. Apps using Sign in with Twitter who have not whitelisted their URLs will experience disruption. To whitelist your URLs, follow the guidance in our May forum post. https://t.co/uWBvhX30E6
— Twitter API (@TwitterAPI) 2018年6月12日
なるほどわからん
つまり、リクエストトークンを得るために指定するCallbackURLは、使用するappの設定にあるCallbackURLsの中に含まれている必要があるそう。
今まではCallbackURLs
ではなくCallbackURL
で一つしか指定できなかった。
今回複数設定できるようになったことでそこらへんの調整の一環なのかな?と思った(詳しいことは知らん
ちなみにこの制限が施行されたのは2018/06/12らしい。
割と早めに気付くことができてよかった。
で、CallbackURLはhttp(s)?から始まるものしか使えない
今まではリクエストトークン取得時にテキトーに指定してもそれでコールバックしてくれたのだが、今回からはそれができなくなってしまった。
何が困るかというとカスタムURLスキームだ。自アプリにAccessTokenのクエリを渡したいのにhttpだからブラウザのほうが優先されてしまう。
ブラウザか自アプリかの選択は出るが、今まではそれすら出ずアプリに直行できていたのでなんか不便になったなと思った。
AndroidAppでの対応
- 新しいコールバックのURLをTwitterのappの
CallbackURLs
に追記 or 上書き AndroidManifest.xml
の対象Activityのintent-filter
のdata
の中のscheme
host
pathPattern
の書き換え- リクエストトークンを取得する際のCallbackURLをTwitterのappの
CallbackURLs
に登録されているものにする - Activity#onNewIntentで飛んできたIndentの判定時にCallbackURLをstartsWithなどで判断していると思うのでそこも上記と同じように
そこまで時間がかかることなく対応できたのでまあよかった。