تطبيق chat ب android و firebase الجزء الأول


فهاد التطبيق الجديد من سلسلة أندرويد ولي عبارة عن تطبيق chat ب android و firebase  غادي نشوفو كيفاش نقادو واحد ال chat room المستخدم كيتسجل كيتكونيكطا من بعد كيتوجه للroom فين يمكنلو يتبادل الحديث مع الناس لي مكونيكطيا فهاد الجزء الأول غادي نشوفو كيفاش نمكن المستخدم باش يتسجل ويتكونيكطا فيلا مكونتيش تبعتي كيفاش كنربط لapp ديالي مع firebase شوف هاد الدرس.

نظرة سريعة بالفيديو

1- الملف activity_register.xml

فأول حاجة غادي نديرو غادي نزيدو project جديد ف android studio سميه chatApp من بعد ميتزاد غادي نزيدو Activity جديدة غادي تمشي للمجلد java فيه غادي تدير كليك بليمن ديال la souris غادي تختار New->Activity منبعد Empty Activity  منبعد سميه RegisterActivity ملي تزاد غادي تمشي للمجلد res/layout فيه كاين ملف سميتو activity_register.xml هادا هو الملف لي كيمكن المستخدم باش يسجل المعلومات ديالو فيه كاين form فيها كيدخل المستخدم nom و email و mot de passe وbouton منبعد مكيكليكي عليه كتنفد ل fonction registerUser وكيتسجل فقاعدة البيانات ثم كاين واحد TextView لي يلا سابقلو مسجل كيكليكي عليها باش يمشي للواجهة الخاصة بالكونيكسيون الكود ديال الملف activity_register.xml هو :

                                package com.example.belasri.firebasechatapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.belasri.firebasechatapp.LoginActivity;
import com.example.belasri.firebasechatapp.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class RegisterAcitivity extends AppCompatActivity {
    private EditText emailEditext,nameEditext,passeEditext;
    private TextView registerText;
    private FirebaseAuth auth;
    private DatabaseReference database;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_acitivity);
        emailEditext = (EditText) findViewById(R.id.email);
        nameEditext = (EditText) findViewById(R.id.name);
        passeEditext = (EditText) findViewById(R.id.passe);
        registerText = (TextView) findViewById(R.id.textRegister);
        auth = FirebaseAuth.getInstance();
        database =  FirebaseDatabase.getInstance().getReference().child("users");
        registerText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent register = new Intent(RegisterAcitivity.this,LoginActivity.class);
                startActivity(register);
            }
        });
    }

    public void registerUser(View view) {
        String email = emailEditext.getText().toString().trim();
        String passe = passeEditext.getText().toString().trim();
        final String name = nameEditext.getText().toString().trim();
        if(!TextUtils.isEmpty(email) && !TextUtils.isEmpty(passe) && !TextUtils.isEmpty(name)){
            auth.createUserWithEmailAndPassword(email,passe).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()){
                        //get user id
                        String user_id = auth.getCurrentUser().getUid();
                        DatabaseReference current_user_id = database.child(user_id);
                        current_user_id.child("name").setValue(name);
                        Intent login = new Intent(RegisterAcitivity.this,LoginActivity.class);
                        login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(login);
                    }else{
                        FirebaseAuthException e = (FirebaseAuthException )task.getException();
                        Toast.makeText(RegisterAcitivity.this, "Erreur : "+e.getMessage(), Toast.LENGTH_SHORT).show();
                        return;
                    }
                }
            });
        }else{
            Toast.makeText(this, "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
        }

    }
}
                            

2- الملف RegisterActivity.java

منبعد كنرجع للمجلد java فيه الملف لي زدت لي هو RegisterActivity.java فيه الكود لي كيسترجع les champs من الفورم لي ف activity_register.xml  من بعد كنخدم ب FirebaseAuth لي كتمكني باش نزيد مستخدم بالإيمايل ديالو فالجدول ديال المستخدمين فباش ن activer هاد ال mode ديال ل connexion كنمشي ل Authentication كيف مبين فالصورة :


من بعد Mode de connexion  فكنختار email et mot de passe و كن activer ل mode منبعد عندي DatabaseReference لي كنزيد بها جدول سميتو Users فيها غادي نزيد ال nom ديال المستخدم منبعد كاين TextView لي كنسترجعها بل id ديالها وكنزيد الكود لي كيمكن المستخدم ملي يكليكي عليها يمشي للملف ديال الكونيكسيون ولي غادي نزيدوه منبعد ثم ل fonction registerUser لي كنسترجع بها القيم لي دخل المستخدم فالحقول من بعد كنزيدهم فقاعدة البيانات وكنتحقق يلا تمت الإضافة كنعرض رسالة نجاح وكنوجه المستخدم للملف الخاص بل connexion الكود ديال الملف هو:

                                package com.example.belasri.firebasechatapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.belasri.firebasechatapp.LoginActivity;
import com.example.belasri.firebasechatapp.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class RegisterAcitivity extends AppCompatActivity {
    private EditText emailEditext,nameEditext,passeEditext;
    private TextView registerText;
    private FirebaseAuth auth;
    private DatabaseReference database;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_acitivity);
        emailEditext = (EditText) findViewById(R.id.email);
        nameEditext = (EditText) findViewById(R.id.name);
        passeEditext = (EditText) findViewById(R.id.passe);
        registerText = (TextView) findViewById(R.id.textRegister);
        auth = FirebaseAuth.getInstance();
        database =  FirebaseDatabase.getInstance().getReference().child("users");
        registerText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent register = new Intent(RegisterAcitivity.this,LoginActivity.class);
                startActivity(register);
            }
        });
    }

    public void registerUser(View view) {
        String email = emailEditext.getText().toString().trim();
        String passe = passeEditext.getText().toString().trim();
        final String name = nameEditext.getText().toString().trim();
        if(!TextUtils.isEmpty(email) && !TextUtils.isEmpty(passe) && !TextUtils.isEmpty(name)){
            auth.createUserWithEmailAndPassword(email,passe).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()){
                        //get user id
                        String user_id = auth.getCurrentUser().getUid();
                        DatabaseReference current_user_id = database.child(user_id);
                        current_user_id.child("name").setValue(name);
                        Intent login = new Intent(RegisterAcitivity.this,LoginActivity.class);
                        login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(login);
                    }else{
                        FirebaseAuthException e = (FirebaseAuthException )task.getException();
                        Toast.makeText(RegisterAcitivity.this, "Erreur : "+e.getMessage(), Toast.LENGTH_SHORT).show();
                        return;
                    }
                }
            });
        }else{
            Toast.makeText(this, "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
        }

    }
}

                            

3- الملف activity_login.xml

من بعد غادي تمشي للمجلد java فيه غادي تدير كليك بليمن ديال la souris غادي تختار New->Activity منبعد Empty Activity  منبعد سميه LoginActivity ملي تزاد غادي تمشي للمجلد res/layout فيه كاين ملف سميتو activity_login.xml هادا هو الملف  لي فيه كاين form فيها كيدخل المستخدم email و mot de passe وbouton منبعد مكيكليكي عليه كتنفد ل fonction loginUser وكيتكونيكطا  ثم كاين واحد TextView لي يلا مكانش مسجل منقبل كيكليكي عليها باش يمشي للواجهة الخاصة بتسجيل مستخدم جديد الكود ديال الملف activity_register.xml هو :

                                <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.belasri.firebasechatapp.LoginActivity">
    <LinearLayout
        android:layout_marginTop="50dp"
        android:background="#FFF"
        android:elevation="5dp"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:text="Connexion"
            android:textSize="30sp"
            android:padding="10dp"
            android:layout_marginBottom="30dp"
            android:textAlignment="center"
            android:textStyle="bold"
            android:textColor="@color/colorPrimary"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <EditText
            android:id="@+id/emailText"
            android:hint="Entrer votre email"
            android:padding="10dp"
            android:layout_margin="10dp"
            android:inputType="textEmailAddress"
            android:background="@drawable/editshape"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <EditText
            android:id="@+id/passeText"
            android:hint="Entrer votre mot de passe"
            android:padding="10dp"
            android:layout_margin="10dp"
            android:inputType="textPassword"
            android:background="@drawable/editshape"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/loginBtn"
            android:text="Connexion"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:onClick="loginUser"
            android:textColor="#FFF"
            android:background="@color/colorPrimary"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <TextView
            android:text="Vous n'avez pas de compte"
            android:padding="10dp"
            android:layout_margin="10dp"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textStyle="bold"
            android:id="@+id/textLogin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</RelativeLayout>
                            

4- الملف LoginActivity.java

فالمجلد java كاين LoginActivity.java لي هو الملف الي فيه الكود لي كيمكن المستخدم باش يتكونيكطا فأول حاجة كنسترجع les champs من الملف activity_login.xml من بعد كاين ل fonction loginUser ولي كتنفد ملي كيضغط المستخدم على connexion فكنخدم بل FirebaseAuth باش كنكونيكطي المستخدم بالإمايل ديالو وال mot de passe وكاين ل fonction checkIfUserExists لي كتحقق واش كاين المستخدم مسجل فقاعدة البيانات أو لا لا يلا كان كنوجهوه للصفحة الرئيسية لي فيها chatroom الكود ديال الملف هو :

                                    package com.example.belasri.firebasechatapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.belasri.firebasechatapp.MainActivity;
import com.example.belasri.firebasechatapp.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import static com.example.belasri.firebasechatapp.R.id.emailText;
import static com.example.belasri.firebasechatapp.R.id.passeText;

public class LoginActivity extends AppCompatActivity {
    private DatabaseReference database;
    private FirebaseAuth auth;
    private EditText emailEditText;
    private EditText passeEditText;
    private TextView loginText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        emailEditText = (EditText) findViewById(emailText);
        passeEditText = (EditText) findViewById(passeText);
        loginText = (TextView) findViewById(R.id.textLogin);
        auth = FirebaseAuth.getInstance();
        database = FirebaseDatabase.getInstance().getReference().child("users");
        loginText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent register = new Intent(LoginActivity.this,RegisterAcitivity.class);
                startActivity(register);
            }
        });
    }

    public void loginUser(View view) {
        String email = emailEditText.getText().toString();
        String passe = passeEditText.getText().toString();
        if(!TextUtils.isEmpty(email) && !TextUtils.isEmpty(passe)) {
            auth.signInWithEmailAndPassword(email, passe).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        checkIfUserExists();
                    } else {
                        FirebaseAuthException e = (FirebaseAuthException) task.getException();
                        Toast.makeText(LoginActivity.this, "Erreur : " + e.getMessage(), Toast.LENGTH_SHORT).show();
                        return;
                    }
                }
            });
        }else{
            Toast.makeText(this, "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
        }
    }
    public  void checkIfUserExists() {
        final  String user_id = auth.getCurrentUser().getUid();
        database.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.hasChild(user_id)){
                    Intent home = new Intent(LoginActivity.this,MainActivity.class);
                    startActivity(home);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد