AndroidではJavaの他、Kotlinも公式言語としてサポートされています。KotlinはJVM上で動作する静的な型付け言語で、言語体系がSwiftに似ています。そのため、Swiftに慣れた開発者であればすぐに習得できるかと思います(似ているので逆に戸惑う部分もあるのですが)。
今回はAndroid Studio 3系を使い、KotlinでNCMBを利用する方法を解説します。今回はメールアドレスの登録とログイン処理についてです。
Android Studioでプロジェクトを作成する
Android Studio 3系からKotlinプラグインをインストールせずにKotlinプロジェクトを作成できるようになりました。まずは新しいプロジェクトを作成します。
新しいプロジェクトを作成する際にInclude Kotlin Supportをチェックします。これでKotlinベースのコードが生成されます。
他はデフォルトのままです。Phone and Tabletを対象にし、 APIはある程度新しいもの(今回は23)を選択します。
さらにベースは何もなし、Empty Activityを選択します。
Activity NameはMainActivity、Layout Nameはactivity_mainというのもデフォルトのままです。
NCMBを追加する
プロジェクトが作成されたらファイルツリーを右クリックして、Open Module Settingsを選択します。
開いたウィンドウで、上にあるプラスアイコンをクリックします。
そしてImport .JAR/.AAR Packageを選択します。
次のダイアログでNCMB.jarを選択します。NCMB.jarはこちらからダウンロードし、解凍します。
追加すると、左側のメニューでappの下にNCMBが追加されます。ついでDependenciesをクリックします。
下にあるプラスアイコンをクリックし、Module dependencyを選択します。
モジュールの選択でNCMBを選びます。
一覧にNCMBが追加されたら完了です。
セキュリティ設定を変更する
AndroidManifest.xml
を開いて設定を追加します。これはインターネット接続を用いる設定です。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.moongift.ncmbupdatedatastore"> <!-- 以下の uses-permission を追加 --> <uses-permission android:name="android.permission.INTERNET" /> <application : /> </manifest>
これで準備完了です。
SDKをインポートする
まずNCMBを利用する画面のKotlinファイルを開きます。今回は MainActivity.kt
を編集します。今回は基礎になる NCMB クラスと、データストアで用いる NCMBObject クラスを読み込んでいます。
import com.nifcloud.mbaas.core.*
コードの解説
そして override fun onCreate
の内容を編集します。なお、今回は BuildConfig を使ってキーをコードから分離しています。処理としては画面上に配置した二つのボタンに対して会員登録とログイン用のイベントを設定しています。ログインしている場合は user.isAuthenticated
がtrueになります。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) NCMB.initialize(applicationContext, BuildConfig.APPLICATION_KEY, BuildConfig.CLIENT_KEY) // メールアドレス登録処理 var btnRegister : Button = findViewById(R.id.btnRegister) btnRegister.setOnClickListener { this.signUp() } // ログイン処理 var btnSignIn : Button = findViewById(R.id.btnSignIn) btnSignIn.setOnClickListener { this.btnSignIn() } // すでにログインしている場合 var user = NCMBUser.getCurrentUser() var lblStats = findViewById<TextView>(R.id.lblStats) if (user.isAuthenticated) { lblStats.text = "Login from ${user.mailAddress}" } }
メールアドレス登録処理
メールアドレスを登録するのは NCMBUser.requestAuthenticationMailInBackground
になります。
fun signUp() { var email = findViewById<TextView>(R.id.txtEmail).text.toString() var lblStats = findViewById<TextView>(R.id.lblStats) NCMBUser.requestAuthenticationMailInBackground(email, { e -> if (e != null) { lblStats.text = e.localizedMessage } else { lblStats.text = "Sent email to ${email}." } }) }
この後、メールが届きますので、そのURLをクリックします。URLを開くとパスワードの入力画面になります。ここでパスワードを設定します。
パスワードを設定すると会員登録が完了します。
ログイン処理
会員登録が完了したらログイン処理を行います。これは登録したメールアドレスとパスワードを使って行います。
処理は NCMBUser.loginWithMailAddressInBackground
を使います。
fun btnSignIn() { var email = findViewById<TextView>(R.id.txtEmail).text.toString() var password = findViewById<TextView>(R.id.txtPassword).text.toString() var lblStats = findViewById<TextView>(R.id.lblStats) NCMBUser.loginWithMailAddressInBackground(email, password, { user, e -> if (e != null) { lblStats.text = e.localizedMessage } else { lblStats.text = "Login successful by ${email}" } }) }
ログインが完了すればユーザオブジェクトが返ってきて完了です。
mBaaSではパスワード変更APIがなく、メールアドレス確認を経由して行うしかありません。そのため会員管理を行う上でメールアドレス登録は必須とも言えます(またはソーシャルログインが使えます)。ぜひこの方法を覚えてください。
今回のコードはgoofmint/kotlin_NCMB_Auth_Emailにアップロードしてあります。実装時の参考にしてください。