ต่อสู้กับการประพฤติมิชอบและการละเมิด

เมื่อแอปได้รับความนิยมมากขึ้น ก็อาจดึงดูดความสนใจที่ไม่พึงประสงค์จากผู้ใช้ที่เป็นอันตรายซึ่งอาจต้องการละเมิดแอปของคุณ หัวข้อนี้จะอธิบายคําแนะนําที่คุณควรใช้เพื่อช่วยป้องกันไม่ให้มีการโจมตีการผสานรวมการเรียกเก็บเงินเหล่านี้ และลดผลกระทบของการละเมิดในแอป

ย้ายตรรกะที่มีความละเอียดอ่อนไปยังแบ็กเอนด์

ย้ายข้อมูลที่มีความละเอียดอ่อนและตรรกะไปยังเซิร์ฟเวอร์แบ็กเอนด์ที่คุณควบคุมมากที่สุดเท่าที่การออกแบบแอปอนุญาต ยิ่งมีข้อมูลและตรรกะในอุปกรณ์ฝั่งหน้ามากเท่าใด อุปกรณ์ก็ยิ่งมีความเสี่ยงที่จะเกิดการแก้ไขหรือแทรกแซงมากเท่านั้น

ตัวอย่างเช่น เกมหมากรุกออนไลน์ควรตรวจสอบการเคลื่อนไหวทั้งหมดในแบ็กเอนด์แทนที่จะไว้วางใจว่าฟีดด้านหน้าจะส่งการเคลื่อนไหวที่ถูกต้องเสมอ

นอกจากนี้ หากคุณพบช่องโหว่หรือปัญหาด้านความปลอดภัย การแก้ไขข้อบกพร่อง แก้ไข และเปิดตัวการอัปเดตในแบ็กเอนด์อาจง่ายกว่าการแก้ไขข้อบกพร่อง แก้ไข และเปิดตัวการอัปเดตในฟีดส่วนหน้า ทั้งนี้ขึ้นอยู่กับการออกแบบระบบ

ยืนยันการซื้อก่อนให้สิทธิ์

กรณีพิเศษของข้อมูลที่ละเอียดอ่อนและตรรกะที่ควรจัดการในแบ็กเอนด์คือการยืนยันการซื้อและการรับทราบ หลังจากผู้ใช้ทำการซื้อแล้ว คุณควรทำดังนี้

  1. ส่ง purchaseToken ที่เกี่ยวข้องไปยังแบ็กเอนด์ ซึ่งหมายความว่าคุณควรเก็บบันทึกค่า purchaseToken ทั้งหมดสําหรับการซื้อทั้งหมด
  2. ตรวจสอบว่าค่า purchaseToken สำหรับการซื้อปัจจุบันไม่ตรงกับค่า purchaseToken ก่อนหน้า purchaseToken มีค่าไม่ซ้ำกันทั่วโลก คุณจึงใช้ค่านี้เป็นคีย์หลักในฐานข้อมูลได้อย่างปลอดภัย
  3. ใช้ปลายทาง Purchases.products:get หรือ Purchases.subscriptionsv2:get ใน Google Play Developer API เพื่อยืนยันกับ Google ว่าการซื้อนั้นถูกต้อง
  4. หากการซื้อนั้นถูกต้องและไม่เคยมีการใช้มาก่อน คุณจะมอบสิทธิ์ให้ใช้ไอเทมที่ซื้อในแอปหรือการสมัครใช้บริการได้อย่างปลอดภัย
  5. สำหรับการสมัครใช้บริการ เมื่อตั้งค่า linkedPurchaseToken ใน Purchases.subscriptionsv2:get คุณควรนำ linkedPurchaseToken ออกจากฐานข้อมูลและเพิกถอนการให้สิทธิ์ที่มอบให้กับ linkedPurchaseToken ด้วย เพื่อให้มั่นใจว่าผู้ใช้หลายคนจะไม่มีสิทธิ์ซื้อรายการเดียวกัน
  6. คุณควรให้สิทธิ์ก็ต่อเมื่อสถานะการซื้อเป็น PURCHASED และตรวจสอบว่าได้จัดการการซื้อ PENDING อย่างถูกต้อง หากมีการซื้อ CANCELED เพิ่มขึ้นอย่างรวดเร็ว คุณอาจกำลังให้สิทธิ์เมื่อการซื้อยังอยู่ในสถานะ PENDING ดูข้อมูลเพิ่มเติมได้ที่การจัดการธุรกรรมที่รอดำเนินการ
  7. หลังจากให้สิทธิ์แล้ว หากต้องการใช้และรับทราบผลิตภัณฑ์ที่บริโภคได้ ให้ใช้ Purchases.products:consume Play Developer API ในเซิร์ฟเวอร์แบ็กเอนด์ที่ปลอดภัย หากต้องการรับทราบผลิตภัณฑ์ที่บริโภคไม่ได้หรือการสมัครใช้บริการ ให้เรียกใช้ปลายทาง Play Developer API ที่เกี่ยวข้อง ซึ่งได้แก่ Purchases.products:acknowledge หรือ Purchases.subscriptions:acknowledge ในเซิร์ฟเวอร์แบ็กเอนด์ที่ปลอดภัย คุณต้องรับทราบเนื่องจากเป็นการแจ้งให้ Google Play ทราบว่าผู้ใช้ได้รับสิทธิ์ซื้อแล้ว คุณควรรับทราบการซื้อทันทีหลังจากให้สิทธิ์

    โปรดทราบว่าแม้ว่าคุณจะยอมรับหรือใช้การซื้อฝั่งไคลเอ็นต์ผ่านแอปได้ แต่ API ฝั่งเซิร์ฟเวอร์จะให้การป้องกันเพิ่มเติมสำหรับปัญหาต่างๆ เช่น การเชื่อมต่อเครือข่ายที่ไม่ดีและกิจกรรมที่เป็นอันตราย ตัวอย่างเช่น พิจารณาว่าผู้ใช้ซื้อไอเทมจากแอปของคุณ แต่การเชื่อมต่อเครือข่ายขาดหายไปขณะที่ระบบกำลังตรวจสอบการซื้อหรือไม่ หากไม่มีการรับทราบจากเซิร์ฟเวอร์ ผู้ใช้อาจต้องเข้าสู่ระบบอีกครั้งผ่านแอปเพื่อดำเนินการรับทราบให้เสร็จสมบูรณ์ หรือหากผู้ใช้ไม่เข้าสู่ระบบอีกครั้งภายใน 3 วัน ระบบจะคืนเงินการซื้อโดยอัตโนมัติเนื่องจากไม่มีการรับทราบการซื้อ การรับทราบจากเซิร์ฟเวอร์จะช่วยป้องกันสถานการณ์นี้ได้โดยส่งการตอบกลับทันทีที่ Google Play แจ้งให้เซิร์ฟเวอร์ทราบว่าการซื้อนั้นถูกต้อง

    ดูข้อมูลเพิ่มเติมเกี่ยวกับการตอบรับการซื้อและการบริโภคได้ที่การประมวลผลการซื้อ

การปกป้องเนื้อหาที่ปลดล็อก

อย่ารวมเนื้อหาที่ปลดล็อกไว้ในไฟล์ APK เพื่อป้องกันไม่ให้ผู้ใช้ที่เป็นอันตรายเผยแพร่เนื้อหาดังกล่าวอีกครั้ง แต่ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้แทน

  • ใช้บริการแบบเรียลไทม์เพื่อส่งเนื้อหา เช่น ฟีดเนื้อหา การส่งเนื้อหาผ่านบริการแบบเรียลไทม์ยังช่วยให้เนื้อหาของคุณมีความทันสมัยอยู่เสมอ
  • ใช้เซิร์ฟเวอร์ระยะไกลเพื่อนำส่งเนื้อหา

เมื่อส่งเนื้อหาจากเซิร์ฟเวอร์ระยะไกลหรือบริการแบบเรียลไทม์ คุณสามารถจัดเก็บเนื้อหาที่ปลดล็อกไว้ในหน่วยความจำของอุปกรณ์หรือจัดเก็บไว้ในการ์ด SD ของอุปกรณ์ หากคุณจัดเก็บเนื้อหาไว้ในการ์ด SD โปรดเข้ารหัสเนื้อหาและใช้คีย์การเข้ารหัสเฉพาะอุปกรณ์

ตรวจหาและจัดการการซื้อที่เป็นโมฆะ

การซื้อที่ยกเลิกคือการซื้อที่ยกเลิก เพิกถอน หรือมีการดึงเงินคืน หากการซื้อที่ถูกยกเลิกได้มอบไอเทมที่ซื้อในแอปหรือเนื้อหาอื่นๆ ให้แก่ผู้ใช้ก่อนหน้านี้ คุณสามารถใช้ Voided Purchases API เพื่อดูสาเหตุที่การซื้อถูกยกเลิก รวมถึงเนื้อหาที่เกี่ยวข้องซึ่งคุณเรียกคืนได้

การซื้อไอเทมในแอปและการสมัครใช้บริการอาจถูกยกเลิกได้เนื่องด้วยสาเหตุหลายประการ ซึ่งรวมถึงสาเหตุต่อไปนี้

  • การซื้อถูกยกเลิกโดยผู้ใช้ นักพัฒนาแอป หรือ Google (รวมถึงการซื้อที่ยังไม่ได้ตอบรับซึ่งถูกยกเลิกโดยอัตโนมัติ) สำหรับการสมัครใช้บริการ โปรดทราบว่าการยกเลิกหมายถึงการยกเลิกการซื้อการสมัครใช้บริการ ไม่ใช่การยกเลิกการสมัครใช้บริการ
  • มีการดึงเงินคืนสำหรับการซื้อ
  • นักพัฒนาแอปยกเลิกหรือคืนเงินคำสั่งซื้อของผู้ใช้และเลือกตัวเลือก "เพิกถอน" ในคอนโซล

คุณตัดสินใจเลือกแนวทางดำเนินการได้โดยพิจารณาจากเหตุผลที่การซื้อถูกยกเลิกและข้อมูลพฤติกรรมของผู้ใช้ก่อนหน้านี้ เราขอแนะนําให้ใช้วิธีต่อไปนี้อย่างน้อย 1 วิธี

  • ดึงเงินคืน: เมื่อการซื้อถูกยกเลิก คุณจะดึงเงินคืนสำหรับรายการที่ไม่ได้ใช้ได้ราวกับว่าไม่เคยซื้อ เช่น หากการซื้อสกุลเงินในเกมถูกยกเลิก คุณสามารถเรียกคืนสกุลเงินที่มอบให้ผู้ใช้แล้ว ในกรณีที่ผู้ใช้ใช้จ่ายสกุลเงินไปแล้ว ให้พิจารณาตั้งค่ายอดคงเหลือของสกุลเงินเป็นลบและจำกัดกิจกรรมในแอปและการซื้อในอนาคตจนกว่ายอดคงเหลือของสกุลเงินจะเป็นบวก
  • การใช้ประกาศเตือนหลายครั้ง: พิจารณาใช้มาตรการที่รุนแรงน้อยลงกับผู้กระทำผิดครั้งแรก เช่น การแสดงคำเตือนในแอป สำหรับผู้กระทำผิดซ้ำ เราอาจพิจารณาใช้มาตรการที่รุนแรงขึ้น
  • ปิดใช้การซื้อชั่วคราว: เช่นเดียวกับการใช้ประกาศเตือนหลายครั้ง ให้พิจารณาปิดใช้การซื้อสำหรับผู้ใช้ที่มีการซื้อที่ถูกยกเลิกจนกว่าคุณจะตรวจสอบสาเหตุที่การซื้อถูกยกเลิกได้อย่างละเอียด
  • ไม่อนุญาตให้เข้าถึงแอปของคุณชั่วคราวหรือถาวร: สำหรับกรณีที่ร้ายแรงซึ่งมีกิจกรรมที่เป็นอันตรายซ้ำๆ ให้พิจารณาไม่อนุญาตให้เข้าถึงแอปของคุณชั่วคราวหรือถาวร
  • เรียกใช้ Voided Purchases API บ่อยๆ: เมื่อตรวจพบการซื้อที่ถูกยกเลิกอย่างน้อย 1 รายการ ให้พิจารณาเรียกใช้ Voided Purchases API บ่อยขึ้นเพื่อเพิกถอนการซื้อก่อนที่ผู้ใช้จะใช้ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโควต้าของ Voided Purchases API ได้ในเอกสารประกอบของ Voided Purchases API

ช่วยให้ Google ตรวจจับการประพฤติมิชอบได้ก่อนที่จะเกิดขึ้น

การประพฤติมิชอบบางประเภทเกี่ยวข้องกับผู้ใช้ที่เป็นอันตรายซึ่งสร้างบัญชี Google และบัญชีในแอปหลายบัญชีเพื่อซ่อนกิจกรรมของตน

ใช้เมธอด setObfuscatedAccountId และ setObfuscatedProfileId ในเครื่องมือสร้างสำหรับ BillingFlowParams เพื่อช่วยให้ Google แมปบัญชี Google กับบัญชีในแอป

Google ใช้ข้อมูลนี้เพื่อตรวจหาพฤติกรรมที่น่าสงสัยและบล็อกธุรกรรมที่เป็นการฉ้อโกงบางประเภทก่อนที่ธุรกรรมจะเสร็จสมบูรณ์

การดำเนินการกับการละเมิดเครื่องหมายการค้าและลิขสิทธิ์

หากคุณใช้เซิร์ฟเวอร์ระยะไกลเพื่อส่งหรือจัดการเนื้อหา ให้แอปยืนยันสถานะการซื้อของเนื้อหาที่ปลดล็อกทุกครั้งที่ผู้ใช้เข้าถึงเนื้อหา ซึ่งจะช่วยให้คุณเพิกถอนการใช้ได้เมื่อจำเป็นและลดการละเมิดลิขสิทธิ์ หากคุณพบว่ามีการนำเนื้อหาของคุณไปเผยแพร่อีกครั้งใน Google Play โปรดดำเนินการอย่างรวดเร็วและเด็ดขาด ดูรายละเอียดเพิ่มเติมได้ที่หน้าคำถามที่พบบ่อยเกี่ยวกับลิขสิทธิ์ในศูนย์ช่วยเหลือด้านลิขสิทธิ์