ফায়ারবেজ রিয়েলটাইম ডেটাবেজ মোবাইল অ্যাপের জন্য খুবি দারুণ একটা সার্ভিস। আপনার একটা অ্যাপ মিলিয়ন ইউজার ব্যবহার করছে। যেমন ধরি ক্রিকেট স্কোর আপডেট। ঐটাতে স্কোর আপডেট যেন সরাসরি সবাই সাথে সাথে আপডেট পায়। আবার ঐ অ্যাপে ব্যবহারকারীরাও যেন কমেন্ট করতে পারে। কমেন্ট গুলো আবার সকল ব্যবহারকারী পড়তে পারে। সবই সাথে সাথে। এরকম একটা অ্যাপ ডিজাইন করা, ডেটাবেজ ম্যানেজ করা অনেক অনেক কমপ্লেক্স বিষয়। কিন্তু ফায়ারবেজ রিয়েলটাইম ডেটাবেজ ব্যবহার করে এমন কমপ্লেক্স একটা অ্যাপ বা এর থেকে কমপ্লেক্স কোন আইডিয়া এক দিনেই ইমপ্লিমেন্ট করা সম্ভব।
ফায়ারবেজ রিয়েলটাইম ডেটাবেজ অ্যান্ড্রয়েডে কিভাবে ব্যবহার করা যায়, তাই দেখব। প্রথমে একটা অ্যান্ড্রয়েড প্রজেক্ট তৈরি করে নিব। এরপর ঐটার বান্ডেল আইডেন্টিফায়ারটা কপি করে নিব। ফায়ারবেজ কনসোল থেকে একটা প্রজেক্ট তৈরি করব। এবং ঐ প্রজেক্টের আন্ডারে একটা মোবাইল অ্যাপ যুক্ত করব। এসব কিভাবে করতে হয়, তা নিয়ে বিস্তারিত লিখেছি অ্যান্ড্রয়েড প্রজেক্টে গুগলে ফায়ারবেজ লেখাটিতে। বুঝতে অসুবিধে হলে ঐখান থেকে দেখে নিতে পারেন। এখানে আমরা দেখব কিভাবে রিয়েলটাইম ডেটাবেজ ব্যবহার করা যায়।
রিয়েলটাইম ডেটাবেজ ব্যবহার করতে চাইলে প্রজেক্টের আন্ডারে গিয়ে Database এ ক্লিক করতে হবে।
প্রথমবার আমাদের কোন চাইল্ড থাকবে না। আমরা একটা চাইল্ড তৈরি করে নিব। প্রজেক্টের নাম এর উপর মাউস নিলে + লেখা দেখা যাবে। সেখানে ক্লিক করলে চাইল্ড যুক্ত করার অপশন পাওয়া যাবে।
চাইল্ড এর একটা নাম দিলাম। যেমন আমি আমার অ্যাপ থেকে নাম স্টোর করব, তাই নাম দিলাম name. এবং value দিলাম Jack.
এবার অ্যান্ড্রয়েড প্রজেক্টে ফিরে আসি। প্রজেক্টের অ্যাপ লেভেল গ্রেডেল ফাইলের dependencies এর মধ্যে compile ‘com.google.firebase:firebase-database:9.0.1’ যুক্ত করতে হবে।
আমাদের অ্যাপে একটা টেক্সটফিল্ড থাকবে, একটা টেক্সট এডিট থাকবে এবং একটা বাটন থাকবে। নিচের মত করে একটা UI তৈরি করে নিতে পারি।
XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" android:padding="20dp" tools:context="me.jakir.firebaserealtimedb.MainActivity"> <TextView android:id="@+id/textViewName" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Name" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/editTextName" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Type Your Name" /> <Button android:id="@+id/buttonUpdate" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Update" /> </LinearLayout>
রিয়েলটাইম থেকে ডেটা রিড বা রাইট করার জন্য আমাদের একটা রেফারেন্স তৈরি করতে হবে। তার জন্যঃ
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference mRef = mRootRef.child("name");
এখানে mRootRef.child(“name”); এর name টা হচ্ছে আমরা ফায়ারবেজ এর চাইল্ড তৈরি করার সময় সে নামটি দিয়েছি, সেটা।
ফায়ারবেজে ডেটা সেট করা খুবি সহজঃ
mRef.setValue("Hello, World!");
ডেটা রিড করাও সহজঃ
// Read from the database mRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // This method is called once with the initial value and again // whenever data at this location is updated. String value = dataSnapshot.getValue(String.class); } @Override public void onCancelled(DatabaseError error) { // Failed to read value Log.w(TAG, "Failed to read value.", error.toException()); } });
আমাদের সম্পুর্ণ জাভা ফাইলঃ
package me.jakir.firebaserealtimedb; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; 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; public class MainActivity extends AppCompatActivity { TextView mNameTextView; EditText mNameEditText; Button mButtonUpdate; DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference mRef = mRootRef.child("name"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get UI elements mNameTextView = (TextView)findViewById(R.id.textViewName); mNameEditText = (EditText) findViewById(R.id.editTextName); mButtonUpdate = (Button)findViewById(R.id.buttonUpdate); } @Override protected void onStart() { super.onStart(); mRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String text = dataSnapshot.getValue(String.class); mNameTextView.setText(text); } @Override public void onCancelled(DatabaseError databaseError) { } }); mButtonUpdate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mRef.setValue(mNameEditText.getText().toString()); } }); } }
অ্যাপটি রান করার পর এখনো কোন কিছুই দেখব না। আর একটু কিছু বাকি রয়েছে। কনসোল থেকে Realtime Database এর রুল পরিবর্তন করতে হবে। ডিফল্ট ডেটা বেইজ থেকে ডেটা রিড করতে চাইলে বা রাইট করতে চাইলে Authentication এর দরকার হয়। আমরা যেহেতু ট্রাই করতেছি, তাই আপাতত এই authentication টা তুলে দিব। নিচের মত করে read & write এর ভ্যালু true করে দেই।
এখন অ্যাপটি রান করার পর যদি কনসোল থেকে name চাইল্ড এর ভ্যালু পরিবর্তন করি, সাথে সাথে তা মোবাইল অ্যাপে পরিবর্তন হবে। আবার যদি এডিট টেক্সট এ কিছু লিখে আপডেট এ ক্লিক করি, তাহলে সাথে সাথে এ অ্যাপটা যত ডিভাইসে ইন্সটল থাকবে, সব জায়গায় আপডেট হবে।
অ্যান্ড্রয়েড নিয়ে অন্যান্য লেখা গুলো পাওয়া যাবে অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্ট পেইজে। প্রজেক্টের সোর্স কোড পাওয়া যাবে গিট রিপোজিটোরিতে।
এই লেখাটি পড়ার পর বুঝতে অসুবিধে হলে নিচের ভিডিও টিউটোরিয়ালটি দেখতে পারেনঃ
Does it free or have any Limit ?
Have limit
Thanks
Thanks brother for your post..
thanks brother
আমি যদি ফায়ারবেজ ডাটাবেজ থেকে অনেকগুলো ইমেজ একসাথে রিট্রিভ করে অ্যাপে শো করতে চাই সেটা কিভাবে করবো??
প্লিজ একটু বলবেন ভাইয়া? অথবা আপনার এইটা নিয়ে কোন টিউটোরিয়াল থাকলে Link টা দিয়েন প্লিজ
another awesome tutotial.