アプリ開発日誌
2016.07.11
LINE Login Platformを自分のアプリに実装してみよう!〜iOS編〜
こんにちは、松川です。
今日は先日機会があって触ったLINE Login Platformについて書きたいと思います!
※SDKがダウンロードできている前提で進めます
LINE Login Platformとは?
LINEのアカウントを使用したログイン機能を、スマホアプリ・Webアプリに組み込むためのプラットフォームです。
最近はアプリやWebサイトで、会員登録の煩雑なフォーム入力の手間を省くためによく使用されいますよね。
開発環境
- Xcode7.3
- Swift2.2
- iOS9〜
全体の実装するまでの手順
- LINE Business Centerに登録
- Channelを作成
- iOS/Android SDKをダウンロード
- 実装 ← 今回はココ
さっそく導入していきましょう!
LINE Frameworkをプロジェクトに追加
ダウンロードしたSDKのZipを解凍すると、下記ファイルが入っているのでプロジェクトに追加します
- LineAdapter.framework
- LineAdapterLogin.framework
- LineAdapterUI.framework
- LineAdapterUI.bundle
その他に必要なFrameworkをプロジェクトに追加
プロジェクトのGeneralからLinked frameworks and Librariesで、下記Frameworkを追加します
- Foundation.framework
- UIKit.framework
- Security.framework
- CoreTelephony.framework
- CoreGraphics.framework
- CoreText.framework
その他の設定
プロジェクトで以下の設定を行います
- リンカのフラグ設定
- Build SettingsにあるOther Liner Flagsの項目に「-ObjC」を追加してください
- URLタイプの設定
- Info > URL TypesでURLスキームを設定してください
- ここで注意する事は、スキームの先頭に「line3rdp.」をつける必要があります
- ここで指定したスキーム名は、Channelのアプリ設定のURL Scheme欄にも同様の名前で設定してください
設定ファイルの作成
LINE frameworkを使用するにあたって、自分のChannel IDを設定ファイルに記載する必要があります。
.plistを作成して、下記のように自分のChannel IDを指定してください
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ChannelId</key> <string>123456789</string> </dict> </plist>
iOS9以降の設定
iOS9からATS(App Transport Security)という機能がついたので、LINEアプリが弾かれないようにホワイトリストを作成します。
ATSを無効にしても(たぶん?)大丈夫ですが、2017年1月1日から全てのiOSアプリにATS対応が必須になりそうなのであまり得策ではないでしょう。
LINEアプリをホワイトリストに追加
<key> LSApplicationQueriesSchemes </key> <array> <string> lineauth </string> <string> line3rdp.sample </string> </array>
LINEドメインをホワイトリストに追加
<key> NSAppTransportSecurity </key> <dict> <key> NSExceptionDomains </key> <dict> <key> obs.line-apps.com </key> <dict> <key> NSIncludesSubdomains </key> <true/> <key> NSThirdPartyExceptionAllowsInsecureHTTPLoads </key> <true/> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> <key> dl.profile.line-cdn.net </key> <dict> <key> NSIncludesSubdomains </key> <true/> <key> NSThirdPartyExceptionAllowsInsecureHTTPLoads </key> <true/> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> <key> dl.profile.line.naver.jp </key> <dict> <key> NSIncludesSubdomains </key> <true/> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> <key> lcs.naver.jp </key> <dict> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> <key> scdn.line-apps.com </key> <dict> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> <key> access.line.me </key> <dict> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> <key> api.line.me </key> <dict> <key> NSThirdPartyExceptionRequiresForwardSecrecy </key> <false/> </dict> </dict> </dict>
LINEの認証結果を受信できるよう設定
AppDelegateクラスに下記を追加しましょう
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { LineAdapter.handleLaunchOptions(launchOptions) return true } func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { return LineAdapter.handleOpenURL(url) } func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool { return LineAdapter.handleOpenURL(url) }
LineAdapterのインスタンスを生成
let adapter: LineAdapter = LineAdapter.initWithConfigFile() // LINEログイン時に結果を返却してくれる通知を設定 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.authorizationDidChange(_:)), name: LineAdapterAuthorizationDidChangeNotification, object: nil) extension ViewController { func authorizationDidChange(notification: NSNotification) { let adapter = notification.object as! LineAdapter if adapter.authorized { // ログイン成功 alert("Login success!", message: "") return } if let error = notification.userInfo?["error"] as? NSError { // ログイン失敗 alert("Login error!", message: error.localizedDescription) } }
Login
if adapter.isAuthorized() { // ログイン済み return } if !adapter.canAuthorizeUsingLineApp() { // LINEアプリがインストールされていない return } // LINEアプリで認証 adapter.authorize()
Logout
adapter.unauthorize()
プロフィールを取得
プロフィール取得APIで取得できる項目は下記です。
友達一覧、グループ情報は取得できません。
- LINEで設定された名前
- LINEで設定されたプロフィール画像
- LINEで設定されたひとこと
- LINE上の内部的な識別子
// プロフィール取得 adapter.getLineApiClient().getMyProfileWithResultBlock {[unowned self] (profile, error) -> Void in if error != nil { self.alert("Error occured!", message: error.localizedDescription) return } let displayName = profile["displayName"] as! String let mid = profile["mid"] as! String let picture = profile["pictureUrl"] as! String let statusMessage = profile["statusMessage"] as! String }
以上が、LINE Loginの実装でした。
まとめ
今日LINEの普及率は全世代で85%以上(マイナビニュースから引用)と、とても多くの人達が利用しています。
またLINE Login Platformを取り入れる事でコンバージョンの向上にも繋がるので、会員登録をさせているアプリ・WEBサイトをお持ちの方は導入をご検討してみてはどうでしょうか!