[JAVA] Ich habe versucht, "nifty cloud mobile backend" und "Firebase" -Authentifizierung auf Kotlin + Android zu verwenden

Einführung

Wie auf der Google I / O 2017 angekündigt, hat sich Kotlin der offiziellen Sprache von Android angeschlossen und nutzt mBaaS (mobiles Backend als Service) ncmb (nifty Cloud Mobile Backend) und Firebase sofort mit kotlin Ich habe versucht, Android zu programmieren. mBaaS ist ein Dienst, der allgemeine Funktionen (Benutzerverwaltung, Datenspeicher, Push-Benachrichtigung usw.) bereitstellt, die häufig für die Anwendungsentwicklung aus der Cloud verwendet werden. Dieses Mal werden wir jedoch die Benutzerauthentifizierungsfunktionen beider Funktionen vorstellen.

Entwicklungsumgebung

ncmb(nifty cloud mobile backend)

Neue App erstellen

Erstellen Sie zunächst eine neue App über das Dashboard. 図1.png

スクリーンショット 2017-07-16 13.03.38.png Wenn Sie eine neue App erstellen, erhalten Sie einen Anwendungsschlüssel und einen Clientschlüssel. スクリーンショット 2017-07-16 12.52.52.png

Überprüfung der E-Mail-Adresse

Der Ablauf der Überprüfung der ncmb-E-Mail-Adresse ist wie folgt.

  1. Der Benutzer gibt die E-Mail-Adresse ein, um die Authentifizierung anzufordern
  2. Eine E-Mail mit der URL zum Registrierungsbildschirm für Mitglieder wird an die von Ihnen eingegebene E-Mail-Adresse gesendet.
  3. Registrieren Sie das Passwort auf dem Mitgliederregistrierungsbildschirm und registrieren Sie sich als Mitglied.
  4. Sie können sich mit Ihrer E-Mail-Adresse und Ihrem Passwort anmelden

Implementierung der App

MainActivity.kt



class MainActivity : AppCompatActivity(), View.OnClickListener{

    //Konstante
    companion object Factory {
        // ApplicationKey
        val APP_KEY = "YOUR APP KEY" //Die Einstellung des Anwendungsschlüssels wird beim Erstellen einer neuen Anwendung ausgegeben
        // ClientKey
        val CLIENT_KEY = "YOUR CLIENT KEY" //Client-Schlüsseleinstellungen, die beim Erstellen einer neuen App ausgegeben wurden
    }

    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)

        //**********API-Schlüsseleinstellungen und SDK-Initialisierung**********
        NCMB.initialize(this.baseContext, APP_KEY, CLIENT_KEY)

        //Mitgliedsregistrierung
        mEmailField = findViewById(R.id.MailAddress) as EditText
        mPasswordField = findViewById(R.id.Password) as EditText
        //Einloggen
        loginMailAddress = findViewById(R.id.login_MailAddress) as EditText
        loginPassword = findViewById(R.id.login_Password) as EditText

        //Anmeldetaste
        findViewById(R.id.Button)?.setOnClickListener(this)

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

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

    /**
     *Wenn die Schaltfläche angeklickt wird
     */
    override fun onClick(v : View) {
        val id = v.id
        if(id == (R.id.Button)) {
            //Mitgliedsregistrierung
            createAccount(mEmailField?.text.toString())
        } else if(id == (R.id.login_Button)) {
            //Einloggen
            signIn(loginMailAddress?.text.toString(), loginPassword?.text.toString())
        } else if(id == (R.id.logout_Button)) {
            //Ausloggen
            signOut()
        }

    }

Registrierungsprozess für Mitglieder

Der Registrierungsprozess für Mitglieder wird von der Methode createAccount ausgeführt, die als Argument eine E-Mail vom Typ String enthält, die aufgerufen wird, wenn die Schaltfläche ANMELDEN gedrückt wird.

MainActivity.kt


private fun createAccount(email: String) {
        NCMBUser.requestAuthenticationMailInBackground(email) { e ->
                if(e == null) {
                    println("Erfolgreiche Benutzer-E-Mail-Authentifizierung")
                } else {
                    println("Fehler bei der Benutzermail-Authentifizierung")
                }
        }
    }

Wenn Sie es in Java schreiben, sieht es so aus. Die Beschreibung ist redundanter als Kotlin. Die requestAuthenticationMailInBackground-Methode von NCMBUser verwendet die vom Benutzer eingegebene E-Mail-Adresse und [DoneCallback](http://www.programcreek.com/java-api-examples/index.php?source_dir=ncmb_android-master/ncmb-core/src] als Argumente. Als Argument wird eine Schnittstelle (/main/java/com/nifty/cloud/mb/core/DoneCallback.java) verwendet. Hier [DoneCallback](http://www.programcreek.com/java-api-examples/index.php?source_dir=ncmb_android-master/ncmb-core/src/main/java/com/nifty/cloud/mb/ Eine anonyme Klasse, die die Schnittstelle core / DoneCallback.java implementiert, wird generiert und als Argument übergeben.

MainActivity.java


private void createAccount(String email) {
  NCMBUser.requestAuthenticationMailInBackground(email, 
   new DoneCallback() {
    @Override
    public void done(NCMBException e) {
        if (e == null) {
            System.out.println("Erfolgreiche Benutzer-E-Mail-Authentifizierung");
        } else if {
            System.out.println("Fehler bei der Benutzermail-Authentifizierung");
        }
      }
   });
 }

Diejenigen, die in kotlin geschrieben haben, lassen die DoneCallback-Schnittstelle und die Methode done (NCMBException e) weg, dies ist jedoch die SAM-Konvertierung durch die SAM-Schnittstelle. SAM (Single Abstract Method) ist eine Schnittstelle mit nur einer abstrakten Methode. [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/ Die abstrakte Methode done (NCMBException e) der DoneCallback.java-Schnittstelle hat einen void-Typ als Rückgabewert und einen NCMBException-Typ als Argument. Daher kann der Typ des Funktionsliteral weggelassen werden und die Typinferenz kann verwendet werden, um es so sauber wie Kotlin zu beschreiben. Für Funktionsliterale habe ich auf den Artikel [hier] verwiesen (http://kotlin.hatenablog.jp/entry/2012/12/10/093018).

Wenn Sie sich erfolgreich als Mitglied registrieren können, werden Ihre Benutzerinformationen auf dem Mitgliederverwaltungsbildschirm von ncmb registriert. スクリーンショット 2017-07-17 0.52.31.png

Anmeldevorgang

Der Anmeldevorgang wird von der signIn-Methode ausgeführt, die eine E-Mail vom Typ String und ein Kennwort vom Typ String als Argumente enthält. Diese wird aufgerufen, wenn die Schaltfläche LOGIN gedrückt wird. Sie können sich anmelden, indem Sie die loginWithMailAddressInBackground-Methode von NCMBUser in der signIn-Methode aufrufen.

MainActivity.kt



private fun signIn(email: String, password: String) {
        NCMBUser.loginWithMailAddressInBackground(email, password) {user, e ->
                if(e == null) {
                    println("erfolgreicher Login")
                } else {
                    println("Anmeldungsfehler:" + e.message.toString() )
                }
         }
}

Nachdem Sie das Passwort aus der Mitgliederregistrierungs-E-Mail registriert und als Mitglied registriert haben, können Sie sich mit Ihrer E-Mail-Adresse und Ihrem Passwort anmelden.

Abmeldevorgang

Der Abmeldevorgang ruft die signOut-Methode ohne Argument auf, die aufgerufen wird, wenn die Abmeldeschaltfläche gedrückt wird. Sie können sich abmelden, indem Sie die logoutInBackground-Methode von NCMBUser in der soapOut-Methode aufrufen.

MainActivity.kt


    private fun signOut() {
        NCMBUser.logoutInBackground{ e ->
            if (e == null) {
                println("Erfolgreiche Abmeldung")
            } else {
                println("Abmeldefehler")
            }
        }
    }

Dashboard-Einstellungen

Um die E-Mail-Adresskennwortauthentifizierung zuzulassen, aktivieren Sie im Dashboard unter "App-Einstellungen-> Mitgliederauthentifizierungseinstellungen" die Option "E-Mail-Adresse / Kennwortauthentifizierung zulassen" und speichern Sie sie. スクリーンショット 2017-07-16 21.25.06.png

Firebase

Neues Projekt erstellen

Melden Sie sich mit Ihrem Google-Konto bei Firebase an und erstellen Sie ein neues Projekt. スクリーンショット 2017-07-17 0.35.53.png

E-Mail- / Passwortauthentifizierung zulassen

Aktivieren Sie den E-Mail- / Kennwortstatus im Verwaltungsbildschirm für die Firebase-Authentifizierung. スクリーンショット 2017-07-17 0.46.26.png

Implementierung der App

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)

        //Neues Benutzerelement
        mEmailField = findViewById(R.id.MailAddress) as EditText
        mPasswordField = findViewById(R.id.Password) as EditText
        //Artikel beim Login
        loginEmail = findViewById(R.id.login_MailAddress) as EditText
        loginPassword = findViewById(R.id.login_Password) as EditText

        //Beim Drücken der SIGN UP-Taste
        findViewById(R.id.Button)?.setOnClickListener(this)
        //Beim Drücken der LOGIN-Taste
        findViewById(R.id.login_Button)?.setOnClickListener(this)
        //Beim Drücken der LOG OUT-Taste
        findViewById(R.id.logout_Button)?.setOnClickListener(this)

        //Holen Sie sich die FirebaseAuth-Instanz
        mAuth = FirebaseAuth.getInstance()
    }

    /**
     *Button-Click-Verarbeitung
     */
    override fun onClick(v: View) {
        val i = v.id
        if (i == R.id.Button) {
            //Wenn die neue Taste gedrückt wird
            createAccount(mEmailField?.text.toString(), mPasswordField?.text.toString())
        } else if (i == R.id.login_Button) {
            //Wenn die Anmeldetaste gedrückt wird
            signIn(loginEmail?.text.toString(), loginPassword?.text.toString())
        } else if (i == R.id.logout_Button) {
            //Wenn die Abmeldetaste gedrückt wird
            signOut()
        }
    }

Firebase-Authentifizierungsabhängigkeit zu build.gradle auf App-Ebene hinzugefügt

build.gradle


dependencies {
 
     (Ausgelassen)
     
    // Firebase Authentication
    compile 'com.google.firebase:firebase-auth:10.0.1'hinzufügen
}

Registrierungsprozess für Mitglieder

Übergeben Sie in der Methode createAccount, die beim Drücken der Schaltfläche ANMELDEN aufgerufen wird, die vom Benutzer eingegebene E-Mail-Adresse und das Kennwort an die Methode createUserWithEmailAndPassword der Firebase-Instanz, um ein neues Konto zu erstellen.

MainActivity.kt


private fun createAccount(email: String, password: String) {
        mAuth?.createUserWithEmailAndPassword(email, password)
                ?.addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        println("Erfolgreiche Benutzererstellung")
                        sendEmailVerrification()//Bestätigungs-E-Mail senden
                    } else {
                        println("Fehler bei der Benutzererstellung:" + task.exception.toString())
                    }
                }
    }

** Achtung **: In ncmb wurde zum Zeitpunkt der Registrierung der Mitgliedschaft eine Bestätigungs-E-Mail gesendet, und auf den Link in der E-Mail wurde geklickt, um das Passwort festzulegen, und die Registrierung der Mitgliedschaft wurde abgeschlossen. In Firebase wurde die Bestätigungs-E-Mail zum Zeitpunkt der Registrierung der Mitgliedschaft gesendet. Es wird nicht sein. Wenn ein neuer Benutzer erfolgreich erstellt wurde, wird daher eine Methode zum Senden einer Bestätigungs-E-Mail erstellt und aufgerufen.

Wenn der Benutzer normal erstellt werden kann, werden die Benutzerinformationen im Verwaltungsbildschirm von Firebase gespeichert. スクリーンショット 2017-07-17 1.59.22.png

Versand der Bestätigungsmail

Wenn Sie erfolgreich einen neuen Benutzer erstellt haben, rufen Sie diese Methode auf, um eine Bestätigungs-E-Mail an den Benutzer zu senden.

MainActivity.kt


private fun sendEmailVerrification() {
        val user = FirebaseAuth.getInstance().currentUser
        user?.sendEmailVerification()
                ?.addOnCompleteListener(this) { task ->
                    if(task.isSuccessful) {
                        println("Erfolgreiche E-Mail-Übertragung")
                    } else {
                        println("E-Mail-Übertragungsfehler:" + task.exception.toString())
                    }
                }
    }

Anmeldevorgang

Übergeben Sie in der DignIn-Methode, die beim Drücken der LOGIN-Schaltfläche aufgerufen wird, die vom Benutzer eingegebene E-Mail-Adresse und das Kennwort als Argumente an die signInWithEmailAndPassword-Methode der Firebase-Instanz.

MainActivity.kt


private fun signIn(email: String, password: String) {
        mAuth?.signInWithEmailAndPassword(email, password)
                ?.addOnCompleteListener(this) { task ->
                    if(task.isSuccessful) {
                        println("Erfolgreicher Login-Benutzer:" + mAuth?.currentUser.toString())
                    } else {
                        println("Anmeldungsfehler")
                    }
                }
    }

Abmeldeverarbeitung

Die signOut-Methode, die aufgerufen wird, wenn die LOGOUT-Schaltfläche gedrückt wird, ruft die signOut-Methode der Firebase-Instanz auf, um sich abzumelden.

MainActivity.kt


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

Firebase Analytics Firebase verfügt auch über ein Tool namens Firebase Analytics, das als auf mobile Apps spezialisiertes Google Analytics positioniert ist. Obwohl ich es nicht im Detail untersucht habe, scheint es für die Zugriffsanalyse nützlich zu sein. Für den Installationsvorgang war der Artikel hier leicht zu verstehen.

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

Referenzmaterial

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

Recommended Posts

Ich habe versucht, "nifty cloud mobile backend" und "Firebase" -Authentifizierung auf Kotlin + Android zu verwenden
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
[Android] Ich habe SQLite beendet und versucht, Realm zu verwenden
Ich habe versucht, Scalar DL mit Docker zu verwenden
Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Ich habe versucht, YOLO v4 unter Ubuntu und ROS zu verwenden
[Android] Ich habe versucht, das Koordinatorlayout zu verwenden.
Ich habe versucht, Junit mit Mac VScode Maven zu verwenden
Stolpern Sie mit Android DataBinding + Kotlin (mehr BindingAdapter)
Ich habe versucht, eine Datenbankverbindung in der Android-Entwicklung zu verwenden
Ich habe versucht, Log4j2 auf einem Java EE-Server zu verwenden
Ich habe CentOS 8 unter Windows 10 mit VirtualBox und Vagrant installiert
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
Ich habe versucht, TabLayout unter Android eine Trennlinie hinzuzufügen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Android] [Bibliothek] Ich habe versucht, eine Animationsbibliothek namens "Vorher Nachher Animation" zu verwenden.
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
Komprimieren Sie mehrere Dateien und laden Sie sie auf Android in Firebase Storage hoch.
Ich wollte eine Zeile animieren, wenn ich Realm und RecyclerView unter Android verwende, aber ich habe aufgegeben