はじめに
Kii Cloudで認証を実装しているAndroidアプリにFacebook認証を追加してみました。初心者の自分は公式サイトの記述通りにやっただけではうまくいかなかったので、つまづいた手順をメモしています。
なお、Kii Cloud 連携を行うには https://developer.kii.com/ からユーザ登録のうえAndroidアプリを登録しSDKをダウンロードしておく必要があります。
Facebook アプリケーションIDの発行
まずFacebook App ID を取得するためfacebook for Developerにログインし、開発者として登録したことがなければ「Register Now」ボタンから登録を開始します。初回はSMSまたは電話での認証が必要のようです。次に「+Add A New App」ボタンからプラットフォームにAndroidを選択し、新規アプリを追加します。その後はウィザードに従って設定を完了するとApp IdとApp Secretが発行されます。
Kii アプリケーションの設定
FacebookのApp IDが発行されたら、Kii Cloud開発者ポータルより Facebook App ID の登録を行います。アプリケーションコンソール上で対象アプリを選択し、右上の歯車アイコンから "Edit->Setting" の順にクリックしアプリ設定画面を開きます。
次に"Social Network Connector" セクションに Facebook App ID と App Secret を設定します。
Android Studioで事前準備
AndroidManifest.xmlに下記2つのactivityを追記します。
<activity android:name="com.kii.cloud.storage.social.connector.KiiSocialNetworkConnectorLoginActivity" android:label="@string/app_name" />
<activity android:name="com.facebook.LoginActivity" />
build.gradeにも下記を追記します。
compile 'com.facebook.android:facebook-android-sdk:3.20.0'
...とここまでは特に問題なく進みます。
認証部分を実装
公式ドキュメントによると「コードに数行追加するだけで簡単に実現できます」とのことですが、ここに記載されている認証部分をサンプル通りに書いても動きません。そこでいろいろぐぐるとこのお知らせが見つかり、アクセストークンの取得が必要とのこと。GitHubのサンプルを自分のApp Idに書き換えると問題なくFacebook認証できました。
補足:既存の認証との共存
しかし、問題は既存のKii認証とどう共存させるかです。FacebookとKiiのアクセストークンの概念の違いがわからず混乱しましたが、自分なりに色々解釈したところ下記のように動作しているようです(間違ってたら指摘ください)。
- Facebookでログイン
- Kii上にユーザが作成され、アクセストークンもできる
- これ以降はFacebookは意識する必要なし
しかし、これを信じてログアウトはKiiの認証だけ意識した実装にしていると、アプリからログインできないという問題が起こりました。
そこでログアウト処理に下記のfacebookログアウト処理を追加したら無事ログアウトできました。
Session s = Session.getActiveSession();
s.closeAndClearTokenInformation();
KiiUser.logOut();
どうやらGitHubのサンプルではfacebookのセッションが残っていた場合に自動ログインするという親切な仕組みになっていたためのようです。