AndroidアプリにLINEログインを組み込む
このトピックでは、LINEログインの実装方法として、既存のAndroidアプリにLINE SDK for Androidを組み込む方法について説明します。LINEログインの機能を簡単に確認するには、LINEログインのAndroid向けのLINEログインサンプルアプリを利用できます。詳しくは、「サンプルアプリを試してみる」を参照してください。
前提条件
LINE SDK for Androidをビルドして使用するには、以下が必要です。
minSdkVersionを24未満(Android 7.0未満)に設定したい場合は、以前のバージョンのLINE SDK for Androidを利用してください。詳しくは、「Releases」を参照してください。
SDK内のリソースとコンフリクトする可能性があるため、linesdk_で始まるリソースIDは使用しないでください。
以前のバージョンからのアップグレードについて
LINE SDK v4.x以前と最新バージョンの主な違いは以下のとおりです。
- ログインを開始するときに、スコープを指定して、アプリが取得するユーザー情報の種類を明らかにする必要があります。
- ログイン時に
OPENID_CONNECTスコープを指定すると、ユーザー情報を安全に検証するためのIDトークンを取得できます。
LINE SDKに依存性を追加する
LINE SDK for Androidを組み込むには、必要なライブラリをプロジェクトにインポートし、以下の手順に従ってプロジェクトのAndroidマニフェストファイルを設定します。
ライブラリをプロジェクトにインポートする
モジュールレベルのbuild.gradleファイルに、LINE SDKの依存性を追加します。
Androidのコンパイルオプションを追加する
Java 1.8のサポートを有効にします。前述のbuild.gradleファイルに以下の行を追加します。
Androidマニフェストファイルを設定する
アプリがインターネットに接続する必要があることを明示するために、AndroidManifest.xmlファイルにINTERNET権限を追加します。
ログイン呼び出しを行うアクティビティの起動モードがsingleInstanceに設定されていると、onActivityResultコールバックを正しく受け取れない場合があります。
アプリをチャネルにリンクする
アプリをLINEログインのチャネルにリンクするために、LINE Developersコンソールのチャネル設定にある[LINEログイン設定]タブの[ネイティブアプリ]を有効にして、以下の項目を入力します。
- パッケージ名:必須。Google Playストアを起動するためのアプリケーションのパッケージ名です。
- パッケージの署名:省略可能。複数の署名を指定するには、改行で区切ります。
- Android URLスキーム:省略可能。アプリを起動するためのカスタムURLスキームです。

パッケージの署名を設定する
パッケージの署名は、アプリとLINEアプリ間の認証処理を強化するために重要です。パッケージの署名には、デバッグパッケージ署名と、リリースパッケージ署名があります。これらは、SHA-1形式のキーハッシュに関連しています。
デバッグパッケージ署名
デバッグパッケージ署名は、アプリの実行またはデバッグ時に、Android Studioによって自動生成されるデバッグ証明書から生成されます。
リリースパッケージ署名
リリースパッケージ署名は、ストアにアプリをリリースする際に使用するリリース証明書から生成されます。<RELEASE_KEY_ALIAS>と<RELEASE_KEY_PATH>は、実際の値に置き換えてください。
Google Play Consoleを使用してリリースキーハッシュを取得する
Play アプリ署名を使用している場合は、ターミナルでリリースキーハッシュを生成するのではなく、Google Play Consoleから取得したSHA-1証明書フィンガープリントを使用してください。詳しくは、『Play Console ヘルプ』の「Play アプリ署名を使用する」を参照してください。
Google Play Consoleで、[設定] > [アプリ署名]に移動し、SHA-1証明書フィンガープリントの値をコピーします。
LINEログインボタンを追加する
ユーザーがAndroidアプリにログインできるようにするために、LINEロゴがついたログインボタンを作成できます。ユーザーはこのボタンを使ってログインできます。
ログインを実行するには2つの方法があります。
LINE SDKに組み込まれているログインボタンを使う
LINE SDKには定義済みのログインボタンが備わっています。ユーザーが簡単にアプリにログインできるように、以下の手順に従って、アプリのユーザーインターフェイスにログインボタンを追加できます。
- レイアウトXMLファイルにログインボタンを追加します。
- アクティビティまたはフラグメント内のビューに必要なパラメータを設定し、リスナーを割り当てます。
カスタマイズしたログインボタンを使う
デフォルトのログインボタンを使う代わりに、コードを使ってユーザーインターフェイスとログインプロセスをカスタマイズすることもできます。
画像をダウンロードしてプロジェクトに追加する
LINEログインボタンの画像セットには、iOS、Android、デスクトップアプリ用の画像が含まれます。Android向けの画像セットには、複数の画面密度とさまざまな状態のボタンの画像が用意されています。ここでは、Androidフォルダー内の「通常時」と「押下時」のログインボタン画像を使用した例を紹介します。
- LINEログインのボタン画像をダウンロードし、抽出します。
- 各画面密度にあわせて、「通常時」と「押下時」のログインボタンを
drawableフォルダーに追加します。
画像を設定する
画像を使用する前に、ログインボタンのテキストを追加する必要があります。各言語で推奨されるテキストについては、「LINEログインボタンデザインガイドライン」を参照してください。また、LINEアイコンを歪みなく引き伸ばせるようにするために、画像内で引き伸ばせる部分を定義する必要があります。
- 各画像に対して9-patchファイルを作成し、ログインボタンテキストの伸縮する部分を定義します。
- アプリのログイン画面に、望ましいログインボタンテキストと共に、クリックできるテキストビューとしてボタンを追加します。
- ドローアブルフォルダーにselector XMLファイルを追加して、テキストビューの状態に対応する画像を定義します。
ログインアクティビティを開始する
ユーザーがログインボタンをタップすると、アプリはgetLoginIntent()を呼び出してログインインテントを取得し、ログインアクティビティを開始します。このメソッドに、コンテキストとチャネルIDを渡す必要があります。ユーザーがデバイスにLINEをインストール済みの場合、LINEが開き、ユーザーのLINE認証情報の入力なしでログインが実行されます。ユーザーがデバイスにLINEをインストールしていない場合、ブラウザでLINEログイン画面が開きます。ユーザーは、この画面にLINE認証情報(メールアドレスとパスワード)を入力します。
- ボタンのタップを待機するon-clickリスナーを設定します。
onClickのコールバックでLineLoginApiのgetLoginIntent()メソッドを呼び出して、ログインインテントを取得してログインアクティビティを開始します。startActivityForResult()を呼び出してログインインテントとリクエストコードをパラメータとして渡し、認証プロセスを開始します。リクエストコードとは、リクエストを識別するための整数です。
以下は、ユーザーがログインボタンをタップしたときにログインアクティビティを開始する方法の例です。
アプリ連携ログインではなく、ブラウザでLINEログイン画面を開いてユーザーをログインさせたい場合は、getLoginIntentWithoutLineAppAuth()メソッドを使います。
ログイン結果を処理する
ユーザーのログインが完了すると、ログイン結果がアクティビティのonActivityResult()メソッドに返されます。アプリはログイン結果を処理するために、このメソッドをオーバーライドする必要があります。
LineLoginResultオブジェクトのgetResponseCode()メソッドを使用して、LINEログインが成功したかどうかを判定します。ログインに成功した場合、getResponseCode()がSUCCESSを返します。それ以外の値が返った場合は、ログインに失敗したことを意味します。発生したエラーの種類を判別するには、「エラーを制御する」を参照してください。
アプリによるログイン結果の処理方法については、以下を参考にしてください。
アクセストークンを取得する
ログイン結果には、ユーザーのアクセストークンが入ったLineCredential()オブジェクトが含まれています。上の例に示すとおり、以下のコードを使用してアクセストークンを取得できます。
ログイン直後にユーザープロフィールを取得する
ユーザーがログインすると、LINE SDKによって自動的にユーザーのプロフィール情報が取得されます。ユーザーのプロフィール情報には、表示名、ユーザーID、ステータスメッセージ、およびプロフィールメディアのURLが含まれます。LineLoginResultオブジェクトのgetLineProfile()メソッドを呼び出して、この情報にアクセスします。以下のコードは、上の例から引用したものです。ログイン結果からユーザーのプロフィール情報を取得し、インテントに渡す方法を説明しています。
ユーザーIDは各プロバイダーに対してのみ一意です。1人のLINEユーザーは、プロバイダーごとに異なるユーザーIDを持ちます。ユーザーIDでは、異なるプロバイダーを横断してユーザーを識別できません。
ユーザー情報をバックエンドサーバーで利用する
バックエンドサーバーでは、LineProfileオブジェクトから取得できるユーザーIDなどの情報は、利用しないでください。悪意のあるクライアントは、任意のユーザーになりすますために、任意のユーザーIDや不正な情報をバックエンドサーバーに送信できます。
ユーザーIDなどの情報を送信する代わりにアクセストークンを送信し、バックエンドサーバーではアクセストークンからユーザーIDなどの情報を取得します。
通常、バックエンドサーバーでユーザーを識別するために、ユーザーIDや表示名のような、ユーザーのLINEアカウントに登録されている情報を使用します。そのような情報をアプリからバックエンドサーバーに送信する際は、情報を平文で送信するのではなく、アプリで取得したアクセストークンを送信してください。信頼できる情報を安全に送受信するために、アクセストークンを利用してください。バックエンドサーバーでアクセストークンの正当性を検証したり、ユーザー情報をLINEプラットフォームのサーバーから取得したりできます。
アクセストークンの取得方法について詳しくは、「アクセストークンを取得する」を参照してください。
バックエンドサーバーで利用するAPIについては、以下を参照してください。
LineApiClientインターフェイスを使用する
LineApiClientインターフェイスのメソッドを呼び出して、SDKを使用します。これを行うには、lineApiClientのスタティック変数を作成して初期化する必要があります。
- さまざまなメソッドを呼び出すオブジェクトのスタティック変数を作成します。
- アクティビティの
onCreate()メソッドで、lineApiClient変数を以下のとおりに初期化します。初期化にはチャネルIDとコンテキストが必要です。
LINE SDK for Androidのメソッドの実行にはネットワーク通信が伴うため、メインスレッドで呼び出すとNetworkOnMainThreadExceptionsが発生します。AsyncTaskクラスを使ってメソッドを呼び出すことで、この問題を回避できます。