# アクセストークンを管理する

このトピックでは、以下のアクセストークン管理タスクの実行方法について説明します。

# アクセストークンを更新する

認可が成功したあと、ユーザーの有効なアクセストークンがLINE SDKによって保存されます。このアクセストークンを使って、APIリクエストが実行されます。アクセストークンの有効期限は以下のようにして取得できます。

LineSDKAccessToken * accessTokenObject = [apiClient currentAccessToken];
NSString * accessTokenString = accessTokenObject.expiresIn;

LineSDKAPIオブジェクトを介してAPIリクエストが実行されるとき、有効期限が切れたアクセストークンは自動的に更新されます。ただし、アクセストークンが失効してから長期間が経過していると、更新操作は失敗します。その場合はエラーが発生し、ユーザーを再ログインさせる必要があります。

開発者自身がアクセストークンを更新することは推奨されません。LINE SDKによるアクセストークンの自動管理に任せるほうが、将来のアップグレードを考えるとより簡単で安全な方法です。ただし、以下のようにしてアクセストークンを手動で更新できます。

[apiClient refreshTokenWithCompletion:^(LineSDKAccessToken * _Nullable accessToken, NSError * _Nullable error) {
     
    if (error){
         
        // The token refresh failed.
        NSLog(@"Error occurred when refreshing the access token: %@", error.description);
 
    } else {
 
        // The token refresh succeeded so we can get the refreshed access token.
        NSString * newAccessToken = accessToken.accessToken;       
         
    }
     
}];

コールが成功した場合は、新しいアクセストークンがaccessToken引数として返され、error引数はnilになります。そうでない場合は、原因についてerror引数から情報を得ることができます。

# 現在のアクセストークンを取得する

クライアントサーバーアプリケーションでは、アプリとサーバーの間でユーザー情報を送受信する際に、アクセストークンを使用してください。 アプリで取得したアクセストークンをサーバーに送信すると、サーバーでLINEログインAPIを呼び出すことができます。 LINEログインAPIについて詳しくは、『LINEログイン v2.1 APIリファレンス』を参照してください。

アプリでLINE SDKが保存しているアクセストークンを取得するには、以下のようにcurrentAccessTokenメソッドを呼び出します。LineSDKAccessTokenオブジェクトのaccessTokenプロパティが、アクセストークンを保持しています。

LineSDKAccessToken * accessTokenObject = [apiClient currentAccessToken];
NSString * accessTokenString = accessTokenObject.accessToken;

LINE SDKが保存しているアクセストークンは、LineSDKAPIオブジェクトのaccessTokenオブジェクトを使用して取得することもできます。

NSString * accessToken = apiClient.currentAccessToken.accessToken;
注意

サーバーにアクセストークンを送信するときは、トークンを暗号化し、暗号化したデータをSSLで送信することをお勧めします。サーバーで受信したアクセストークンと、LINEログインの呼び出しに使用するアクセストークンが一致すること、さらにLINEログインの呼び出しに使用するチャネルIDが自分のチャネルのIDと一致することも、検証する必要があります。

# アクセストークンを検証する

現在のアクセストークンの有効性を検証するには、verifyTokenWithCompletionメソッドを呼び出します。このメソッドでは、保存されているトークンが有効かどうかが確認されます。結果が含まれるLineSDKVerifyResultオブジェクトが返されます。検証に成功すると、レスポンスとしてchannelIDpermissions、およびexpiresInのようなプロパティが返されます。そうでない場合は、トークンは無効、失効、または期限切れであり、エラーが返されます。

[apiClient verifyTokenWithCompletion:^(LineSDKVerifyResult * _Nullable result, NSError * _Nullable error) {
     
    if (error) {
        // Token is invalid
        NSLog(@"Token is Invalid: %@", error.description);
    } else {
        // Token is Valid
    }
}];

LineSDKVerifyResultオブジェクトのpermissionsプロパティから、アクセストークンに関連付けられている権限のリストを取得できます。以下の例では、ダイアログでアクセストークンの権限のリストを表示する方法を示しています。

[apiClient verifyTokenWithCompletion:^(LineSDKVerifyResult * _Nullable result, NSError * _Nullable error) {
     
    if (error) {
        // Token is invalid
        NSLog(@"Token is Invalid: %@", error.description);
    } else {
        NSMutableString * text = [[NSMutableString alloc]initWithString:@"Access Token is Valid and contains the following permissions: "];
 
        for (NSString* permission in result.permissions){
            [dialog appendFormat:@"%@, ", permission];
        }
 
        NSString * label = @"Access Token is Valid";
        UIAlertController *alertController;
        alertController = [UIAlertController alertControllerWithTitle:label message:text preferredStyle:UIAlertControllerStyleAlert];
 
        UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:ok];
 
        [self presentViewController:alertController animated:YES completion:nil];
    }
}];

# 異なるキューで完了ブロックを実行する

verifyTokenWithCompletionメソッドはメインキューで完了ブロックを実行します。異なるキューで完了ブロックを実行するには、verifyTokenWithCallbackQueueメソッドを呼び出してキューを指定します。

[apiClient verifyTokenWithCallbackQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) 
    completion:^(LineSDKVerifyResult * _Nullable result, NSError * _Nullable error) {
...
}];