[JAVA] Mémo à emporter sur l'authentification Android Firebase (authentification Facebook)

introduction

Ceci est un mémo étape par étape pour l'authentification Android Firebase (authentification Facebook).

http://qiita.com/Sert/items/1fbdbf68dd087201a57b

http://qiita.com/ronnnnn/items/dddf57a0369f780d8ac2

L'IDE est Android Studio. Références méthode d'authentification de connexion google méthode d'authentification par e-mail et mot de passe google, Facebook, Twitter, à laquelle j'ai fait référence ici. De plus, il semble qu'il n'y avait pas d'article dédié à Facebook, je vais donc l'écrire.

Inscrivez-vous à Facebook pour les développeurs

Enregistrement du Compte

Ceci est omis.

Inscription de l'application Android que vous souhaitez authentifier

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

Appuyez sur Ajouter une nouvelle application.

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

Ensuite, entrez un nom approprié dans le nom d'affichage. Ensuite, un contrôle de sécurité apparaîtra, nous allons donc le franchir. Ensuite, l'écran changera, alors appuyez sur Connexion Facebook, puis sur le prochain Android.

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

Avez-vous eu un écran comme celui-ci? Faisons cela. Pour Android Studio

  1. Ignorez le SDK Facebook pour Android. Veuillez appuyer sur Suivant.

  2. Importez le SDK Facebook. build.gradle (projet)

build.gradle(project)


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

build.gradle (application)

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)'//Ajouter ici
}

C'est la fin.

  1. Entrez les informations du projet Android. Ceci décrit le nom du package et le nom de la classe d'activité. Cette fois, pour le nom du package, ajoutez package = "..." dans manifest.xml. Puisque nous voulons définir LoginActivity → MainActivity, la valeur par défaut est LoginActivity, alors écrivez package name.LoginActivity.

prochain Enregistrer → utiliser ce nom de package Cliquez s'il vous plait. C'est la fin de 3.

  1. Ajouter le hachage de clé de développement et libérer le hachage de clé Puisqu'il s'agit d'une prémisse privée, seul le hachage de la clé de développement est généré.

Je suis Windows, donc

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

Cliquez pour coller. Au fait, j'utilise Windows bash, donc je peux utiliser la commande keytool. Cela n'a pas été possible à l'invite de commande. Windows Bash est pratique, alors installons-le.

Installation de Windows Bash http://qiita.com/Aruneko/items/c79810b0b015bebf30bb Et pour faire un terminal propre https://www.sa-sa-ki.jp/blog/2016/12/bash-on-ubuntu-on-windows-wsl-terminal/ Ce serait bien d'utiliser un outil comme celui-ci: ensoleillé:

Collez le résultat de la commande avec. Enregistrer → Suivant

  1. Activez l'authentification unique pour l'application Je vais sauter.

  2. Ajouter l'ID d'application Facebook Suivez la description.

  3. Ajoutez FacebookActivity à AndroidManifest.xml C'est également comme décrit.

  4. Activer les onglets personnalisés de Chrome C'est aussi comme décrit

Ça ressemble à ça.

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>

Eh bien, il y a encore plus.

Inscrivez-vous avec Firebase

Ensuite, enregistrez l'application dans Firebase et déclarez que vous utiliserez Facebook. Ajouter un projet → Nom du projet (nom arbitraire) → Ajouter un projet → Ajouter Firebase à l'application Android

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

Parce que ça ressemble à ça Nom du package Android: similaire à celui que vous avez entré dans Facebook pour les développeurs plus tôt

Surnom de l'application: omis

Certificat de signature pour le débogage SHA-1 (facultatif): c'est

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

Collez-le dans Windows Bash. Appuyez ensuite sur Entrée et entrez le mot de passe "android"

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

Puisqu'il est sorti comme ceci, SHA1: hogehogelldpksvopd

Hogehogelldpksvopd Collez uniquement cette partie et enregistrez l'application. Ensuite, placez google-services.json dans le PATH comme décrit. Ensuite, jouez avec build.gradle comme décrit.

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'//ajouter à
    }
}
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'//ajouter à

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

Viennent ensuite les paramètres d'authentification.

Essayez d'utiliser (Authentification) → Méthode de connexion → Facebook À ce stade, il vous sera demandé l'ID d'application et l'ID secret. Ouvrez à nouveau Facebook pour les développeurs et vérifiez le tableau de bord.

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

Cette. : muscle:

Revenez ensuite dans Firebase, saisissez-le et copiez l'URI de redirection OAuth.

Ouvrez également Facebook pour les développeurs et

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

Appuyez sur Connexion Facebook sur la gauche et collez l'URL que vous venez de copier dans un URI de redirection OAuth valide. Appuyez ensuite sur Enregistrer les modifications en bas à droite.

Revenez à Firebase et enregistrez. Ceci complète également le côté Firebase.

la mise en oeuvre

En utilisant ce qui précède, nous allons créer une application telle que Connexion avec activité de connexion → Transition → Déconnexion avec activité principale → Transition → ... lors de l'authentification avec Firebase.

Tout d'abord, jouez avec build.gradle (application)

build.gradle


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

Ensuite, assurez-vous que LoginActivity est appelé en premier dans Manifest.xml.

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>

Ensuite, créez une activité. La source de la transition LoginActivity.java et la destination de la transition 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();
            }
        });
    }
}

Créez un fichier pour gérer la boîte de dialogue.

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();
    }
}

Vient ensuite le fichier de mise en page.

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>

C'est la fin. Merci d'avoir regardé jusqu'au bout! !! Nous sommes à l'écoute de vos questions et commentaires. : pointer vers le haut:

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

Recommended Posts

Mémo à emporter sur l'authentification Android Firebase (authentification Facebook)
Mémo d'authentification Firebase