Androidアプリでの連携認証でTwitter OAuth callback URLのホワイリスト化に対応する


※追記

コメントで教えてもらったのですが、ホワイトリストは
yourapp://
と書けば受け付けてくれました…
@yamasa さん、ありがとうございます


以下は古い内容となります

やり方

  • 認証するAndroidアプリが受け取れるリンクに、渡されたlocation.searchをくっつけてlocation.hrefで飛ばすページを作る
  • そのURLをTwitterのホワイトリストに登録する
  • そのURLを今まで通り認証時にパラメーターで渡す

実装例

コールバック先のページのJavaScript

if (location.search === ""){
 //ただ閲覧されたときに移動するページ
 location.href="URL";
} else {
 //URLに?oauth_verifier=...があった時にアプリに飛ばす
 location.href="yourapp://path"+location.search;
}

アプリのマニフェストに設定するintent filter

<intent-filter>
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.DEFAULT" />
 <category android:name="android.intent.category.BROWSABLE" />
 <data android:scheme="yourapp" />
</intent-filter>

説明

いままでコールバックURLは認証時に自由にパラメーターで渡すことができたため、Androidアプリで独自スキームを設定し、それを捕まえるようにしてoauth_verifierを受け取ることができました。しかし2018-06-12をもってホワイトリストに登録したURL以外を指定できなくなります。
しかし、ホワイトリストにはhttpsで始まるURL以外は入れさせてくれません。
なので、どこか(GitHub Pages等)に、アプリにリダイレクトするページを作りそのURLを設定しました。
もっといいやり方があったら教えて頂けるとありがたいです。

文献

Sign in with Twitter users must whitelist callback URLs - Announcements - Twitter Developers

更新履歴

  • 実装例の追加
  • 記事先頭に追記