日本人なら誰しもが使っているLINEを自分のアプリに組み込めばLINE経由でログインできる。
今回はSwift3でLINEログインをする方法を解説する。
Contents
LINE Business Centerでアプリ登録
まずはLINE Business Centerでビジネスアカウントを作成しよう。
アカウント作成の際の指示に従い、チャンネルも登録する。その際、LINEログインを組み込みたいアプリのBundle IDも設定しておくことも忘れずに!
LINE SDKのInstall
LINE SDK をインストールしよう。Podfileに以下を記述しよう。
pod 'LineSDK, '~> 4.0.2'
記述したら忘れずに pod update か pod install を実行する。
※SDKのバージョンはここ参考 → https://developers.line.me/ios/development-with-sdk-v2#cocoapods
もちろん直接SDKを落としてきてプロジェクトに加えてもいい。その場合は上記ページのどこかから落としてほしい。
プロジェクト設定
frameworkのリンク
アプリのプロジェクト設定を開き、 Build Phases > Link Binary With Libraries へ。ここに、以下の3つのframeworkを加える。
- CoreTelephony.framework
- Security.framework
- LineSDK.framework
LineSDKだけ、この設定画面の +ボタン を押し、 Add Otherを選んで直接frameworkを選択する。
リンカーフラグの追加
Build Settings > Other Linker Flags に -ObjC フラグを追加する。
Keychainの設定
Capabilities > Keychain Sharing を開き、Keychain Groupsを設定する。詳しい設定方法はこちら→ http://qiita.com/itoz/items/cac060f940e67d97ab9d
info.plistの設定
LINE BUSINESS CENTERで取得したチャンネルIDを持ってきて、以下の設定をinfo.plistへ追加する。※1234567890を自分のチャンネルIDで置き換える。
1 2 3 4 5 |
<key>LineSDKConfig</key> <dict> <key>ChannelID</key> <string>1234567890</string> </dict> |
こちらの設定も追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string> </array> </dict> </array> <key>LSApplicationQueriesSchemes</key> <array> <string>lineauth</string> <string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string> </array> |
AppDelegate
LINEログイン後、LINEからアプリが呼ばれるのでハンドルする処理を書く。といっても一行だけというカンタン実装。
1 2 3 4 5 6 7 |
import LineSDK ~~ 省略 ~~ func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return LineSDKLogin.sharedInstance().handleOpen(url) } |
ログイン処理
いよいよログイン処理を実装していく。まずはログイン処理の結果を受け取るdelegate LineSDKLoginDelegate を実装する。その名のとおりLINEログインのdelegateで、ログイン成功やキャンセルされた時に呼ばれる。素直な名前で非常によき。
例えば、LoginViewControllerなるクラスでこのdelegateを実装する場合はこうなる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import LineSDK ~~ 省略 ~~ extension LoginViewController: LineSDKLoginDelegate { func didLogin( _ login: LineSDKLogin, credential: LineSDKCredential?, profile: LineSDKProfile?, error: Error? ) { if let _error = error { Logger.error("error: \(_error.localizedDescription)") // 1. キャンセルあるいは設定ミスなどによりログインできなかった場合の処理 return } guard let _credential = credential, let _profile = profile else { Logger.error("Failed to login by Line. credential or profile is nil.") return } guard let accessToken = _credential.accessToken?.accessToken as? String else { Logger.error("Failed to login by Line. accessToken is not as String.") return } let userName = _profile.displayName let userId = _profile.userID // 2. 後はお好きにログインすべし } } |
キャンセルやエラーでログインできなかった時は上のコードの 1. にやってくる。対して、LINEログインに成功した時は 2. に来るためログイン処理を進めよう。accessTokenやuserName, userIdの抽出方法も書いたけれど必要なければ使わなくていい。
LineSDKLoginDelegateを実装したらログイン処理を書こう。とっても楽ちんに出来る。LoginViewControllerのログインを実行する箇所で以下を呼べばそれでいい。
1 2 |
LineSDKLogin.sharedInstance().delegate = self LineSDKLogin.sharedInstance().start() |
TwitterやFacebookなど他のソーシャルログイン手段と比べるとLINEログインが一番カンタンに実装できる。delegateで実装できる分、コードの綺麗さも一番だ。