[JAVA] Memo zum Mitnehmen für die Android Firebase-Authentifizierung (Facebook-Authentifizierung)

Einführung

Dies ist eine Schritt-für-Schritt-Anleitung für die Android Firebase-Authentifizierung (Facebook-Authentifizierung). Es ist definitiv für mich, aber ich hoffe es hilft. Die IDE ist Android Studio.

Verweise

Google Login-Authentifizierungsmethode http://qiita.com/Sert/items/1fbdbf68dd087201a57b Authentifizierungsmethode für Google, Facebook, Twitter, E-Mail und Passwort http://qiita.com/ronnnnn/items/dddf57a0369f780d8ac2

Ich habe darauf hingewiesen. Es scheint auch, dass es keinen Artikel gab, der Facebook gewidmet war, also werde ich ihn aufschreiben.

Registrieren Sie sich für Facebook für Entwickler

Kontoregistrierung

Dies wird weggelassen.

Registrierung der Android-Anwendung, die Sie authentifizieren möchten

SnapCrab_NoName_2017-7-2_22-30-45_No-00.png

Klicken Sie auf Neue App hinzufügen.

SnapCrab_NoName_2017-7-2_22-33-18_No-00.png

Geben Sie dann einen geeigneten Namen in den Anzeigenamen ein. Dann erscheint eine Sicherheitsüberprüfung, damit wir sie durchbrechen können. Dann ändert sich der Bildschirm, also drücken Sie Facebook Login und dann das nächste Android.

SnapCrab_NoName_2017-7-2_22-37-49_No-00.png

Hast du so einen Bildschirm bekommen? Lass uns das machen. Für Android Studio

  1. Überspringen Sie das Facebook SDK für Android. Bitte klicken Sie auf Weiter.

  2. Importieren Sie das Facebook SDK. build.gradle (Projekt)

build.gradle(project)


buildscript {
    repositories {
        jcenter()
        mavenCentral()//Hier hinzufügen
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle (app)

build.gradle(app)


...

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'//Hier hinzufügen
}

Das ist das Ende.

  1. Geben Sie die Android-Projektinformationen ein. Dies beschreibt den Paketnamen und den Namen der Acitivity-Klasse. Fügen Sie diesmal für den Paketnamen package = "..." in manifest.xml hinzu. Da wir LoginActivity → MainActivity festlegen möchten, ist der Standardwert LoginActivity. Schreiben Sie also package name.LoginActivity.

Nächster Speichern → Verwenden Sie diesen Paketnamen Bitte klicken. Dies ist das Ende von 3.

  1. Fügen Sie den Entwicklungsschlüssel-Hash hinzu und geben Sie den Schlüssel-Hash frei Da es sich diesmal um eine private Prämisse handelt, wird nur der Entwicklungsschlüssel-Hash generiert.

Ich bin Windows, also

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64

Klicken Sie zum Einfügen. Übrigens verwende ich Windows Bash, damit ich den Befehl keytool verwenden kann. An der Eingabeaufforderung war dies nicht möglich. Windows Bash ist praktisch, also installieren wir es.

Windows Bash-Installation http://qiita.com/Aruneko/items/c79810b0b015bebf30bb Und um ein sauberes Terminal zu machen https://www.sa-sa-ki.jp/blog/2016/12/bash-on-ubuntu-on-windows-wsl-terminal/ Es wäre schön, ein Werkzeug wie dieses zu verwenden: sonnig:

Fügen Sie das Befehlsergebnis mit ein. Speichern → Weiter

  1. Aktivieren Sie die einmalige Anmeldung für die App Ich werde es überspringen.

  2. Fügen Sie die Facebook App ID hinzu Folgen Sie der Beschreibung.

  3. Fügen Sie AndroidAanifest.xml FacebookActivity hinzu Dies ist auch wie beschrieben.

  4. Aktivieren Sie benutzerdefinierte Chrome-Registerkarten Dies ist auch wie beschrieben

Es sieht aus wie das.

Manifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.app.oomae.hisaki.facebook">

    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Nun, es gibt noch mehr.

Registrieren Sie sich bei Firebase

Registrieren Sie anschließend die App in Firebase und erklären Sie, dass Sie Facebook verwenden werden. Projekt hinzufügen → Projektname (beliebiger Name) → Projekt hinzufügen → Firebase zur Android-App hinzufügen

SnapCrab_NoName_2017-7-2_23-16-50_No-00.png

Weil es so aussieht Name des Android-Pakets: Ähnlich dem, den Sie zuvor für Entwickler in Facebook eingegeben haben

App-Spitzname: weggelassen

Signaturzertifikat zum Debuggen von SHA-1 (optional): das ist

keytool -exportcert -list -v \
-alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

Fügen Sie dies in Windows Bash ein. Drücken Sie dann die Eingabetaste und geben Sie das Passwort "android" ein.

SnapCrab_NoName_2017-7-2_23-23-52_No-00.png

Da es so ausgegeben wird, SHA1: hogehogelldpksvopd

Hogehogelldpksvopd Nur diesen Teil einfügen und die Anwendung registrieren. Fügen Sie als Nächstes google-services.json wie beschrieben in den Pfad ein. Spielen Sie als Nächstes wie beschrieben mit build.gradle.

build.gradle(project)



buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:3.1.0'//hinzufügen
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(app)


...

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'
}
apply plugin: 'com.google.gms.google-services'//hinzufügen

SnapCrab_NoName_2017-7-2_23-35-15_No-00.png

Als nächstes folgen die Authentifizierungseinstellungen.

Versuchen Sie es mit (Authentifizierung) → Anmeldemethode → Facebook Zu diesem Zeitpunkt werden Sie nach der Anwendungs-ID und der geheimen ID gefragt. Öffnen Sie Facebook erneut für Entwickler und überprüfen Sie das Dashboard.

SnapCrab_NoName_2017-7-2_23-37-24_No-00.png

Dies. : Muskel:

Gehen Sie dann erneut zu Firebase, geben Sie es ein und kopieren Sie den OAuth-Umleitungs-URI.

Öffnen Sie auch Facebook für Entwickler und

SnapCrab_NoName_2017-7-2_23-44-43_No-00.png

Klicken Sie links auf Facebook Login und fügen Sie die soeben kopierte URL in einen gültigen OAuth-Umleitungs-URI ein. Klicken Sie dann unten rechts auf Änderungen speichern.

Gehen Sie erneut zu Firebase und speichern Sie. Dies vervollständigt auch die Firebase-Seite.

Implementierung

Mit den oben genannten Informationen erstellen wir eine Anwendung wie Anmelden mit Anmeldeaktivität → Übergang → Abmelden mit Hauptaktivität → Übergang → ... bei der Authentifizierung mit Firebase.

Spielen Sie zuerst mit build.gradle (App)

build.gradle


compile 'com.google.firebase:firebase-core:11.0.1'
compile 'com.google.firebase:firebase-auth:11.0.1'

Stellen Sie als Nächstes sicher, dass LoginActivity zuerst in Manifest.xml aufgerufen wird.

Manifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.app.oomae.hisaki.facebook_authentication_sample">

    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity">
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        </activity>
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Erstellen Sie als Nächstes eine Aktivität. Die Übergangsquelle "LoginActivity.java" und das Übergangsziel "MainActivity.java".

LoginActivity.java


package ;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {

    private FirebaseAuth firebaseAuth;
    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // get firebase instance
        firebaseAuth = FirebaseAuth.getInstance();
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_login);

        // initialize facebook login button
        callbackManager = CallbackManager.Factory.create();
        FacebookCallback<LoginResult> facebookLoginCallback = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                firebaseAuthWithFacebook(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
            }

            @Override
            public void onError(FacebookException error) {
                if (error != null) {
                    DialogManager.createDialog(LoginActivity.this, error).show();
                }
            }
        };
        LoginButton facebookLoginButton = (LoginButton) findViewById(R.id.login_button);
        facebookLoginButton.setReadPermissions("email", "public_profile");
        facebookLoginButton.registerCallback(callbackManager, facebookLoginCallback);
    }

    private void firebaseAuthWithFacebook(AccessToken token) {
        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        firebaseAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            changeActivity();
                        } else {
                            Toast.makeText(LoginActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }

    private void changeActivity() {
        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
    }
    //FaceBook
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

MainActivity.java



package ;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.facebook.login.LoginManager;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.logoutButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoginManager.getInstance().logOut();
                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}

Erstellen Sie eine Datei, um den Dialog zu verwalten.

DialogManager.java


package ;

import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;

public class DialogManager {
    static AlertDialog createDialog(Context context, String message) {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
        alertDialog.setMessage(message);
        alertDialog.setPositiveButton("dialog close", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int id) {
                dialogInterface.dismiss();
            }
        });
        return alertDialog.create();
    }

    static AlertDialog createDialog(Context context, Throwable throwable) {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
        alertDialog.setMessage(throwable.getMessage());
        alertDialog.setPositiveButton("dialog close", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int id) {
                dialogInterface.dismiss();
            }
        });
        return alertDialog.create();
    }
}

Als nächstes kommt die Layoutdatei.

activity_login.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />

</LinearLayout>

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="15dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingTop="15dp"
    tools:context=".LoginActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login success!"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="48dp"
        android:textSize="32dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Logout"
        android:id="@+id/logoutButton"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:textSize="26dp" />
</RelativeLayout>

Das ist das Ende. Danke, dass du bis zum Ende zugesehen hast! !! Wir freuen uns über Ihre Fragen und Kommentare. : aufzeigen:

GitHub:https://github.com/hisakioomae/Firebase_Authentication_Facebook_Sample

Recommended Posts

Memo zum Mitnehmen für die Android Firebase-Authentifizierung (Facebook-Authentifizierung)
Firebase-Authentifizierungsnotiz