İnsanların, hayatını kolaylaştıran veya eğlenceli zamanlar geçirmesini sağlayan Android uygulamalar içinde kullanılan veriler farklı şekillerde depolanmaktadır. Bu yöntemlerde biri ve çoğunlukla kullanılan yöntem, verilerin uzak sunucularda tutulmasıdır.
İçerikleri, verileri çok sayıda olan uygulamalar bir web servis aracılığı ile verilerini sunucudaki veritabanında tutmaktadır. Böylelikle yazılımcılar, Android cihazın daha az şarj tüketmesini ve uygulamanın daha performanslı çalışmasını sağlamış olurlar. Android uygulamada web servis kullanımı anlatan “RESTful Web Servisi ile Post ve Get işlemleri” başlıklı makalemi okuyarak bu konuyu uygulayabilirsiniz.
Bu makalemde ise Android uygulamadan yüklenen bir resmin, Firebase sunucu sistemine nasıl veri gönderilebileceğini anlatacağım.
Firebase Nedir?
Firebase , JSON verilerimizi uzak bir sunucuda gerçek zamanlı olarak depolayabildiğimiz, bulut (Cloud) tabanlı bir platformdur. Veriyi sunucu da gerçek zamanlı olarak depolamak demek, Firebase sunucu tarafında (BackEnd) bize sağlamış olduğu servis desteği sayesinde, veri tabanında gerçekleşen her değişiklikten anında haberdar olabilmemizi sağlaması anlamına gelir.
Firebase Alt Yapısını Kullanarak Nasıl Uygulamalar Yapılabilir?
- Bir sohbet uygulaması yapabiliriz.
- Kullanıcıların paylaşım yapabildiği ve diğer kullanıcıların bu paylaşımları anlık olarak görebildiği sosyal bir platform kurabiliriz.
- Kullanıcıların birbirileriyle yarıştığı online bir yarışma uygulaması geliştirebiliriz.
- Birden çok kullanıcının hem mobil cihazlardan hem de bilgisayarlardan erişebildiği bir stok takip sistemi kurabiliriz.
Örneğimizi uygulamak için işlemlerimize başlayalım.
1- Firebase Kurulum
Firebase ile ilgili bir işlem yapacaksanız gmail hesabınız ile Firebase sitesinde oturum açmalısınız. Firebase console sayfasını açıp, karşınıza çıkan ekranda Add Project bölümünü seçerek işlemlere başlayın. Bu işlem ile birlikte oluşturacak olduğunuz Android uygulamanızı Firebase sistemine tanıtmış olacağız. Add Project bölümünü seçtikten sonra açılan Create Project sayafasında uygulama ismini yazmalısınız. Bu sitede Create Project butonunu seçtiğinizde, sistem size Android mu Ios mu uygulama geliştireceğini soracaktır. Siz tabiki Android seçmelisiniz.:)
Android App seçtikten sonra aşağıdaki ekran çıkacaktır.Uygulamanızın paket ismini yazıp, Register App tıklayınız.
Yeni ekranda olan download butonuna basıp, indirilen google-services.json dosyasını Proje Ana Dizin ->app dizininin içine yerleştirin.
2- Firabase Sistemine İzin Verme
Uygulamanızın Firebase Depolama Alanına erişmesine izin vermek için, Firebase konsolunda izinler ayarlamanız gerekir. Firebase konsolunda Develop sekmesinin içinde Storage alanınız açınız. Aşağıda gösterdiğim RULES sekmesini açınız
RULES sekmesine aşağıda kodu kopyalayıp yapıştırın. Böylelikle Firebase deoplama alanına yazma ve okuma izni vermiş olacaksınız.
1 2 3 4 5 6 7 |
service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } } |
3- Android Uygulama ve Ayarların Oluşturulması
Firebase kurulumunda belirtiğiniz paket ismini kullanarak Android projesi oluşturalım. Projenizin ana dizininde bulunan build.gradle dosyasını açıp, dependencies kod bloklarının arasına aşağıda kodu eklemelisiniz.
1 |
classpath 'com.google.gms:google-services:3.0.0' |
Sonrasında app dizinin içindeki build.gradle dosyasını açıp, dependencies kod bloklarının arasına aşağıda kodu eklemelisiniz.
1 2 |
compile 'com.google.firebase:firebase-storage:9.2.1' compile 'com.google.firebase:firebase-auth:9.2.1' |
Son olarak app dizinin içindeki build.gradle dosyasını ilk satırına aşağıdaki Google Services plugin kodunu ekleyiniz.
1 |
apply plugin: 'com.google.gms.google-services' |
Diğer bir yanda da AndroidManifest.xml dosyasında, dosya okuma ve internet izin kodlarımızı eklemeliyiz.
1 2 |
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
4- Uygulamada Arayüz Kodlama
Uygulamada, cihazınızdan bir resim seçmek ve seçilen resmi yüklemek için iki button’ a ihtiyaç duyulmaktadır. Yüklemek istediğiniz görüntüyü seçtikten sonra, resim uygulamada gösterilecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/layout_button" android:orientation="horizontal" android:layout_alignParentTop="true" android:weightSum="2" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btnChoose" android:text="Choose" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <Button android:id="@+id/btnUpload" android:text="Upload" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <ImageView android:id="@+id/imgView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </RelativeLayout> |
5- Activity Sınıfındaki Kodlamalar
Arayüze yerleştirdiğimiz butonları işlevsel hale getirmeyi yapacağız. Arayüz elemanlarını tanımladık. Sonra telefondan resim seçmeyi sağlayan button arayüzünün metodunu yazdık.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
public class MainActivity extends AppCompatActivity { private Button btnChoose, btnUpload; private ImageView imageView; private Uri filePath; private final int PICK_IMAGE_REQUEST = 71; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //arayüz elemanları tanımlandı btnChoose = (Button) findViewById(R.id.btnChoose); btnUpload = (Button) findViewById(R.id.btnUpload); imageView = (ImageView) findViewById(R.id.imgView); btnChoose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { chooseImage(); } }); btnUpload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { uploadImage(); } }); } //Telefondan resim seçmeyi sağlayan metod private void chooseImage() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null ) { filePath = data.getData(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); imageView.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } } } } |
6- Firebase Sistemine Dosya Yükleme
Şimdi görüntüyü Firebase’e yüklemek için ilgili yöntemleri uygulayabiliriz. İlk olarak,global alanda Firebase sınıflarını tanımlama işlememizi yapalım. Aşağıdaki kodları global alana ekleyin.
1 2 3 |
//Firebase FirebaseStorage storage; StorageReference storageReference; |
MainActivity sınıfındaki onCreate metodu içine aşağıdaki kodları ekleyin.
1 2 |
storage = FirebaseStorage.getInstance(); storageReference = storage.getReference(); |
Son olarak upload butonuna tıklandığında resmin yüklenebilmesi için aşağıdaki uploadImage metod kodlarını ekleyin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
private void uploadImage() { if(filePath != null) { final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setTitle("yükleniyor..."); progressDialog.show(); StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString()); ref.putFile(filePath) .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { progressDialog.dismiss(); Toast.makeText(MainActivity.this, "Uploaded", Toast.LENGTH_SHORT).show(); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { progressDialog.dismiss(); Toast.makeText(MainActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show(); } }) .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { @Override public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot .getTotalByteCount()); progressDialog.setMessage("Uploaded "+(int)progress+"%"); } }); } } |
Projeyi çalıştırdığınızda “yükleniyor” şeklinde resmin yüklediğine dair gelen bilgi görseliyle birlikte aşağıdaki gibi dosyamız yüklenecektir.
Kaynaklar
1- https://smality.com/restful-web-servisi-ile-post-ve-get-islemleri/
2-https://console.firebase.google.com
3- https://code.tutsplus.com/tutorials/image-upload-to-firebase-in-android-application–cms-29934