Yahoo! ID連携

Yahoo! ID連携 v2 Android Kotlin SDK

ベータ版SDKですので予告なく仕様変更する場合があります。

Authorization Codeフロー

Authorization Codeフローによるログイン機能の実装方法を説明します。

導入方法

JitPackを利用して導入することができます。

設定値については、こちらを参照ください。

初期設定

build.gradle

build.gradleのandroid > defaultConfigに、下記のように「manifestPlaceholders」を追加し、「scheme」を設定することが必要です。

「scheme」には、Client ID登録時に発行されるカスタムURIスキーム「yj-xxxxx」を指定します。

カスタムURIスキームはアプリケーションの管理から変更可能です。

android {
  defaultConfig {
    (省略)
    manifestPlaceholders = [scheme: "yj-xxxxx"]
  }
}  

リダイレクトURI

設定するリダイレクトURIを決め、準備する必要があります。

次の2種類の形式のうちどちらかで設定してください。

「android-app:」スキーム形式(推奨)

android-app://{package_id}/{scheme}//
  • "{scheme}"は、必須となります。
  • "{scheme}"は、Client ID登録時に発行されるカスタムURIスキーム「yj-xxxxx」と同じ値にしてください。

カスタムURIスキーム形式

カスタムURIスキームに従ってください。

実装方法

LoginManagerのセットアップ

SDKの機能を使うには、必要な情報をLoginManagerオブジェクトにセットする必要があります。

※具体的なコーディングは、サンプルコードを合わせて参照ください。


①引数として事前に発行したClient IDと準備したリダイレクトURIを指定し、LoginManager.setup()を実行します。
他のプロパティー、メソッドを実行する前に、必ずLoginManager.setupメソッドを実行してください。
実行するタイミングとして、アプリ起動時を推奨しています。

val clientId = "dj00zaiZpPXNYeG5tRXJVVlLzPuWNMvbnN1bWVyc2VjcmV0JnXXXXX-"
val redirectUri = "android-app://$packageName/yj-example//"
 
LoginManager.setup(clientId, redirectUri)

②LoginListenerを実装するクラスを作成し、設定します。

LoginManager.setLoginListener(this)

ここで設定するListenerに、「ログイン成功」「ログイン失敗」を通知します。

// ログイン成功の場合
override fun onLoginSuccess(loginResult: LoginResult) {
}
 
// ログイン失敗の場合
override fun onLoginFailure(loginError: LoginError) {
}

③必要に応じてパラメータを定義します。

// UserInfo APIから取得する属性情報を指定
val scopes = setOf(Scope.OPENID, Scope.PROFILE)
 
// セキュリティ対策のためのパラメータを設定
val nonce = <バックエンドサーバーで生成したnonce>
val codeChallenge = <バックエンドサーバーで生成したcode_challenge>
 
// CodeChallengeMethodを設定
val codeChallengeMethod = CodeChallengeMethod.S256
 
// 必要に応じ、追加パラメータを設定
val optionalParameters = 
  OptionalParameters(prompts = setOf(Prompt.CONSENT), bail = true)

nonceおよびcodeChallengeプロパティーは認可リクエスト時のリクエストパラメーターとして利用されます。

詳しくはAuthorizationエンドポイントをご確認ください。


ログインボタンの指定と追加

ログイン実行用のボタンを設定します。

// ログイン実行用のボタンを設定
findViewById<LoginButton>(R.id.login_button_white).also {
  it.scopes = scopes
  it.nonce = nonce
  it.codeChallenge = codeChallenge
  it.optionalParameters = optionalParameters
  it.listener = this
}

ログインボタンのデザインをアレンジすることもできます。

ボタンタイプをLoginButtonクラスのsetImage()、またはレイアウトファイルで指定してください。


指定できるボタンデザインと設定値は以下となります。

レイアウトファイルの設定例

<jp.co.yahoo.yconnect.yjloginsdk.widget.LoginButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:button_type="button_white" />

button_typeには下記を設定することができます。

Yahoo! JAPAN IDログインボタン デザインガイドラインに沿って利用してください。

button_type
画像
button_white
button_red
icon_white
icon_red

直接ログインメソッドを実行する

ログインボタンを使用しない、もしくは任意のタイミングでログイン処理を行いたい場合は、LoginManager.loginメソッドを呼び出します。

LoginManager.login(
  this,
  scopes,
  nonce,
  codeChallenge,
  codeChallengeMethod,
  optionalParameters
)

認可コードの取得

認可レスポンスを正常に取得した後、LoginResultオブジェクトから認可コードを取得できます。

認可コードをバックエンドサーバーに連携し、バックエンドサーバーはTokenエンドポイントにリクエストしてAccess Token/Refresh Token/ID Tokenを取得します。

override fun onLoginSuccess(loginResult: LoginResult) {
  // 認可コードの取得
  val code = loginResult.authorizationCode
}