· นักพัฒนา · อ่าน 6 นาที

อัปเดตหน้าร้าน Play Store ด้วย Google Play Developer API

อัปเดตหน้าร้าน Play Store ด้วย Google Play Developer API
TL;DR. การอัปเดตหน้าร้าน Play ผ่าน Android Publisher API คือธุรกรรมเดียว คุณเปิด edit ก่อน (edits.insert) จากนั้นแก้ไขข้อความและรูปภาพของหน้าร้านภายใน edit นั้น (edits.listings.update, edits.images.upload) แล้วค่อย edits.commit เพื่อตรวจสอบและเผยแพร่ — หรือใช้ edits.abandon เพื่อยกเลิกทิ้ง ไม่มีอะไรขึ้นจริงจนกว่าจะ commit การยืนยันตัวตนใช้ Google Cloud service account และขั้นตอนที่คนส่วนใหญ่พลาด คือ service account ต้องถูกเชิญเข้ามาใน Play Console ด้วย ไม่ใช่แค่กำหนดสิทธิ์ใน Google Cloud IAM เพียงอย่างเดียว

Google Play Developer API (ชื่อทางการคือ Android Publisher API) ให้คุณแก้ไขหน้าร้าน — ชื่อแอป คำอธิบาย ภาพหน้าจอ feature graphic — โดยไม่ต้องเปิด Play Console เลย นี่คือสิ่งที่คุณต้องการถ้ากำลังส่งข้อความที่แปลแล้วมาจาก CMS, ซิงก์ภาพหน้าจอมาจาก build pipeline หรืออัปเดตหน้าร้านหลายสิบภาษาพร้อมกัน บทความนี้คือขั้นตอนทั้งหมดสำหรับทำให้ถูกต้อง รวมถึงส่วนที่เอกสารอ้างอิงมักซ่อนไว้

edit คือธุรกรรม ไม่ใช่การเขียนสดทีละจุด

โมเดลความคิดที่ช่วยคุณได้มากที่สุดคือ คุณไม่เคยแก้ไขหน้าร้านจริงโดยตรง คุณจะเปิด edit ซึ่งเป็นสำเนาแบบส่วนตัวของสถานะปัจจุบันที่แอปเผยแพร่อยู่ — หน้าร้าน รูปภาพ track ทุกอย่างถูกคัดลอกเข้ามา คุณแก้ไขทุกอย่างกับสำเนานั้น แล้วค่อย commit ทั้งหมดพร้อมกันครั้งเดียว หรือ abandon ทิ้งแล้วเหมือนไม่มีอะไรเกิดขึ้น

คำพูดของ Google เองก็ตรงไปตรงมา: "Changes made within an edit are not live until the edit is committed." เมื่อ commit ถ้าไม่มี error จากการตรวจสอบ ทุกการเปลี่ยนแปลงใน edit จะขึ้นจริงพร้อมกัน แทนที่สถานะเดิม แต่ถ้าตรวจสอบไม่ผ่าน API จะโยน error กลับมาและหน้าร้านจริงจะไม่ถูกแตะต้อง วงจรชีวิตของมันจึงมีแค่สี่ขั้นตอน:

  • edits.insert — สร้าง edit และรับ editId กลับมา
  • แก้ไขedits.listings.update สำหรับข้อความแต่ละภาษา, edits.images.upload / deleteall สำหรับภาพหน้าจอและกราฟิก
  • edits.commit — ตรวจสอบทั้งหมด แล้วเผยแพร่ทุกอย่างพร้อมกันในครั้งเดียว
  • edits.abandon — ทิ้งฉบับร่าง หน้าร้านจริงไม่เปลี่ยนแปลง

ข้อจำกัดสำคัญที่ต้องออกแบบรองรับ: บัญชีหนึ่งเปิด edit ได้ ครั้งละหนึ่งรายการเท่านั้น และถ้ามีใคร commit edit หรือแก้ไขแอปผ่านหน้า Play Console UI edit อื่น ๆ ที่เปิดอยู่ของแอปนั้นจะถูกยกเลิกทั้งหมด ควรมอง edit เป็นสิ่งที่มีอายุสั้น — เปิด เขียน แล้ว commit ทันที อย่าปล่อยให้เปิดค้างไว้เป็นชั่วโมงระหว่างที่คนคลิกอยู่ใน console

การยืนยันตัวตน: service account บวกขั้นตอนเชิญที่คนมักลืม

สำหรับตัวอัปเดตอัตโนมัติ คุณต้องการ service account ไม่ใช่ user OAuth มีสองระบบที่เกี่ยวข้อง และแยกจากกันจริง ๆ:

  1. Google Cloud สร้าง service account เปิดใช้งาน Google Play Android Developer API บนโปรเจกต์ แล้วดาวน์โหลดคีย์ JSON scope เดียวที่ต้องใช้คือ https://www.googleapis.com/auth/androidpublisher
  2. Play Console ไปที่ Users & permissions คลิก Invite new users วางอีเมลของ service account (ที่ลงท้ายด้วย ...@...iam.gserviceaccount.com) แล้วให้สิทธิ์เข้าถึงแอป จากนั้นคีย์นี้จึงจะแตะต้องหน้าร้านของคุณได้

เงื่อนไขอีกข้อ: แอปต้องมีอยู่แล้วและเคยปล่อยเวอร์ชันมาแล้วอย่างน้อยหนึ่งครั้ง (มี APK/AAB อย่างน้อยหนึ่งไฟล์ที่อัปโหลดผ่าน console) คุณสร้างแอปใหม่ทั้งหมดผ่าน API เพียงอย่างเดียวไม่ได้

สี่คำสั่งหลัก แบบ REST

การอัปเดตข้อความหน้าร้าน

edits.listings.update เป็น PUT — การแทนที่ทั้งหมด ของหน้าร้านภาษานั้น อะไรก็ตามที่คุณส่งไปจะกลายเป็นหน้าร้าน ส่วนที่คุณไม่ได้ใส่จะถูกล้างทิ้ง ไม่ใช่ถูกเก็บไว้ ดังนั้นถ้าคุณต้องการแก้แค่คำอธิบายสั้น คุณก็ยังต้องส่งชื่อแอปและคำอธิบายเต็มไปด้วย ไม่อย่างนั้นจะถูกลบไป ถ้าคุณต้องการแก้เพียงบางส่วนจริง ๆ มี edits.listings.patch แยกต่างหากที่จะรวมเฉพาะฟิลด์ที่คุณระบุ สำหรับ pipeline ส่วนใหญ่ การ PUT แบบเต็มจะสะอาดกว่า — เพราะคุณ render หน้าร้านทั้งหมดจาก source of truth ของคุณอยู่แล้ว การแทนที่ทั้งชุดจึงเหมาะสมที่สุด

ฟิลด์ข้อความสามช่องและขีดจำกัดของแต่ละช่อง: title สูงสุด 30 ตัวอักษร, shortDescription สูงสุด 80 ตัวอักษร, fullDescription สูงสุด 4000 ตัวอักษร หน้าร้านหนึ่งชุดต่อหนึ่งภาษา กำหนดด้วยรหัสภาษา BCP-47 ใน URL (en-US, de-DE, ja-JP เป็นต้น) การอัปเดตสิบภาษาหมายถึงการเรียก listings.update สิบครั้งภายใน edit เดียวกัน แล้ว commit ครั้งเดียวเผยแพร่ทั้งหมดพร้อมกัน

การอัปโหลดภาพหน้าจอและ feature graphic

รูปภาพจะแนบตามภาษาและ ประเภทรูปภาพ ประเภทของรูปภาพเป็น enum และช่องชิ้นงานแต่ละช่องในหน้าร้านจะแม็ปกับค่าใดค่าหนึ่งต่อไปนี้:

  • phoneScreenshots, sevenInchScreenshots, tenInchScreenshots — ชุดภาพหน้าจอของโทรศัพท์และแท็บเล็ต
  • tvScreenshots, wearScreenshots — Android TV และ Wear OS
  • featureGraphic — แบนเนอร์ขนาด 1024×500 ที่แสดงด้านบนของหน้าร้าน
  • icon, tvBanner — ไอคอนแอปและแบนเนอร์ทีวี

edits.images.upload เพิ่มรูปภาพหนึ่งรูปของภาษาและประเภทที่กำหนดเข้าไปใน edit ไม่มีคำสั่งแบบ "ตั้งค่าทั้งอาเรย์ในครั้งเดียว" ดังนั้นวิธีที่เชื่อถือได้สำหรับการแทนที่ภาพหน้าจอคือ edits.images.deleteall สำหรับภาษาและประเภทนั้นก่อน แล้วอัปโหลดชุดใหม่ตามลำดับที่ต้องการให้แสดง edits.images.list อ่านสิ่งที่มีอยู่ใน edit ปัจจุบัน และ edits.images.delete ลบรูปภาพทีละรูปด้วย id ถ้าต้องการแก้ไขแบบเจาะจง ทั้งหมดนี้ยังอยู่ภายใน edit จนกว่าคุณจะ commit

การ commit — และความหมายที่แท้จริงของคำว่า "ขึ้นจริง"

มีบางอย่างที่ควรทำความเข้าใจให้ชัด เพราะมักทำให้คนแปลกใจ:

  • ไม่ต้องมี build ใหม่ การ commit edit ที่แก้เฉพาะหน้าร้าน ไม่ต้องใช้ APK/AAB ใหม่ ข้อความและรูปภาพเป็น metadata คุณอัปเดตได้กี่ครั้งก็ได้กับ release ที่มีอยู่แล้ว (แอปแค่ต้องมี release ก่อนหน้าอย่างน้อยหนึ่งครั้ง)
  • Commit ตรวจสอบก่อน แล้วค่อยเผยแพร่ ถ้าภาพหน้าจอมีขนาดผิดหรือฟิลด์ยาวเกินไป การ commit จะล้มเหลวและหน้าร้านจริงจะไม่เปลี่ยนแปลงเลย — คุณแก้ไขแล้ว commit ใหม่
  • ไม่ใช่แบบทันที หลัง commit สำเร็จ การเปลี่ยนแปลงอาจใช้เวลาหลายชั่วโมงกว่าจะปรากฏ เหมือนกับการแก้ไขด้วยมือใน Play Console อย่าตีความว่าได้ 200 ตอน commit แปลว่าผู้ใช้เห็นแล้วทันที
  • Abandon ไม่มีต้นทุน ถ้าลอง dry run แล้วผลลัพธ์ผิดพลาด edits.abandon จะทิ้งฉบับร่างโดยไม่กระทบหน้าร้านจริงเลย มีประโยชน์สำหรับทดสอบ pipeline โดยไม่มีความเสี่ยง

เส้นทางแบบไม่ต้องเขียนโค้ด: ออกแบบ แปล เผยแพร่

API ข้างต้นเป็นเครื่องมือที่เหมาะถ้าคุณมีเวลาของทีมวิศวกรและมี source of truth ให้ซิงก์ด้วย สิ่งที่มันทำไม่ได้คือ สร้าง ชิ้นงานเอง คุณยังต้องออกแบบภาพหน้าจอ เขียนชื่อแอปและคำอธิบายทั้งสองแบบ และผลิตทั้งหมดนี้ในแต่ละภาษา — API ทำหน้าที่แค่ส่งสิ่งที่คุณส่งให้มันเท่านั้น

ส่วนนั้นคือสิ่งที่ Mokbi จัดการให้ คุณออกแบบภาพหน้าจอในเบราว์เซอร์ ร่างชื่อแอป คำอธิบายสั้นและคำอธิบายเต็มไปพร้อมกัน แล้วแปลหน้าร้านทั้งหมดเป็น 50 ภาษา ในรอบเดียว — ทำให้การเรียก listings.update สิบครั้งข้างต้นมีข้อความที่แปลแล้วจริง ๆ ให้ส่ง แทนที่จะเป็นข้อความตัวอย่าง

แล้วการเผยแพร่เองล่ะ? Mokbi ก็ทำให้เช่นกัน สำหรับ Google Play มันรันขั้นตอนนี้เป๊ะ ๆ อยู่เบื้องหลัง (edits.insertlistings.update → อัปโหลดรูปภาพ → commit) ดังนั้นหน้าร้านที่แปลแล้วและชิ้นงานของคุณจะขึ้นจริงโดยไม่ต้องเขียนโค้ดข้างต้นเลยแม้แต่บรรทัดเดียว สำหรับ App Store มันจะเตรียมเวอร์ชันไว้ใน App Store Connect ให้พร้อมกดส่งได้เลย เพราะ Apple กำหนดให้คุณต้องกด Submit เองและผ่านการรีวิว การออกแบบภาพหน้าจอและ feature graphic, การเขียนหน้าร้าน, การแปลเป็น 50 ภาษา, และการเผยแพร่ให้ขึ้นจริง คือขั้นตอนต่อเนื่องเดียวกันทั้งหมด

อ่านต่อ

เปิดเครื่องมือแก้ไข →