LINE Login Platformを自分のアプリに実装してみよう!〜iOS編〜

150415021618_TP_V

こんにちは、松川です。

今日は先日機会があって触ったLINE Login Platformについて書きたいと思います!

※SDKがダウンロードできている前提で進めます

 

LINE Login Platformとは?

LINEのアカウントを使用したログイン機能を、スマホアプリ・Webアプリに組み込むためのプラットフォームです。

最近はアプリやWebサイトで、会員登録の煩雑なフォーム入力の手間を省くためによく使用されいますよね。

 

開発環境

  • Xcode7.3
  • Swift2.2
  • iOS9〜

 

全体の実装するまでの手順

  1. LINE Business Centerに登録
  2. Channelを作成
  3. iOS/Android SDKをダウンロード
  4. 実装 ← 今回はココ

 

さっそく導入していきましょう!

 

LINE Frameworkをプロジェクトに追加

ダウンロードしたSDKのZipを解凍すると、下記ファイルが入っているのでプロジェクトに追加します

  • LineAdapter.framework
  • LineAdapterLogin.framework
  • LineAdapterUI.framework
  • LineAdapterUI.bundle

 

その他に必要なFrameworkをプロジェクトに追加

プロジェクトのGeneralからLinked frameworks and Librariesで、下記Frameworkを追加します

LinkedFrameworks

  • 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欄にも同様の名前で設定してください

URLTypes

 

設定ファイルの作成

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対応が必須になりそうなのであまり得策ではないでしょう。

アップル、「iOS」アプリにHTTPS接続を義務づけへ–2017年1月から

japan.cnet.com

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サイトをお持ちの方は導入をご検討してみてはどうでしょうか!

Teruhiro Matsukawa
iOS/Androidの開発を担当してます。
日々、体脂肪率と奮闘中です。
糖質取りすぎダメ、絶対。

Egg Device Application

東京品川のスマホアプリ開発会社です。
一般アプリ、業務用アプリからVRまで開発可能。

ライター一覧

求人情報

スマホアプリ開発の
相談を受け付けています

メールでのご相談

お電話でのご相談
TEL 03-5422-7524
平日10:00~18:00