Google Fotoğraflar ve Flutter ile Fotoğraf Paylaşma Uygulaması

Münevver BAHAR
HardwareAndro
Published in
7 min readOct 14, 2020
Photo by Alexander Andrews on Unsplash

Herkese merhaba, bu yazıda hep beraber Google Developers Codelab’lerinden birisi ile ilerleyeceğiz. Bu codelab’de Google Fotoğraflar Kitaplığı API’si kullanılarak oluşturulmuş bir gezi için fotoğrafları paylaşmak üzere bir uygulama oluşturacağız. Kullanıcı, Google ile Oturum Açma özelliğini kullanarak oturum açar ve uygulamaya Google Fotoğraflar Kitaplığı API’sini kullanma yetkisi verir. Daha sonra kullanıcı, açıklamalarıyla beraber fotoğraflar yükleyebilmek için bir gezi oluşturur. Her bir gezi, o gezi için fotoğraf ekleyebilecek diğer kullanıcılarla paylaşılabilir niteliktedir.

Ne öğreneceğiz?

- Medya yüklemek ve albüm paylaşmak için Google Fotoğraflar Kitaplığı API’sı nasıl kullanılır?

- Flutter’da Google Oturum Açma nasıl kullanılır?

- Flutter’dan Google API çağrıları nasıl yapılır?

Başlangıç uygulamasının kaynak koduna buradan erişebilirsiniz. Kodu indirdikten sonra çalıştırın. Daha önce Flutter ile geliştirme yapmadıysanız, geliştirme ortamınızı kurmak için bu bağlantıdaki adımları izleyebilirsiniz. Uygulamayı başarılı bir şekilde çalıştırdıktan sonra aşağıdaki ekranı görmelisiniz.

Google Fotoğraflar Kitaplığı API’sini Kuralım

Google Fotoğraflar Kitaplığı API’si, OAuth 2.0 kullanarak kullanıcılarınızın kimliğini doğrulamanızı gerektirir. Kullanıcılar uygulamada oturum açar ve kendi adına API ile etkileşime girme yetkisi verir.

İlk olarak yeni bir Firebase projesi oluşturalım ve uygulamamızı kaydedelim

Firebase konsoluna gidin ve “ Proje Ekle ” ye tıklayın. Bir proje adı girin ve devam edin. Buradan sonra android için ilerleyeceğiz ios için gerekli adımlara buradan ulaşabilirsiniz.

  • Android uygulama kayıt ekranını açmak için android simgesine tıklayalım.
  • Paketimizin adını giriyoruz: “ com.google.codelab.photos.sharing ”
  • SHA1 imzalama sertifikası alacağız.

Bunun için projemizin ./android dizinine girerek ./gradlew signingReport komutunu çalıştıralım. Elde ettiğimiz parmak izini de ekledikten sonra uygulamayı kaydet diyoruz.

Daha sonra bizim için oluşturulan google-service.json dosyasını bilgisayarınıza indirelim ve “ android/app/” dizinine taşıyalım. Bu dosya, yeni kurduğunuz Firebase ve Google Developers projesi için proje yapılandırması içerir. Ayrıntılar için google_sign_in paketinin dökümanlarına bakabilirsiniz. Firebase konsolunda başka herhangi bir adımı tamamlamanız gerekmez. Firebase SDK, uygulamaya zaten eklenmiştir.

Google Fotoğraflar Kitaplığı API’sini etkinleştirelim

  1. Google Developers konsolunda API ekranını açın ve “ Google Photos Library API “ yi etkinleştirin. (“ Etkinleştir ” düğmesi devre dışıysa, önce ekranın üst kısmındaki Firebase projesini seçmeniz gerekebilir )

2. Google Photos Library API kapsamlarını ve e-posta adresinizi eklemek için Google Developers konsolunda OAuth izin ekranı yapılandırmasını açın.

  • Uygulama adını girin
  • Bir destek e-posta adresi seçin
  • "Kapsam ekle" yi seçin ve aşağıdaki kapsamları girmek için "manuel olarak yapıştır" seçin.
https://www.googleapis.com/auth/photoslibrary
https://www.googleapis.com/auth/photoslibrary.sharing
  • Kaydet’i seçin.
  • Bu codelab’de devam etmek için uygulamayı doğrulama için göndermeye gerek yok. Bu yalnızca uygulamanızı başlatırken gereklidir, kişisel test için gerekli değildir.

Uygulamayı çalıştırın ve oturum açın

Uygulamayı tekrar çalıştırın ve “ Google Fotoğraflar’a Bağlan ” ı seçin. Bir kullanıcı hesabı seçmeniz ve kimlik doğrulama kapsamlarını kabul etmeniz istenir. Bütün adımları başarıyla yaptıysanız ekranda boş bir liste göreceksiniz.

Albüm Oluşturun

Create a trip albüm butonuna tıklandığında kullanıcıya gezisinin ismini sormalıyız ve bu isimle yeni bir albüm oluşturmalıyız.

İlk olarak create_trip_page.dart içerisinde albüm oluşturmak için Kütüphane API’sine istek gönderen mantığı yazacağız. Kullanıcının girdiği gezinin adıyla çağırmak için dosyanın sonunda _createTrip(…) methodunu uygulayın.

lib / pages / create_trip_page.dart

Albümü oluşturan Kitaplık API’sine yapılan çağrıyı uygulayın. API modelinde, albümün başlığını parametre olarak alan createAlbum(...)methodunu uygulayın. PhotosLibraryApiClientGerçek REST çağrısının yapıldığı yere bir çağrı yapar.

lib / model / photos_library_api_model.dart

photos_library_api_client.dart içinde albümü oluşturmak için REST çağrısını uygulayın. Unutmayın ki, bu çağrı için gerekli olan titleözelliğini CreateAlbumRequestiçerir.

lib / photos_library_api / photos_library_api_client.dart

Uygulamayı tekrar çalıştırıp deneme isimli bir gezi oluşturabiliriz.

Fotoğraf Yükleyelim

Bir sonraki adım, fotoğrafları bir geziye yüklemektir. Veriler, kullanıcının Google Fotoğraflar hesabında saklanır, bu nedenle verileri kendiniz saklamanız veya işlemeniz konusunda endişelenmenize gerek kalmaz.

Flutter’da Fotoğraf Çekmek

İlk olarak, fotoğrafa katkıda bulun iletişim kutusundaki _getImage(...) yöntemi uygulayın. Bu method, kullanıcı “+ ADD PHOTO ” butonuna tıkladığında çağrılır.

Aşağıdaki kodu açıklayacak olursak, image_pickerbir fotoğraf çekmek, kullanıcı arayüzünü güncellemek ve görüntüyü yüklemek için API modelini çağırmak için paketi kullanır. _getImage(...) daha sonra fotoğrafı Google Fotoğraflar'da oluşturmak için gerekli olan bir upload token’ını kaydeder.

lib / components / Contribute_photo_dialog.dart

Upload token’ı almak üzere görüntüyü yüklemek için Library API çağrısını uygulayın

Medyayı yüklemek için REST isteğini uygulayın. Yükleme isteğinin türünü ve dosya adını belirtmek için bazı başlıklar ayarlamanız gerekir. photos_library_api_client.dart dosyasında HTTP çağrısının döndürdüğü upload token’ını return edecek uploadMediaItem(…) methodunu uygulayın.

lib / photos_library_api / photos_library_api_client.dart

Upload token’ından bir medya öğesi oluşturun

Ardından, yükleme belirtecinden kullanıcının kitaplığında bir ortam ögesi oluşturmayı uygulayın.

Bir medya ögesi oluşturmak için yükleme belirteci, isteğe bağlı bir açıklama (örneğin, fotoğrafın veya videonun başlığı) ve isteğe bağlı bir albüm tanımlayıcısı gerekir. Field Trippa, yüklenen fotoğrafı her zaman doğrudan bir gezi albümüne ekler.

Çağrıyı yükleme belirteci, açıklama ve albüm kimliğiyle birlikte photos_library_api_clientbu çağrılara uygulayın mediaItems.batchCreate. API modelinde, Kitaplık API'sini çağırancreateMediaItem(...)yöntemini uygulayın . Bu yöntem bir medya ögesi döndürür.

( photos_library_clientBu çağrı için zaten uygulanmıştır.)

lib / model / photos_library_api_model.dart

Uygulama dışı kullanıcılarla albüm paylaşın

Her gezi, Google Fotoğraflar’da bir albümle desteklenir, bu nedenle bir albümü bir URL aracılığıyla “paylaşabilir” ve bu URL’ye sahip olan herkesin kullanımına sunabilirsiniz.

_shareAlbum(...)Albümü paylaşmak için modeli çağıran asenkron çağrıyı uygulayın ve ardından görüntülenen albümü yeniden yükler. Albümü yeniden yüklediğinizde, kullanıcıya daha sonra bir iletişim kutusunda göstereceğiniz shareableUrlözelliğini içerenshareInfoyer almaktadır.

lib / pages / trip_page.dart

Kullanıcı sayfanın üst kısmındaki " SHARE WITH ANYONE " butonuna tıkladığında çağrılan_showShareableUrl(...)yöntemini uygulayın. İlk olarak, albümün önceden paylaşılıp paylaşılmadığı kontrol edilir ve paylaşıldıysa showUrlDialog(...)methodu çağrılır.

Bir iletişim kutusunda shareableUrl gösteren _showUrlDialog(...) yöntemini uygulayın.

Uygulamayı açın ve bir gezi seçin. Ekranın üst kısmındaki “ SHARE WITH ANYONE ” ı seçin ve döndürülen URL’yi tarayıcınızda açın.

Uygulamanızın içinde albüm paylaşın

Google fotoğraflarda albümler URL’e erişimi olan herkes ile bir URL aracılığıyla paylaşılabileceği gibi Library API aracılığıyla share tokens ile de paylaşılabilir. Share tokens, uygulamanızın içinde kullanıcıları API aracılığıyla paylaşılan bir albüme katmak için kullanılan bir dizedir.

Share Token’ını görüntüleyin

Önceki adımda zaten bir albüm paylaşan _shareAlbum(…) methodunu uygulamıştık. trip_page sayfasında, kullanıcı ekrandaki “ SHARE WITH FIELD TRIPPA ” butonuna tıkladığında çağrılan _showShareToken(…) methodunu uygulayın.

lib / pages / trip_page.dart

Daha sonra _showTokenDialog(…) methodu içerisinde “share token” ekranını implement edelim.

lib/pages/trip_page.dart

Paylaşılan albümleri listeleyin

Yalnızca kullanıcının oluşturduğu veya Google Fotoğraflar kitaplığına eklediği albümler Google Fotoğraflar uygulamasındaki “Albümler” ekranında gösterilir. Library API’de albums.list çağrılırken yalnızca bu albümler döndürülür. Ancak uygulamamızda kullanıcı, yalnızca paylaşılan albümleri listeleme çağrısında döndürülen kullanıcıların paylaştıkları albümlerine katılabilirler.

Albümler API Modelinde yüklenir ve önbelleğe alınır. Albümleri ve paylaşılan albümleri tek bir liste olarak kaydetmeden önce yüklemek için modeldeki updateAlbums()methodunu değiştirelim. Bu uygulama, albümleri önbelleğe alınmış albümler listesinde birleştirmeden önce asenkron olarak listelemek için birden fazla Futures kullanır.

lib / model / photos_library_api_model.dart

Paylaşılan bir albüme katılma

Kullanıcının girdiği share token ile API modeli çağrıları için join_trip_page sayfasında _joinTrip methodunu uygulayın.

lib/pages/join_trip_page.dart

Paylaşılan bir albüme katılmak için farklı bir cihaz ya da farklı bir hesap kullanmalısınız.

ÖZET

  • Google Fotoğraflar tarafından desteklenen, uygulamamıza paylaşım işlevi ekledik.
  • Depolama konusunda endişelenmemize gerek kalmadan Google Fotoğraflar Kitaplığı API’si üzerinde kendi fotoğraf ve video paylaşım deneyimlerimizi oluşturabildik.
  • İçeriği doğrudan kullanıcılarımızla paylaşabilmek için API’nin bir parçası olan paylaşım işlevini farklı şekillerde kullandık.
  • Google Fotoğraflarda yeni albümler oluşturduk ve fotoğraflar yükledik.

Medya paylaşımı ve Library API’nin diğer bölümleri hakkında daha fazla bilgi edinmek için https://developers.google.com/photos adresinde Google Fotoğraflar API’lerine yönelik geliştirici dökümanlarını inceleyebilirsiniz.

--

--