Posted at

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

More than 3 years have passed since last update.


はじめに

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