· Geliştiriciler · 6 dk okuma

Google Play Developer API ile Play Store listeni güncellemek

Google Play Developer API ile Play Store listeni güncellemek
TL;DR. Android Publisher API üzerinden bir Play listesini güncellemek tek bir işlemdir. Bir edit açarsın (edits.insert), içinde listeleme metnini ve görselleri değiştirirsin (edits.listings.update, edits.images.upload), ardından doğrulayıp yayınlamak için edits.commit çağırırsın — ya da vazgeçmek için edits.abandon. Commit yapılana kadar hiçbir şey yayına girmez. Kimlik doğrulama bir Google Cloud servis hesabıyla yapılır ve neredeyse herkesin takıldığı adım şudur: servis hesabının sadece Google Cloud IAM'de bir role sahip olması yetmez, Play Console'a da davet edilmesi gerekir.

Google Play Developer API (resmi adıyla Android Publisher API), Play Console'u açmadan bir mağaza listesini — başlık, açıklamalar, ekran görüntüleri, öne çıkan görsel — değiştirmeni sağlar. Bir CMS'den yerelleştirilmiş metin gönderiyorsan, bir derleme hattından ekran görüntülerini senkronize ediyorsan ya da onlarca dil listesini aynı anda güncelliyorsan ihtiyacın olan tam olarak budur. İşte bunu doğru yapmanın uçtan uca akışı — referans dokümanlarının derinlere gömdüğü kısımlar dahil.

Bir edit bir işlemdir, doğrudan canlı yazma değil

Seni en çok baş ağrısından kurtaracak zihinsel model şudur: canlı listeyi asla doğrudan düzenlemezsin. Bir edit açarsın; bu, uygulamanın o anki yayındaki durumunun özel bir çalışma kopyasıdır — listeler, görseller, kanallar, her şey içine kopyalanır. Tüm değişikliklerini bu kopya üzerinde yaparsın. Ardından bütününü tek seferde commit edersin ya da vazgeçersin ve hiçbir şey olmamış gibi kalır.

Google'ın kendi ifadesi nettir: "Bir edit içinde yapılan değişiklikler, edit commit edilene kadar canlı değildir." Commit sırasında doğrulama hatası yoksa, edit içindeki tüm değişiklikler birlikte yayına girer ve mevcut durumun yerini alır. Doğrulama başarısız olursa API hata fırlatır ve canlı liste hiç etkilenmez. Yani yaşam döngüsü tam olarak dört adımdır:

  • edits.insert — edit'i oluşturur, karşılığında bir editId alırsın.
  • değiştirme — her dil için metin için edits.listings.update, ekran görüntüleri ve grafikler için edits.images.upload / deleteall.
  • edits.commit — her şeyi doğrular, ardından hepsini atomik olarak yayınlar.
  • edits.abandon — taslağı atar, canlı liste değişmeden kalır.

Etrafında tasarım yapman gereken sıkı bir kısıtlama: bir hesabın aynı anda yalnızca tek bir açık edit'i olabilir; biri bir edit'i commit ederse ya da uygulamayı Play Console arayüzü üzerinden düzenlerse, o uygulama için açık olan diğer tüm edit'ler geçersiz sayılır. Bir edit'i kısa ömürlü tut — aç, yaz, commit et. Bir insan console'da dolaşırken saatlerce açık bırakma.

Kimlik doğrulama: servis hesabı, artı herkesin unuttuğu davet

Otomatik bir güncelleyici için kullanıcı OAuth'u değil bir servis hesabı istersin. İki sistem devreye girer ve bunlar gerçekten ayrıdır:

  1. Google Cloud. Bir servis hesabı oluştur, projede Google Play Android Developer API'sini etkinleştir ve bir JSON anahtarı indir. İhtiyacın olan tek kapsam https://www.googleapis.com/auth/androidpublisher'dır.
  2. Play Console. Kullanıcılar ve izinler'e git, Yeni kullanıcı davet et'e tıkla, servis hesabının e-postasını (...@...iam.gserviceaccount.com adresini) yapıştır ve uygulamaya erişim ver. Ancak bundan sonra o anahtar listene dokunabilir.

Bir ön koşul daha: uygulamanın zaten var olması ve en az bir yayını olması gerekir (console üzerinden yüklenmiş en az bir APK/AAB). API üzerinden tamamen sıfırdan yeni bir uygulama başlatamazsın.

Dört çağrı, REST olarak

Liste metnini güncellemek

edits.listings.update bir PUT'tur — o dilin listesinin tam olarak yerine geçer. Ne gönderirsen liste o olur; dışarıda bıraktığın alanlar korunmaz, temizlenir. Yani sadece kısa açıklamayı değiştirmek istiyorsan bile başlığı ve tam açıklamayı da birlikte göndermen gerekir, yoksa onları siliverirsin. Gerçekten kısmi bir değişiklik istediğinde, yalnızca sağladığın alanları birleştiren ayrı bir edits.listings.patch vardır. Çoğu hat için tam PUT daha temizdir — zaten tam listeyi tek doğruluk kaynağından üretiyorsun, bu yüzden bütünüyle değiştirmek tam olarak doğrusudur.

Üç metin alanı ve sınırları: title en fazla 30 karakter, shortDescription en fazla 80, fullDescription en fazla 4000. Her dil için tek bir liste kaynağı, URL'deki BCP-47 dil etiketiyle anahtarlanır (en-US, de-DE, ja-JP vb.). On dili güncellemek için aynı edit içinde on listings.update çağrısı yaparsın — ardından tek bir commit hepsini birlikte yayınlar.

Ekran görüntülerini ve öne çıkan görseli yüklemek

Görseller dil bazında ve görsel türü bazında eklenir. Görsel türü bir enum'dur ve listedeki her varlık yuvası şu değerlerden birine karşılık gelir:

  • phoneScreenshots, sevenInchScreenshots, tenInchScreenshots — telefon ve tablet ekran görüntüsü setleri.
  • tvScreenshots, wearScreenshots — Android TV ve Wear OS.
  • featureGraphic — listenin üstünde gösterilen 1024×500 banner.
  • icon, tvBanner — uygulama simgesi ve TV banner'ı.

edits.images.upload, edit'e belirli bir dil ve türde tek bir görsel ekler. "Tüm diziyi ayarla" şeklinde bir çağrı yoktur, bu yüzden ekran görüntülerini değiştirmenin güvenilir yolu, önce o dil ve görsel türü için edits.images.deleteall çağırmak, ardından yeni seti göstermek istediğin sırayla yüklemektir. edits.images.list edit'te şu anda ne olduğunu okur, edits.images.delete ise cerrahi bir değişiklik gerekiyorsa tek bir görseli id'sine göre kaldırır. Bunların hepsi commit edene kadar edit içinde kalır.

Commit etmek — ve "canlı" gerçekte ne anlama gelir

İnsanları şaşırttığı için net olunması gereken birkaç şey var:

  • Yeni bir derleme gerekmez. Yalnızca listeyi değiştiren bir edit'i commit etmek yeni bir APK/AAB gerektirmez. Metin ve görseller meta veridir; mevcut yayına karşı istediğin kadar güncelleyebilirsin. (Uygulamanın yalnızca daha önce bir yayınının olması gerekir.)
  • Commit önce doğrular, sonra yayınlar. Bir ekran görüntüsü yanlış boyuttaysa ya da bir alan çok uzunsa, commit başarısız olur ve canlı liste asla değişmez — düzeltip yeniden commit edersin.
  • Anlık değildir. Başarılı bir commit'ten sonra, değişikliklerin görünmesi birkaç saate kadar sürebilir — Play Console'da elle yapılan düzenlemelerde olduğu gibi. Commit'te dönen 200 kodunu "kullanıcılara hemen görünür" diye yorumlama.
  • Vazgeçmek ücretsizdir. Bir deneme yanlış görünüyorsa, edits.abandon taslağı canlı listeye hiçbir etkisi olmadan atar. Bir hattı riske girmeden doğrulamak için kullanışlıdır.

Kodsuz yol: tasarla, çevir, yayınla

Yukarıdaki API, harcayacak mühendislik zamanın ve senkronize edeceğin bir doğruluk kaynağın varsa doğru araçtır. Yapmadığı şey ise varlıkları üretmek. Ekran görüntülerini tasarlamak, başlığı ve her iki açıklamayı yazmak ve bunların hepsini dil başına üretmek yine sana düşer — API yalnızca elinize verdiğini gönderir.

İşte bu kısmı Mokbi hallediyor. Ekran görüntülerini tarayıcıda tasarlıyorsun, başlığı, kısa açıklamayı ve tam açıklamayı bunların yanında taslak olarak yazıyorsun ve tüm listeyi tek seferde 50 dile çeviriyorsun — böylece yukarıdaki on listings.update çağrısına gönderilecek yer tutucu metin değil, gerçek, yerelleştirilmiş içerik olur.

Peki ya yayınlamanın kendisi? Onu da Mokbi yapıyor. Google Play için, arka planda tam olarak bu akışı çalıştırıyor (edits.insertlistings.update → görsel yükleme → commit), böylece yerelleştirilmiş listen ve varlıkların yukarıdaki kodun tek satırını yazmadan yayına girer. App Store için ise, Apple son Gönder'e basmanı ve incelemeyi geçmeni şart koştuğundan, sürümü App Store Connect'te doldurulmuş ve göndermeye hazır şekilde hazırlıyor. Ekran görüntülerini ve öne çıkan görseli tasarlamak, listeyi yazmak, 50 dile çevirmek ve yayına almak tek, kesintisiz bir akıştır.

Sırada ne var

Düzenleyiciyi aç →