diadia

興味があることをやってみる。自分のメモを残しておきます。

AuthTokenを取得する

AuthTokenを取得するメソッド

AuthTokenを取得するメソッドは2つあることを確認している。

  1. blockingGetAuthToken
  2. GetAuthToken

https://developer.android.com/reference/kotlin/android/accounts/AccountManager.html#blockingGetAuthToken(android.accounts.Account,%20kotlin.String,%20kotlin.Boolean)

https://developer.android.com/reference/kotlin/android/accounts/AccountManager.html#blockingGetAuthToken(android.accounts.Account,%20kotlin.String,%20kotlin.Boolean)

そして、これらのメソッドはAccountManagerのメソッドである。

GetAuthTokenメソッドの使い方

open fun getAuthToken(account: Account!, authTokenType: String!, options: Bundle!, activity: Activity!, callback: AccountManagerCallback<Bundle!>!, handler: Handler!): AccountManagerFuture<Bundle!>!

参考

https://adsaria.hatenadiary.org/entries/2010/10/12

https://qiita.com/nein37/items/25ba6e5176118fae5f13

https://kinjouj.github.io/2013/01/android-accountmanager.html

//アカウントの取得
val accountName = "hoge"
val accountPassword = "1234tweet"
val account = Account(accountName, accountPassword)

//AccountManagerインスタンスを生成する
val am = AccountManager.get(activity)

//getAuthTokenメソッドを実行する
val authTokenType:String = "example.com.TestHogeHoge"
am.getAuthToken(
  account,
  authTokenType, 
  null,
  this@MainActivity, 
  object: AccountManagerCallback<Bundle>{
    override fun run(future: AccountManagerFuture<Bundle>){
      val bundle = future.getResult()
      val authToken:String? = bundle.getString(AccountManager.KEY_AUTHTOKEN)
      Toast.makeText(this@SelectAccountActivity, authToken, Toast.LENGTH_LONG).show()
}
,null)

getAuthTokenの場合には、第5引数にAccountManagerCallback<Bundle>を必要としている。 AccountManagerCallback<Bundle>にrunメソッドがあり、future: AccountManagerFuture<Bundle>を引数としている。getAuthTokenの返り値がAccountManagerFuture<Bundle>であり、その返り値がそのままAccountManagerCallbackのrunメソッドに渡される。AccountManagerCallbackのrunメソッドの返り値は存在しないのでAuthTokenを返り値として取得する事ができない。

一方、blockingGetAuthTokenメソッドはString!を戻り値としているためAuthTokenを取得するためには向いていると考えられる。


Authtokenを設定

一方でAuthTokenを取得するためにアカウントにAuthTokenを設定する必要がある。 それは以下のメソッドを使って実装すると思われる。

setAuthToken

https://developer.android.com/reference/kotlin/android/accounts/AccountManager#setAuthToken(android.accounts.Account,%20kotlin.String,%20kotlin.String)