FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

KotlinでNCMBを使う:メールアドレス登録/ログインを使う

f:id:mbaasdevrel:20181224100424p:plain

AndroidではJavaの他、Kotlinも公式言語としてサポートされています。KotlinはJVM上で動作する静的な型付け言語で、言語体系がSwiftに似ています。そのため、Swiftに慣れた開発者であればすぐに習得できるかと思います(似ているので逆に戸惑う部分もあるのですが)。

今回はAndroid Studio 3系を使い、KotlinでNCMBを利用する方法を解説します。今回はメールアドレスの登録とログイン処理についてです。

Android Studioでプロジェクトを作成する

Android Studio 3系からKotlinプラグインをインストールせずにKotlinプロジェクトを作成できるようになりました。まずは新しいプロジェクトを作成します。

f:id:mbaasdevrel:20181207094347p:plain

新しいプロジェクトを作成する際にInclude Kotlin Supportをチェックします。これでKotlinベースのコードが生成されます。

f:id:mbaasdevrel:20181207094507p:plain

他はデフォルトのままです。Phone and Tabletを対象にし、 APIはある程度新しいもの(今回は23)を選択します。

f:id:mbaasdevrel:20181207094525p:plainf:id:mbaasdevrel:20181207094525p:plain

さらにベースは何もなし、Empty Activityを選択します。

f:id:mbaasdevrel:20181207094536p:plain

Activity NameはMainActivity、Layout Nameはactivity_mainというのもデフォルトのままです。

f:id:mbaasdevrel:20181207094555p:plain

NCMBを追加する

プロジェクトが作成されたらファイルツリーを右クリックして、Open Module Settingsを選択します。

f:id:mbaasdevrel:20181207094605p:plain

開いたウィンドウで、上にあるプラスアイコンをクリックします。

f:id:mbaasdevrel:20181207094652p:plain

そしてImport .JAR/.AAR Packageを選択します。

f:id:mbaasdevrel:20181207094710p:plain

次のダイアログでNCMB.jarを選択します。NCMB.jarはこちらからダウンロードし、解凍します。

f:id:mbaasdevrel:20181207094721p:plain

追加すると、左側のメニューでappの下にNCMBが追加されます。ついでDependenciesをクリックします。

f:id:mbaasdevrel:20181207094843p:plain

下にあるプラスアイコンをクリックし、Module dependencyを選択します。

f:id:mbaasdevrel:20181207094859p:plain

モジュールの選択でNCMBを選びます。

f:id:mbaasdevrel:20181207094908p:plain

一覧にNCMBが追加されたら完了です。

f:id:mbaasdevrel:20181207094941p:plain

セキュリティ設定を変更する

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を開くとパスワードの入力画面になります。ここでパスワードを設定します。

f:id:mbaasdevrel:20181224100341p:plain

パスワードを設定すると会員登録が完了します。

f:id:mbaasdevrel:20181224100400p:plain

ログイン処理

会員登録が完了したらログイン処理を行います。これは登録したメールアドレスとパスワードを使って行います。

f:id:mbaasdevrel:20181224100424p:plain

処理は 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にアップロードしてあります。実装時の参考にしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。