# アクセストークンを管理する
このトピックでは、以下のアクセストークン管理タスクの実行方法について説明します。
安全にユーザー登録およびログインを処理する方法については、「アプリとサーバーの間で安全なログインプロセスを構築する」を参照してください。
# アクセストークンを更新する
認可が成功したあと、ユーザーの有効なアクセストークンがLINE SDKによって保存されます。このアクセストークンを使って、APIリクエストが実行されます。アクセストークンの有効期間は以下のようにして取得できます。
LineAccessToken accessToken = lineApiClient.getCurrentAccessToken().getResponseData();
Log.i(TAG, accessToken.getExpiresInMillis());
LineApiClient
インターフェイスを介してAPIリクエストが実行されるとき、有効期限が切れたアクセストークンは自動的に更新されます。ただし、アクセストークンが失効してから長期間が経過していると、更新操作は失敗します。その場合はエラーが発生し、ユーザーを再ログインさせる必要があります。
開発者自身がアクセストークンを更新することは推奨されません。LINE SDKによるアクセストークンの自動管理に任せるほうが、将来のアップグレードを考えるとより簡単で安全な方法です。ただし、以下のようにしてアクセストークンを手動で更新できます。
LineAccessToken newAccessToken = lineApiClient.refreshAccessToken().getResponseData();
# 現在のアクセストークンを取得する
クライアントサーバーアプリケーションでは、アプリとサーバーの間でユーザー情報を送受信する際に、アクセストークンを使用してください。アプリで取得したアクセストークンをサーバーに送信すると、サーバーでLINEログインAPIを呼び出すことができます。LINEログインAPIについて詳しくは、『LINEログイン v2.1 APIリファレンス』を参照してください。
アプリでLINE SDKが保存しているアクセストークンを取得するには、以下のようにgetCurrentAccessToken()
メソッドを呼び出します。
String accessToken = lineApiClient.getCurrentAccessToken().getResponseData().getTokenString();
サーバーにアクセストークンを送信するときは、トークンを暗号化し、暗号化したデータをSSLで送信することをお勧めします。サーバーで受信したアクセストークンと、LINEログインの呼び出しに使用するアクセストークンが一致すること、さらにLINEログインの呼び出しに使用するチャネルIDが自分のチャネルのIDと一致することも、検証する必要があります。
# アクセストークンを検証する
LINE SDKが保存しているアクセストークンの有効性をアプリで検証するには、verifyToken()
メソッドを呼び出します。結果が含まれるLineApiResponse
オブジェクトが返されます。次にisSuccess()
メソッドを呼び出して、トークンの有効性を確認できます。
isSuccess()
メソッドからtrue
が返される場合は、トークンは有効です。そうでない場合は、アクセストークンが無効または期限切れであるか、何らかの理由でLINE SDK内でLINEログインAPIの呼び出しに失敗しています。
isSuccess()
メソッドからfalse
が返される場合は、LineApiResponse.getErrorData()
メソッドを使用してverifyToken()
メソッドが失敗した原因を確認できます。なお、この場合は、getResponseData()
メソッドからnull
が返されます。
LineApiResponse verifyResponse = lineApiClient.verifyToken();
if (verifyResponse.isSuccess()) {
Log.i(TAG, "getResponseData: " + verifyResponse.getResponseData().toString());
Log.i(TAG, "getResponseCode: " + verifyResponse.getResponseCode().toString());
return true;
} else {
Log.i(TAG, "getResponseCode: " + verifyResponse.getResponseCode());
Log.i(TAG, "getErrorData: " + verifyResponse.getErrorData());
return false;
}
アクセストークンに関連付けられているスコープのリストを取得するには、LineApiResponse.getResponseData().getScopes()
メソッドを呼び出します。以下の例では、トーストでアクセストークンのスコープのリストを表示する方法を示しています。
protected void onPostExecute(LineApiResponse response){
if (response.isSuccess()){
LineCredential lineCredential = response.getResponseData();
List<Scope> scopes = lineCredential.getScopes();
String scopesString = Scope.join(scopes);
Toast.makeText(getApplicationContext(), scopesString, Toast.LENGTH_SHORT).show();
}
}