LoginSignup
33
30

More than 5 years have passed since last update.

AndroidでLINE SDKを使ってLINE Loginを試してみた

Posted at

はじめに

AndroidでLINE Loginを試してみたのでメモを残しておく。

開発メモ

LINE Business Center でビジネスアカウントを作成

LINE Business CeterでLINE Loginを選択し、Business Accountを作成する。この時点ではまだAndroidアプリを作っていないので、各種Configurationは後ほど。

Business Accountを作成したら、専用ページからAndroid SDKがダウンロードできるので入手しておく。
また、この時点で既にChannel IDが発行されており、Androidのアプリケーションに設定する必要があるので控えておく。

Androidアプリ準備

まずは普通にAndroidアプリを作成。

アプリにSDK組み込み

LINE developersからSDKをダウンロードする。
2016/08/03現在、今は懐かしいjar形式での配布しかありません。

Android Studioで組み込む場合、アプリケーションディレクトリの下に libs とかディレクトリを掘って、ダウンロードしたline-android-sdk-x.x.x.jarを置き、アプリケーションのbuild.gradleに依存を追加すればOK。
(Android Studioで対象のjarを右クリックして Add as Library してもいいですね。)

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile files('libs/line-android-sdk-x.x.x.jar') //これを追加
}

私が試した限りでは、SDKに同梱されているNative Library(libline-sdk-encryption.so)は、単にLoginするだけなら不要でした。

さて、SDKが導入できたら次はAndroidManifestに必要事項を追加します。

まずは当然のごとくInternet Accessが必要です。

    <uses-permission android:name="android.permission.INTERNET" />

続いて、Application Tagの中にLINE Login用のActivityの情報を書きます。
この中の、 {YOUR_CHANNEL_ID} の部分は、先ほどBusiness Accountを作成した際に発行されたChannel IDで置換します。

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- LINE SDK Settings -->
        <activity
            android:name="jp.line.android.sdk.activity.LineAuthCompleteActivity"
            android:configChanges="keyboard|orientation"
            android:exported="true"
            android:screenOrientation="sensor" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="line.{YOUR_CHANNEL_ID}" />
            </intent-filter>
        </activity>
        <activity
            android:name="jp.line.android.sdk.activity.WebLoginActivity"
            android:configChanges="keyboard|orientation"
            android:exported="false"
            android:screenOrientation="sensor" >
        </activity>

        <meta-data
            android:name="jp.line.sdk.ChannelId"
            android:value="{YOUR_CHANNEL_ID}" />
        <meta-data
            android:name="jp.line.sdk.AuthScheme"
            android:value="line.{YOUR_CHANNEL_ID}" />

    </application>

LINE Loginは本家LINEアプリがインストールされている端末ではLINEアプリに飛ばして、LINEアプリから認可情報をもらう際のCallback ActivityとしてLineAuthCompleteActivityを規定している模様です。このActivityは組み込んだjarの中にあるようです。

さて、いよいよアプリケーションロジックの実装です。最もシンプルな形にします。

とりあえずMainActivityでSDKを初期化してLINEアプリに飛ばして、認可情報を返してもらう形にします。

  LineSdkContextManager.initialize(this);
  LineSdkContext sdkContext = LineSdkContextManager.getSdkContext();

  LineAuthManager authManager = sdkContext.getAuthManager();
  LineLoginFuture loginFuture = authManager.login(this);

  loginFuture.addFutureListener(new LineLoginFutureListener() {
      @Override
      public void loginComplete(LineLoginFuture future) {
      switch(future.getProgress()) {
          case SUCCESS:
              Log.d("LineLoginTest", "loginComplete, SUCCESS");
              Log.d("LineLoginTest", "AUTH INFO : " + future.getAccessToken());
              break;
          case CANCELED:
              Log.d("LineLoginTest", "loginComplete, CANCELED");
              break;
          default: // Error
              Log.d("LineLoginTest", "loginComplete, ERROR");
              break;
      }
      }
  });

これをMainActivityのonCreateの中にでも書いておくと、おもむろにLINEアプリの認可画面に遷移します。

Screenshot_2016-08-03-03-36-03.png

さて、これでアプリの準備はできましたが、LINE Developersでアプリの情報を登録しておかないとエラーになります。

LINE developersでアプリの設定

LINE developersで自分のアプリの情報を登録する必要があります。
[LINE Developers] -> [Technical Configuration] で必要な情報を入力します。

Android Package Name

  • アプリケーションのPackage Nameを入力。

Android Package Signature

動作確認

改めてログインを試すと、LogCatに以下のようなLogが出ます。(マスク処理してます)

 D/LineLoginTest: AUTH INFO : AccessToken [mid=xxxxxxxxxx29c7829a0b302xxxxxxxxxx, accessToken=xxxxXXXXxxxxVtMfGdIpGtXIOCd9MUVyQ9bniWCpK6xnfn42jB9NcBreVIRyibuMleVuTI4FhF8Y+rVy5USuXSeWX9qYB/P32muq3D47UpQLIAKKRr3d0KKOIY/L83D8j6sFKyjTgl25PuGqEbItSIgeCQlInbkxxxxXXXXxxxx=, expire=1472755233442, refleshToken=Ha1DeHkCxxxxXXXXxxxx]

midがいわゆるLINEのUser IDで、加えてAccess TokenおよびRefresh Tokenが取れていることがわかります。
本来、これらの情報はClient Applicationで保持すべき情報ではないため、さっさとサーバー側に送ってしまった方が良いです。

OAuthのImplicit Grantフローのようになっていてセキュアではないため、Auth Code Grantが使えるなら使いたいものですが、今のところ調査不足でやり方は不明です。

Source Code

LINE BotとLINE Loginを組み合わせて遊んでみているところなので、それと併せて近日中にGitHubで公開します。

References

33
30
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
30