# ユーザーを管理する

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

# ユーザープロフィールを取得する

profileスコープを指定してログインリクエストを送信すると、ユーザーのLINEプロフィールを取得できます。ユーザープロフィールには、ユーザーID、表示名、プロフィールメディア(画像または動画)、およびステータスメッセージが含まれます。

getProfileWithCompletionメソッドを以下のように呼び出します。

[apiClient getProfileWithCompletion:^(LineSDKProfile * _Nullable profile, NSError * _Nullable error) {
      
    if(error){
          
        NSLog(@"Error getting profile: %@", error.description);
  
    } else {
       
        LineSDKProfile * profileInformation = profile;
  
        NSString * displayName = profileInformation.displayName;
        NSString * userID = profileInformation.userID;
        NSString * statusMessage = profileInformation.statusMessage;
        NSURL * pictureURL = profileInformation.pictureURL;
  
        NSString * pictureUrlString
  
        // If the user does not have a profile picture set, pictureURL will be nil
        if(pictureURL){
            NSString * profilePictureUrlString = profilePictureURL.absoluteString;
        }
  
    }
      
}];

APIコールが成功すると、ユーザーのプロフィール情報がprofile引数として返され、error引数はnilになります。そうでない場合は、原因についてerror引数から情報を得ることができます。

getProfileWithCompletionメソッドでは、ログイン時の値が取得されますが、ユーザーはLINEに設定した表示名、プロフィールメディア、およびステータスメッセージをいつでも変更できます。ユーザーを識別するには、変更できないuserIDプロパティの値を使用します。

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

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

[apiClient getProfileWithCallbackQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
    completion:^(LineSDKProfile * _Nullable profile, NSError * _Nullable error) {
...
}];

# IDトークンを使ってユーザーを識別する

OpenID Connect (opens new window) 1.0仕様は、OAuth 2.0プロトコル上に付与されるアイデンティティレイヤーです。OpenID Connectを使えば、LINEプラットフォームと安全に情報を交換できます。現在、OpenID Connect仕様に準拠するIDトークンを発行することにより、LINEプラットフォームからユーザープロフィールとメールアドレスを取得できます。

# メールアドレス取得権限を申請する

LINEログインを使ってログインするユーザーに、メールアドレスを取得する権限をアプリに付与するよう要求できます。これを行うには、LINE Developersコンソールで権限を申請します。詳しくは、『LINEログインドキュメント』の「メールアドレス取得権限を申請する」を参照してください。

# OpenIDとメールアドレスのスコープを指定したログイン

メールアドレス取得権限を付加したチャネルでは、以下のように、openidスコープとemailスコープを指定してユーザーにログインさせ、IDトークンからユーザーのメールアドレスを取得できます。

NSArray *permissions = @[@"profile", @"openid", @"email"];
[[LineSDKLogin sharedInstance] startLoginWithPermissions:permissions];

IDトークンは署名付きのJSONウェブトークン (opens new window)です。異常なデータを防ぐため、LINE SDKによりトークンの署名と有効期限が検証されます。検証が成功すると、IDトークンを含むLineSDKCredentialオブジェクトを引数として、didLoginデリゲートメソッドが以下のように呼び出されます。

- (void)didLogin:(LineSDKLogin *)login
      credential:(LineSDKCredential *)credential
         profile:(LineSDKProfile *)profile
           error:(NSError *)error
{
    NSLog(@"User Email: %@", credential.IDToken.email);
}

# ユーザーデータを慎重に扱う

ユーザーの機密情報をプレーンテキストでアプリやサーバーに保存したり、セキュリティで保護されていないHTTP通信で転送したりしないでください。アクセストークン、ユーザーID、ユーザー名など、IDトークンに含まれるデータは機密情報に該当します。LINE SDKではユーザーのアクセストークンがキーチェーンに保存されます。必要に応じて、認可後に以下のコードでアクセストークンを取得できます。

LineSDKAccessToken *token = [LineSDKConfiguration defaultConfig].currentAccessToken;

IDトークンはログイン時にのみ発行されます。IDトークンを更新するには、ユーザーに再ログインさせる必要があります。ただし、ログインリクエストにprofileスコープを指定する場合は、getProfileWithCompletionメソッドを呼び出してユーザーのプロフィール情報を取得できます。

# ユーザーをログアウトする

アプリからユーザーをログアウトできます。より良いユーザー体験のために、ユーザーがアプリからログアウトする手段を提供することをお勧めします。

アクセストークンを無効化してユーザーをアプリからログアウトするには、logoutWithCompletionメソッドを呼び出します。アクセストークンを無効にすると、ユーザーはアプリからログアウトされます。ログアウトした後、ユーザーは再度ログインプロセスを経てログインする必要があります。

[apiClient logoutWithCompletion:^(BOOL success, NSError * _Nullable error){
      
    if (success){
        // Logout Succeeded
    } else {
        // Logout Failed
        NSLog(@"Logout Failed: %@", error.description);
    }
      
}];

APIコールが成功すると、success引数はYESerror引数はnilになります。そうでない場合は、原因についてerror引数から情報を得ることができます。

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

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

[apiClient logoutWithCallbackQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
    completion:^(BOOL success, NSError * _Nullable error){
...
}];