# iOSアプリにLINEログインを組み込む

SDKをインストールしてプロジェクトを設定したら、LINEログインを使ったユーザーエクスペリエンスの向上に取りかかることができます。

# LineSDKヘッダーファイルをインポートする

LINE SDKが使用されるすべてのファイルにLineSDK.hファイルをインポートします。

#import <LineSDK/LineSDK.h>

# ログイン処理を実行する

ユーザーがiOSアプリにログインできるようにするために、LINEロゴがついたログインボタンを作成できます。ユーザーはこのボタンを使ってログインできます。

ログインを実行するには2つの方法があります。

# LINE SDKに組み込まれているログインボタンを使う

LINE SDK for iOS Objective-Cには定義済みのログインボタンが備わっています。LineSDKLoginButtonクラスは「LINEログインボタン デザインガイドライン」で推奨されるスタイルに準拠しています。ユーザーが簡単にアプリにログインできるように、アプリのユーザーインターフェイスにログインボタンを追加できます。

ログインボタンをビュー階層に追加するには、以下の手順に従います。

  1. LineSDKLoginButtonオブジェクトを作成します。
  2. LineSDKLoginButtonオブジェクトのdelegateプロパティとpermissionsプロパティを設定します。
  3. LineSDKLoginButtonオブジェクトを追加します。

コードは以下のようになります。

@interface LoginViewController() <LineSDKLoginButtonDelegate>
@end

@implementation LoginViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    LineSDKLoginButton *loginBtn = [[LineSDKLoginButton alloc] init];
    loginBtn.delegate = self;
    loginBtn.permissions = @[@"profile", @"openid", @"email"];

    [self.view addSubview:loginBtn];
    // ... additional setup for login button layout
}

//...

@end

ユーザーがログインボタンをタップすると、適切なログインフローで認証されます。ユーザーがデバイスにLINEをインストール済みの場合、LINEからアプリにユーザーのLINE認証情報が渡されます。ユーザーはこの認証情報を使って認証を受けます。そうでない場合、ブラウザでLINEログイン画面が開きます。ユーザーは、この画面にLINE認証情報を入力します。

ログイン状態を受信するには、LineSDKLoginButtonDelegateプロトコルの関連するデリゲートメソッドを以下のように実装します。

@implementation LoginViewController

// ...

- (void)loginButton:(LineSDKLoginButton *)button didFailLoginWithError:(nullable NSError *)error
{
    NSLog(@"Error, %@", error);
}

- (void)loginButton:(LineSDKLoginButton *)button
 didSucceedLoginWithCredential:(nullable LineSDKCredential *)credential
            profile:(nullable LineSDKProfile *)profile
{
    NSString *result = [NSString stringWithFormat:@"Result : %@ \n %@", credential, profile];
    NSLog(@"Login Success: %@", result);
    //...
}

@end

ログイン処理が完了すると、デリゲートメソッドのいずれかがログイン結果と共に呼び出されます。

# 独自のコードを使う

デフォルトのログインボタンを使う代わりに、コードを使ってユーザーインターフェイスとログインプロセスをカスタマイズすることもできます。

# LINEログインのデリゲートを設定してログイン結果を処理する

ログイン処理の結果を待機して処理するために、ログイン結果を受け取るview controllerにデリゲートを設定します。ユーザーがログインした後に結果を受け取ると、NSStringsに含まれるユーザーのアクセストークン、ユーザーID 、およびユーザープロフィール情報を抽出できます。ユーザープロフィールには、ユーザーの表示名、ステータスメッセージ、およびプロフィール画像のURLが含まれます。

  1. View controllerのviewDidLoadメソッドでデリゲートを設定します。

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        
        ...
        
        // Set the LINE Login Delegate
        [LineSDKLogin sharedInstance].delegate = self;
    }
    
  2. ログイン結果を処理してデータを保存するには、LineSDKLoginDelegateプロトコルのdidLoginメソッドを使用します。

    #pragma mark LineSDKLoginDelegate
    
    - (void)didLogin:(LineSDKLogin *)login
        credential:(LineSDKCredential *)credential
            profile:(LineSDKProfile *)profile
            error:(NSError *)error
    {
        if (error) {
            // Login failed with an error. Use the error parameter to identify the problem.
            NSLog(@"Error: %@", error.localizedDescription);
        }
        else {
    
            // Login success. Extracts the access token, user profile ID, display name, status message, and profile picture.
            NSString * accessToken = credential.accessToken.accessToken;
            NSString * userID = profile.userID;
            NSString * displayName = profile.displayName;
            NSString * statusMessage = profile.statusMessage;
            NSURL * pictureURL = profile.pictureURL;
            
            NSString * pictureUrlString;
            
            // If the user does not have a profile picture set, pictureURL will be nil
            if (pictureURL) {
                pictureUrlString = profile.pictureURL.absoluteString;
            }
                    
        }
    }
    

    didLoginメソッドのパラメータから、以下の情報を取得できます。

    パラメータ 説明
    credential ユーザーのアクセストークン
    profile ユーザーのプロフィール情報
    error ログインエラー情報。ログインが成功すると、nilになります。

# 独自のコードを使ってログインする

独自のコードを使ってログインするには、startLoginメソッドを呼び出します。コールバック関数で共通インスタンスの[LineSDKLogin sharedInstance]が取得され、先に定義したLineSDKLoginDelegateプロトコルのメソッドで結果が制御されます。

- (IBAction)startLogin:(id)sender {
    NSLog(@"Button pressed: %@");
    [[LineSDKLogin sharedInstance] startLoginWithPermissions:@[@"profile", @"friends", @"groups"]];
}

ログインインターフェイスの設計については、「LINEログインボタン デザインガイドライン」を参照してください。このページからは、LINEログインボタンの画像もダウンロードできます。

# LINE SDK 4.x for iOSからアップグレードする場合の注意事項

startLoginWithPermissionsメソッドを呼び出すときは、必ずpermissionsパラメータを指定してください。そうしない場合は、LINEプラットフォームから以下のエラーが返されます。

Error Domain=LineSDKInternalErrorDomain Code=1 "'scope' is not specified." UserInfo={NSLocalizedDescription='scope' is not specified.}

このメッセージ中の「Scope」は、LINE SDK for iOS Objective-Cの「permissions」を意味します。startLoginWithPermissionsメソッドについて詳しくは、『LINE SDK for iOS Objective-Cリファレンス』の「-startLoginWithPermissions:」を参照してください。

# LineSDKAPIオブジェクトを初期化する

LINEプラットフォームはLineSDKAPIインスタンスを介して呼び出されます。LINEプラットフォームを呼び出すには、LineSDKAPIオブジェクトを初期化します。

apiClient = [[LineSDKAPI alloc] initWithConfiguration:[LineSDKConfiguration defaultConfig]];