[JAVA] J'ai essayé d'utiliser "nifty cloud mobile backend" et l'authentification "Firebase" sur Kotlin + Android

introduction

Comme annoncé lors de Google I / O 2017, Kotlin a rejoint la langue officielle d'Android, utilisant ainsi mBaaS (mobile Backend as a Service) ncmb (nifty cloud mobile backend) et Firebase, immédiatement avec kotlin J'ai essayé la programmation Android. mBaaS est un service qui fournit des fonctions à usage général (gestion des utilisateurs, stockage de données, notification push, etc.) qui sont souvent utilisées pour le développement d'applications à partir du cloud, mais cette fois, nous présenterons les fonctions d'authentification des utilisateurs des deux.

Environnement de développement

ncmb(nifty cloud mobile backend)

Créer une nouvelle application

Tout d'abord, créez une nouvelle application à partir du tableau de bord. 図1.png

スクリーンショット 2017-07-16 13.03.38.png Lorsque vous créez une nouvelle application, vous recevrez une clé d'application et une clé client. スクリーンショット 2017-07-16 12.52.52.png

Vérification de l'adresse e-mail

Le déroulement de la vérification de l'adresse e-mail ncmb est le suivant.

  1. L'utilisateur entre l'adresse e-mail pour demander l'authentification
  2. Un e-mail contenant l'URL de l'écran d'inscription des membres sera envoyé à l'adresse e-mail que vous avez saisie.
  3. Enregistrez le mot de passe sur l'écran d'inscription des membres et inscrivez-vous en tant que membre.
  4. Vous pouvez vous connecter avec votre adresse e-mail et votre mot de passe

Implémentation de l'application

MainActivity.kt



class MainActivity : AppCompatActivity(), View.OnClickListener{

    //constant
    companion object Factory {
        // ApplicationKey
        val APP_KEY = "YOUR APP KEY" //Paramètre de clé d'application émis lors de la création d'une nouvelle application
        // ClientKey
        val CLIENT_KEY = "YOUR CLIENT KEY" //Paramètres de clé client émis lors de la création d'une nouvelle application
    }

    private var mEmailField: EditText? = null
    private var mPasswordField: EditText? = null
    private var loginMailAddress: EditText? = null
    private var loginPassword: EditText? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //**********Paramètres de clé API et initialisation du SDK**********
        NCMB.initialize(this.baseContext, APP_KEY, CLIENT_KEY)

        //Inscription des membres
        mEmailField = findViewById(R.id.MailAddress) as EditText
        mPasswordField = findViewById(R.id.Password) as EditText
        //S'identifier
        loginMailAddress = findViewById(R.id.login_MailAddress) as EditText
        loginPassword = findViewById(R.id.login_Password) as EditText

        //Bouton INSCRIPTION
        findViewById(R.id.Button)?.setOnClickListener(this)

        //Touche LOGIN
        findViewById(R.id.login_Button)?.setOnClickListener(this)

        //Bouton LOGOUT
        findViewById(R.id.logout_Button)?.setOnClickListener(this)
        }
    }

    /**
     *Lorsque le bouton est cliqué
     */
    override fun onClick(v : View) {
        val id = v.id
        if(id == (R.id.Button)) {
            //Inscription des membres
            createAccount(mEmailField?.text.toString())
        } else if(id == (R.id.login_Button)) {
            //S'identifier
            signIn(loginMailAddress?.text.toString(), loginPassword?.text.toString())
        } else if(id == (R.id.logout_Button)) {
            //Se déconnecter
            signOut()
        }

    }

Processus d'inscription des membres

Le processus d'inscription des membres est effectué par la méthode createAccount qui a un e-mail de type String comme argument, qui est appelé lorsque le bouton INSCRIPTION est enfoncé.

MainActivity.kt


private fun createAccount(email: String) {
        NCMBUser.requestAuthenticationMailInBackground(email) { e ->
                if(e == null) {
                    println("Authentification des e-mails utilisateur réussie")
                } else {
                    println("Échec de l'authentification de la messagerie de l'utilisateur")
                }
        }
    }

Si vous l'écrivez en java, il ressemblera à ceci. La description est plus redondante que kotlin. La méthode requestAuthenticationMailInBackground de NCMBUser utilise l'adresse e-mail saisie par l'utilisateur et [DoneCallback](http://www.programcreek.com/java-api-examples/index.php?source_dir=ncmb_android-master/ncmb-core/src] comme arguments. Il prend une interface (/main/java/com/nifty/cloud/mb/core/DoneCallback.java) comme argument. Ici, [DoneCallback](http://www.programcreek.com/java-api-examples/index.php?source_dir=ncmb_android-master/ncmb-core/src/main/java/com/nifty/cloud/mb/ Une classe anonyme qui implémente l'interface core / DoneCallback.java) est générée et transmise comme argument.

MainActivity.java


private void createAccount(String email) {
  NCMBUser.requestAuthenticationMailInBackground(email, 
   new DoneCallback() {
    @Override
    public void done(NCMBException e) {
        if (e == null) {
            System.out.println("Authentification des e-mails utilisateur réussie");
        } else if {
            System.out.println("Échec de l'authentification de la messagerie de l'utilisateur");
        }
      }
   });
 }

Ceux qui ont écrit en kotlin omettent l'interface DoneCallback et la méthode appelée done (NCMBException e), mais il s'agit d'une conversion SAM par l'interface SAM. SAM (Single Abstract Method) est une interface qui n'a qu'une seule méthode abstraite. [DoneCallback](http://www.programcreek.com/java-api-examples/index.php?source_dir=ncmb_android-master/ncmb-core/src/main/java/com/nifty/cloud/mb/core/ La méthode abstraite done (NCMBException e) de l'interface DoneCallback.java) a un type void comme valeur de retour et un type NCMBException comme argument. Par conséquent, il est possible de le décrire proprement comme kotlin en omettant le type de littéral de fonction et l'inférence de type. Pour les fonctions littérales, je me suis référé à l'article ici.

Si vous pouvez vous inscrire avec succès en tant que membre, vos informations d'utilisateur seront enregistrées sur l'écran de gestion des membres de ncmb. スクリーンショット 2017-07-17 0.52.31.png

Processus de connexion

Le processus de connexion est effectué par la méthode signIn qui a un e-mail de type String et un mot de passe de type String comme arguments, qui est appelée lorsque le bouton LOGIN est enfoncé. Vous pouvez vous connecter en appelant la méthode loginWithMailAddressInBackground de NCMBUser dans la méthode signIn.

MainActivity.kt



private fun signIn(email: String, password: String) {
        NCMBUser.loginWithMailAddressInBackground(email, password) {user, e ->
                if(e == null) {
                    println("Connexion réussie")
                } else {
                    println("Erreur d'authentification:" + e.message.toString() )
                }
         }
}

Après avoir enregistré le mot de passe dans l'e-mail d'inscription des membres et vous être inscrit en tant que membre, vous pourrez vous connecter avec votre adresse e-mail et votre mot de passe.

Processus de déconnexion

Le processus de déconnexion appelle la méthode signOut sans argument, qui est appelée lorsque le bouton de déconnexion est enfoncé. Vous pouvez vous déconnecter en appelant la méthode logoutInBackground de NCMBUser dans la méthode sighOut.

MainActivity.kt


    private fun signOut() {
        NCMBUser.logoutInBackground{ e ->
            if (e == null) {
                println("Déconnexion réussie")
            } else {
                println("Échec de la déconnexion")
            }
        }
    }

Paramètres du tableau de bord

Si vous souhaitez autoriser l'authentification par mot de passe par adresse e-mail, cochez «Autoriser l'authentification par adresse e-mail / mot de passe» dans Paramètres de l'application → Paramètres d'authentification des membres sur le tableau de bord et enregistrez-les. スクリーンショット 2017-07-16 21.25.06.png

Firebase

Créer un nouveau projet

Connectez-vous à Firebase avec votre compte Google et créez un nouveau projet. スクリーンショット 2017-07-17 0.35.53.png

Autoriser l'authentification par e-mail / mot de passe

Activez l'état de l'e-mail / mot de passe depuis l'écran d'administration de Firebase Authentication. スクリーンショット 2017-07-17 0.46.26.png

Implémentation de l'application

MainActivity.kt



class MainActivity : AppCompatActivity(), View.OnClickListener {

    private var mEmailField: EditText? = null
    private var mPasswordField: EditText? = null
    private var loginEmail: EditText? = null
    private var loginPassword: EditText? = null

    private var mAuth: FirebaseAuth? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //Nouvel élément utilisateur
        mEmailField = findViewById(R.id.MailAddress) as EditText
        mPasswordField = findViewById(R.id.Password) as EditText
        //Articles à la connexion
        loginEmail = findViewById(R.id.login_MailAddress) as EditText
        loginPassword = findViewById(R.id.login_Password) as EditText

        //Lorsque vous appuyez sur le bouton INSCRIPTION
        findViewById(R.id.Button)?.setOnClickListener(this)
        //Lorsque vous appuyez sur le bouton LOGIN
        findViewById(R.id.login_Button)?.setOnClickListener(this)
        //Lorsque vous appuyez sur le bouton LOG OUT
        findViewById(R.id.logout_Button)?.setOnClickListener(this)

        //Obtenir l'instance FirebaseAuth
        mAuth = FirebaseAuth.getInstance()
    }

    /**
     *Traitement des clics de bouton
     */
    override fun onClick(v: View) {
        val i = v.id
        if (i == R.id.Button) {
            //Lorsque le nouveau bouton est enfoncé
            createAccount(mEmailField?.text.toString(), mPasswordField?.text.toString())
        } else if (i == R.id.login_Button) {
            //Lorsque le bouton de connexion est enfoncé
            signIn(loginEmail?.text.toString(), loginPassword?.text.toString())
        } else if (i == R.id.logout_Button) {
            //Lorsque le bouton de déconnexion est enfoncé
            signOut()
        }
    }

Ajout de la dépendance d'authentification Firebase à build.gradle au niveau de l'application

build.gradle


dependencies {
 
     (Omis)
     
    // Firebase Authentication
    compile 'com.google.firebase:firebase-auth:10.0.1'ajouter à
}

Processus d'inscription des membres

Dans la méthode createAccount appelée lorsque vous appuyez sur le bouton INSCRIPTION, transmettez l'adresse e-mail et le mot de passe saisis par l'utilisateur à la méthode createUserWithEmailAndPassword de l'instance Firebase pour créer un nouveau compte.

MainActivity.kt


private fun createAccount(email: String, password: String) {
        mAuth?.createUserWithEmailAndPassword(email, password)
                ?.addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        println("Création d'utilisateur réussie")
                        sendEmailVerrification()//Envoyer un e-mail de confirmation
                    } else {
                        println("Échec de la création de l'utilisateur:" + task.exception.toString())
                    }
                }
    }

** Attention **: Dans ncmb, un e-mail de confirmation a été envoyé au moment de l'enregistrement de l'adhésion, et le lien dans l'e-mail a été cliqué pour définir le mot de passe et l'enregistrement de l'adhésion a été terminé, mais dans Firebase, l'e-mail de confirmation a été envoyé au moment de l'enregistrement de l'adhésion. Ça ne sera pas. Par conséquent, lorsqu'un nouvel utilisateur est créé avec succès, une méthode pour envoyer un e-mail de confirmation est créée et appelée.

Si l'utilisateur peut être créé normalement, les informations utilisateur seront enregistrées dans l'écran de gestion de Firebase. スクリーンショット 2017-07-17 1.59.22.png

Processus d'envoi du courrier de confirmation

Si vous avez réussi à créer un nouvel utilisateur, appelez cette méthode pour envoyer un e-mail de confirmation à l'utilisateur.

MainActivity.kt


private fun sendEmailVerrification() {
        val user = FirebaseAuth.getInstance().currentUser
        user?.sendEmailVerification()
                ?.addOnCompleteListener(this) { task ->
                    if(task.isSuccessful) {
                        println("Transmission réussie des e-mails")
                    } else {
                        println("Échec de la transmission des e-mails:" + task.exception.toString())
                    }
                }
    }

Processus de connexion

Dans la méthode dignIn appelée lorsque vous appuyez sur le bouton LOGIN, transmettez l'adresse e-mail et le mot de passe saisis par l'utilisateur à la méthode signInWithEmailAndPassword de l'instance Firebase en tant qu'arguments.

MainActivity.kt


private fun signIn(email: String, password: String) {
        mAuth?.signInWithEmailAndPassword(email, password)
                ?.addOnCompleteListener(this) { task ->
                    if(task.isSuccessful) {
                        println("Utilisateur de connexion réussi:" + mAuth?.currentUser.toString())
                    } else {
                        println("Erreur d'authentification")
                    }
                }
    }

Traitement de la déconnexion

La méthode signOut qui est appelée lorsque vous appuyez sur le bouton LOGOUT appelle la méthode signOut de l'instance Firebase pour se déconnecter.

MainActivity.kt


private fun signOut() {
        mAuth?.signOut()
 }

Firebase Analytics Firebase dispose également d'un outil appelé Firebase Analytics, qui se positionne comme Google Analytics spécialisé pour les applications mobiles, et bien que je ne l'ai pas étudié en détail, il semble être utile pour l'analyse des accès. Pour la procédure d'installation, l'article ici était facile à comprendre.

スクリーンショット 2017-07-17 2.12.58.png

Matériel de référence

[Document officiel du NCMB](http://mb.cloud.nifty.com/doc/current/user/authorize_email_android.html# Implementation in App) Document officiel Firebase http://qiita.com/RyotaMurohoshi/items/01b370f34a4bf96f5c39 http://kotlin.hatenablog.jp/entry/2012/12/10/093018

Recommended Posts

J'ai essayé d'utiliser "nifty cloud mobile backend" et l'authentification "Firebase" sur Kotlin + Android
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
[Android] J'ai quitté SQLite et essayé d'utiliser Realm
J'ai essayé d'utiliser Scalar DL avec Docker
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
J'ai essayé d'utiliser YOLO v4 sur Ubuntu et ROS
[Android] J'ai essayé d'utiliser la disposition du coordinateur.
J'ai essayé d'utiliser Junit avec Mac VScode Maven
Trébucher avec Android DataBinding + Kotlin (plus BindingAdapter)
J'ai essayé d'utiliser une connexion à une base de données dans le développement Android
J'ai essayé d'utiliser Log4j2 sur un serveur Java EE
J'ai installé CentOS 8 sur Windows 10 en utilisant VirtualBox et Vagrant
J'ai essayé d'utiliser Gson
J'ai essayé d'utiliser TestNG
J'ai essayé d'utiliser Galasa
J'ai essayé un test unitaire de l'application Rails en utilisant RSpec et FactoryBot
J'ai essayé d'ajouter une ligne de séparation à TabLayout sur Android
J'ai essayé de résumer les bases de kotlin et java
[Android] [Bibliothèque] J'ai essayé d'utiliser une bibliothèque d'animations appelée "Before After animation".
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
Compressez et téléchargez plusieurs fichiers sur Firebase Storage sur Android.
Je voulais animer une ligne lors de l'utilisation de realm et RecyclerView sur Android, mais j'ai abandonné