ニフクラ mobile backendのAndroid SDKでGoogle認証を試す - 準備編

[ニフクラ mobile backend (NCMB)](http://mbaas.nifcloud.com/) エバンジェリストの小山([koyhoge](http://twitter.com/koyhoge))です。

先日6月15日、NCMBの機能に「Google認証」が追加されました。iOSとAndroid用のSDKもそれぞれ、Google認証に対応するため同日アップデートが行われています。

[機能追加のお知らせ](https://mbaas.nifcloud.com/info//2015/06/post-15.html)

これまでSDKの機能として、ユーザーを認証する方式としては

* 独自アカウント
* Twitter連携
* Facebook連携

がサポートされていましたが、今回これに追加してGoogle認証が使えるようになったわけです。ユーザにとって、各サービスそれぞれにアカウント名とパスワードを登録するのは面倒な作業であるという見方もあります。普段より SNS を使用している人にとっては、その SNS の認証基盤を使ってサービスにログインできれば、余分なパスワードを覚えておく必要が減るわけで、サービスの特性によってはユーザのメリットを大きく高めることになるでしょう。

6月15日にリリースされたAndroid用SDKバージョン1.5でGoogle認証のサポートが追加され、その後6月22日にFacebook認証のバグを修正したバージョン1.5.1がリリースされています。

[SDKの変更履歴 (Android)](https://github.com/NIFCLOUD-mbaas/ncmb_android/releases)

この記事では新機能のGoogle認証を実現するアプリをゼロから作成してみます。

今回の記事は2部構成になっていて、この記事は実際にプログラムを作成するまでの準備を行う「準備編」です。後半は「[開発編](http://qiita.com/nifcloud_mb/items/cdf6ef595aad9c8ccac1)」になります。

参考になるページは以下です。

* [クイックスタート (Android)]https://mbaas.nifcloud.com/doc/current/introduction/quickstart_android.html)
* [SDKガイド (Android) : SNS連携](https://mbaas.nifcloud.com/doc/current/sns/google_android.html)

# 準備編

まずはアプリをのコードを書く前に様々な準備が必要なのです。複数のサービスが連携して動作する関係で、あちらで取得した値をこちらで入力してなんてこともありますし、省略するとかえって分かりにくいように思えたので、ざっと全部やってみましょう。この辺のことはすでに分かってるぜーという方は[開発編](http://qiita.com/nifcloud_mb/items/cdf6ef595aad9c8ccac1)に飛んでしまって構いません。

## アプリのパッケージ名を決める
ご存知のように Android アプリには一意のパッケージ名を持っています。Google認証を使うためにはどのアプリに許可するのかを決めるためにパッケージ名を使用するので、まずパッケージ名を決めなければいけません。ただAndroidアプリを作る場合は必ずパッケージ名は決めるものなので、深く考えずにサクッと決めてしまいましょう。

今回つくるアプリは

* org.koyhoge.ncmbgauth

にしました。

## アプリの署名証明書のフィンガープリントを得ておく

これまたご存知のように Android アプリをリリースする際には証明書で署名しなければいけません。この後で説明する「Android用クライアントID」を取得するためには、この証明書のフィンガープリントが必要です。証明書ファイルに対して keytool コマンドを実行することでフィンガープリントを表示することができます。今回はアプリをリリースするつもりはなく手元で動かすだけなので、Android Studio がインストールされる際に自動的に生成される、デバッグビルド用の証明書をつかってフィンガープリントを得ることにしましょう。

デバッグビルド用の証明書は、自分のホームディレクトリの .android/debug.keystore にあります。表示する際にパスワードを聞かれますが、これは「android」に設定されています。

[Signing Your Applications | Android Developers](http://developer.android.com/intl/ja/tools/publishing/app-signing.html#debugmode)

こんな感じでフィンガープリントを表示します。

```lang:shell
$ keytool -list -keystore ~/.android/debug.keystore
キーストアのパスワードを入力してください:

キーストアのタイプ: JKS
キーストア・プロバイダ: SUN

キーストアには1エントリが含まれます

androiddebugkey,2015/05/02, PrivateKeyEntry,
証明書のフィンガプリント(SHA1): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
```

一般に公開するアプリの場合は、自分で証明書を作成してサインをすることになりますので、その証明書ファイルに対してフィンガープリントを取得してください。

ここで得たフィンガープリントは、クライアントIDを取得するときに使うのでメモしておきます。

## Google Developers Consoleでプロジェクトを作る
これから Google Developers Console で色々と作業をしますが、その最終目的は「AndroidアプリのクライアントID」を取得することです。ここ重要!

まず Google Developers Console サイトに行きます。

* [Google Developers Console](https://console.developers.google.com/project)

Googleアカウントでログインすると以下の画面になります。

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/feb8033c-c9d1-f2ce-a36c-333c5621bb26.png)


「プロジェクトを作成」ボタンを押して、新しいプロジェクトを作ります。プロジェクト名は「NCMB Google Auth Example」としました。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/54b857a9-025f-7f0f-afe0-b04000f8c8cd.png)


`プロジェクト選択`ボタンでプロジェクトを開きます。
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/a73c62e8-2590-ac5b-a192-8a7af050e37e.png)

無事にプロジェクトが作成されると、プロジェクトダッシュボード画面になります。

![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/bea327fe-1bd5-2959-03f0-1774e361c7cf.png)

Google認証機能を使うには Google+ の API を許可する必要があるのでその設定をします。
まず、 ` API とサービス` から ` 認証情報 `を選択します。その時、以下の画面が表示されます。

![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/b1674247-9e3f-913d-935a-36cf00bb590d.png)

API の検索ボックスに「plus」と入力します。

![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/a3b0d120-23b6-6281-d45d-e901e3a6af3d.png)

するとAPIの候補にGoogle+が現れるのでそれを選択し、「APIを有効にする」ボタンを押して、Google+ API を有効にします。

![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/9f8f2696-c1db-2b82-6e8c-20f4639870d3.png)



Google+ APIを有効したら、以下の画面となります。

![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/5b4b1252-4f85-c4ed-13e6-f6534c9fe3e8.png)

次に左側の「認証情報」メニューを選択します。クライアントIDは当然ながらまだありません。

![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/3657eda4-64af-43e3-3abc-b3d58cc84bc3.png)
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/3b1a81a9-cc58-7f47-7691-672dce5b10ce.png)

`OAuth 同意画面`画面では `外部`を選択してから`作成`で続きます。
![011.png]
(https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/65c73a0a-2e8d-3cb0-2525-53631efaaae7.png)


次は必須な情報を入力して` 保存して次へ `で続きます。
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/e8b85235-7eee-3fdc-465e-ac12a50f060b.png)

続いて`スコープを追加または削除`で以下と同じな権限を選択して ` 保存して次へ `ボタンをクリックします。
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/83badbfc-c7ee-9e0a-38e7-43e6b1d92044.png)

他のユーザーにアプリをテストする権限を与えるために`+ ADD USERS`ボタンでクリックしてユーザーを追加します。

![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/72744b8f-62af-edba-36b4-d5667de13d3a.png)


詳細情報は以下の画面で表示されます。ダッシュボードに戻りたい場合は `ダッシュボードに戻る`をクリックします。

![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/1f2ed171-42e9-00f7-c817-40aec6a66a0d.png)


## アプリの機能を実装する設定

まずは以下のリンクにアクセスします。

[Start Integrating Google Sign-In into Your Android App](https://developers.google.com/identity/sign-in/android/start-integrating#get-config)

すると以下の画面が現れますので、画面内の「Configure a project」ボタンを押します。

![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/7d6712e1-da71-693b-3e02-c891a95c741d.png)

表示しているダイアログで作成したプロジェクトを選択してから、`NEXT`で続きます。

![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/fe909a62-1157-d813-4ede-654ac42a84e0.png)

`Configure your OAuth client` の画面で `Android` プラットフォームを選択して`Package name`と`SHA-1 signing certificate`を入力します。入力を完了したら、 `CREATE`をクリックします。

![018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/e3f396df-02a4-7f4a-a1a7-b0f98b4c7258.png)


入力した情報は情報画面で表示されます。 `DONE` をクリックして完了します。
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596649/e4b0be36-c53b-0cd5-d7de-52cc43334997.png)


## NCMB のコンソール画面で Google 認証を有効に

これまでの手順で取得した「Android 用クライアントID」を、NCMB の登録アプリに紐付けます。
まずは 以下のリンクから NCMB の管理コンソールにログインします。

https://console.mbaas.nifcloud.com/

左側メニューの「アプリ設定」からすぐ右側の「SNS連携」を選択し、画面中ほどにある「Google連携」の

* 「Google連携の許可」を「許可する」に変更
* 「Google Client ID」に上記で取得したクライアントIDを入力

最後に「保存する」ボタンを押して完了です。

ちょっと長かったですが、これで事前準備はすべて終了です。次の「[開発編](http://qiita.com/nifcloud_mb/items/cdf6ef595aad9c8ccac1
)」では実際にプログラムを作ってGoogle認証を試してみましょう。