หน้านี้จะอธิบายวิธีแก้ปัญหาที่คุณอาจพบขณะพัฒนาเกม Android ด้วยบริการ Google Play Games
การบันทึก
หากต้องการแก้ปัญหาเกี่ยวกับเกม ให้เปิดการบันทึกแบบละเอียดในอุปกรณ์โดยใช้คำสั่ง adb shell
จากนั้นคุณดูข้อความบันทึกของบริการ Google Play Games ได้โดยใช้ Logcat
เปิดใช้งานการทำบันทึก
วิธีเปิดใช้การบันทึกในอุปกรณ์ทดสอบ
เชื่อมต่ออุปกรณ์กับเครื่องที่ติดตั้ง Android SDK
เปิดเทอร์มินัลแล้วเรียกใช้คําสั่งนี้
adb shell setprop log.tag.Games VERBOSE
เรียกใช้เกมในอุปกรณ์และจำลองปัญหาที่คุณพยายามแก้ไข
ดูบันทึก
adb logcat
ปิดใช้การบันทึก
หากต้องการปิดใช้การบันทึกแบบละเอียดสำหรับบริการ Play Games ในอุปกรณ์และกลับไปยังลักษณะการบันทึกเดิม ให้เรียกใช้คำสั่งต่อไปนี้
adb shell setprop log.tag.Games INFO
ไม่สามารถลงชื่อเข้าใช้
หากลงชื่อผู้เล่นเข้าสู่เกมไม่ได้ ก่อนอื่นให้ตรวจสอบว่าคุณได้ทําตามวิธีการสร้างรหัสไคลเอ็นต์ และกําหนดค่าบริการเกมแล้ว หากยังพบข้อผิดพลาดในการลงชื่อเข้าใช้ ให้ตรวจสอบรายการต่อไปนี้เพื่อให้แน่ใจว่าเกมได้รับการตั้งค่าอย่างถูกต้อง
ตรวจสอบแท็กข้อมูลเมตา
AndroidManifest.xml
ต้องมีแท็กข้อมูลเมตาของเกม วิธียืนยันว่าแท็กข้อมูลเมตาได้รับการตั้งค่าอย่างถูกต้อง
เปิด
AndroidManifest.xml
และตรวจสอบว่ามีแท็กmeta-data
ดังที่แสดงด้านล่าง<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
ค้นหาคำจำกัดความของทรัพยากร
@string/app_id
โดยปกติจะกำหนดไว้ในไฟล์ XML ที่อยู่ที่ไดเรกทอรีres/xml
เช่นres/xml/strings.xml
หรือres/xml/ids.xml
ตรวจสอบว่าค่าของทรัพยากร
@string/app_id
ตรงกับรหัสตัวเลขของแอปพลิเคชัน ค่าของทรัพยากรนี้ควรมีเฉพาะตัวเลขเท่านั้น เช่น<string name="app_id">123456789012</string>
ตรวจสอบชื่อแพ็กเกจ
ชื่อแพ็กเกจของเกมต้องตรงกับชื่อแพ็กเกจในรหัสลูกค้า วิธียืนยันชื่อแพ็กเกจ
เปิด
AndroidManifest.xml
และตรวจสอบว่าชื่อแพ็กเกจของเกมถูกต้อง ชื่อแพ็กเกจคือค่าของแอตทริบิวต์package
ในแท็กmanifest
ยืนยันชื่อแพ็กเกจที่คุณระบุเมื่อสร้างรหัสไคลเอ็นต์ หากต้องการยืนยันชื่อแพ็กเกจใน Google Play Console ให้ไปที่ Play Console แล้วคลิกรายการที่เกี่ยวข้องกับเกมของคุณ
ไปที่แท็บแอปที่ลิงก์และตรวจสอบรายการรหัสไคลเอ็นต์ ควรมีแอป Android ที่ลิงก์อยู่ในรายการนี้ซึ่งมีชื่อแพ็กเกจตรงกับชื่อแพ็กเกจใน
AndroidManifest.xml
หากไม่ตรงกัน ให้สร้างรหัสไคลเอ็นต์ใหม่ซึ่งมีชื่อแพ็กเกจที่ถูกต้อง แล้วลองลงชื่อเข้าใช้อีกครั้ง
ตรวจสอบลายนิ้วมือของใบรับรอง
ใบรับรองที่คุณใช้ลงนามในเกมควรตรงกับลายนิ้วมือใบรับรองที่เชื่อมโยงกับรหัสลูกค้า หากต้องการยืนยัน ให้ตรวจสอบลายนิ้วมือ SHA1 ของใบรับรองก่อน โดยทำดังนี้
ค้นหาไฟล์ใบรับรองและรับลายนิ้วมือ SHA1 ของใบรับรอง หากต้องการดูลายนิ้วมือ SHA1 ให้เรียกใช้คําสั่งนี้
keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
จดจําลําดับตัวเลขฐาน 16 ที่ทําเครื่องหมาย
SHA1:
ในเอาต์พุต นั่นคือลายนิ้วมือของใบรับรอง
ถัดไป ให้ตรวจสอบว่าเครื่องมือสร้างของคุณใช้ใบรับรองนี้อยู่
- สร้าง APK ของเกมจากเครื่องมือสร้างและลงนามด้วยใบรับรองที่ต้องการ คัดลอก APK ที่สร้างขึ้นไปยังไดเรกทอรีชั่วคราว
ในไดเรกทอรีชั่วคราว ให้เรียกใช้คำสั่งต่อไปนี้เพื่อแตกไฟล์ ZIP ของ APK
unzip YourGame.apk
สร้างคีย์ส่วนตัวโดยใช้ไฟล์ใบรับรอง RSA โดยทำดังนี้
keytool -printcert -file META-INF/CERT.RSA
หรือจะสร้างคีย์ส่วนตัวโดยใช้ไฟล์ใบรับรอง DSA ก็ได้ โดยทำดังนี้
keytool -printcert -file META-INF/CERT.DSA
สังเกตลำดับตัวเลขฐานสิบหกในบรรทัดที่ระบุว่า
SHA1:
ลำดับตัวเลขนี้ควรตรงกับลายนิ้วมือของใบรับรองจากขั้นตอนก่อนหน้า หากไม่ตรงกัน แสดงว่าเครื่องมือหรือระบบบิลด์ไม่ได้กําหนดค่าให้ลงนามแอปพลิเคชันด้วยใบรับรอง ในกรณีนี้ ให้อ่านเอกสารประกอบของสภาพแวดล้อมการสร้างเพื่อดูวิธีกำหนดค่าอย่างถูกต้อง แล้วลองลงชื่อเข้าใช้อีกครั้ง
ถัดไป ให้ตรวจสอบว่าลายนิ้วมือของใบรับรองตรงกับลายนิ้วมือที่กําหนดค่าไว้ในรหัสไคลเอ็นต์หรือไม่ หากต้องการทำสิ่งต่อไปนี้
- เปิด Play Console แล้วไปที่เกมของคุณ
- ในหน้ารายละเอียดเกม ให้เลื่อนไปที่ด้านล่างแล้วคลิกลิงก์ไปยังโปรเจ็กต์ Google Cloud Platform ที่ลิงก์
- เลือกโปรเจ็กต์
- ในแถบด้านข้างทางซ้าย ให้เลือกAPI และการรับรอง ตรวจสอบว่าสถานะ API บริการเกมของ Google Play เป็นเปิดในรายการ API ที่แสดง
- ในแถบด้านข้างทางซ้าย ให้เลือกแอปที่ลงทะเบียน
- ขยายส่วนรหัสไคลเอ็นต์ OAuth 2.0 และจดลายนิ้วมือใบรับรอง (SHA1)
หากลายนิ้วมือนี้ไม่ตรงกับลายนิ้วมือของใบรับรองจากขั้นตอนก่อนหน้า คุณต้องสร้างรหัสไคลเอ็นต์ใหม่ที่มีลายนิ้วมือของใบรับรองที่ถูกต้อง คุณต้องสร้างรหัสไคลเอ็นต์ใหม่ใน Play Console ไม่ใช่ในโปรเจ็กต์ Google Cloud Platform
ตรวจสอบว่าเปิดใช้บัญชีทดสอบแล้ว
ก่อนที่จะเผยแพร่เกม บัญชีที่สร้างเกมใน Play Console จะต้องเปิดใช้เป็นผู้ทดสอบด้วย วิธีตรวจสอบว่ามีการกําหนดค่าอย่างถูกต้อง
- เปิด Play Console แล้วไปที่เกมของคุณ
- เปิดแท็บการทดสอบ
- ตรวจสอบว่าบัญชีที่คุณพยายามลงชื่อเข้าใช้อยู่ในรายชื่อผู้ทดสอบ
หากบัญชีที่คุณพยายามลงชื่อเข้าใช้ไม่อยู่ในรายการ ให้เพิ่มบัญชีนั้นลงในรายการ รอ 2-3 นาที แล้วลองลงชื่อเข้าใช้อีกครั้ง
ปัญหาเกี่ยวกับ Proguard
หากคุณใช้ Proguard และเห็นข้อผิดพลาดใน APK ที่มีการสร้างความสับสน ให้ตรวจสอบระดับ API เป้าหมายใน AndroidManifest.xml
ตรวจสอบว่าได้ตั้งค่าเป็น 17 ขึ้นไป
สาเหตุอื่นๆ ของปัญหาการตั้งค่า
ตรวจสอบสาเหตุที่พบบ่อยอื่นๆ ของข้อผิดพลาด
- หากเผยแพร่เกมแล้ว ให้ตรวจสอบว่าได้เผยแพร่การตั้งค่าเกมด้วย (คุณเผยแพร่แอปพลิเคชันโดยไม่เผยแพร่การตั้งค่าเกมได้) โดยไปที่ Google Play Console แล้วไปที่แอปของคุณ จากนั้นตรวจสอบว่าช่องข้างชื่อเกมระบุว่าเผยแพร่แล้ว หากระบุว่าเกมอยู่ในสถานะอื่น เช่น "พร้อมเผยแพร่" หรือ "พร้อมทดสอบ" ให้คลิกช่องแล้วเลือกเผยแพร่เกม
- หากเผยแพร่เกมไม่ได้ ให้ตรวจสอบว่ารหัสไคลเอ็นต์อย่างน้อย 1 รายการเปิดใช้ตัวเลือกแนะนำให้ใช้แอปนี้สำหรับการติดตั้งใหม่
ผู้ฟังที่ไม่ระบุตัวตน
อย่าใช้ Listeners ที่ไม่ระบุตัวบุคคล ตัวแฟังที่ไม่ระบุตัวตนคือการใช้งานอินเทอร์เฟซตัวฟังที่กําหนดไว้แบบอินไลน์ดังที่แสดงด้านล่าง
ImageManager im = ...;
// Anonymous listener -- dangerous:
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}
ตัวแฟังที่ไม่ระบุตัวตนไม่น่าเชื่อถือเนื่องจาก Play Games SDK เก็บรักษาตัวแฟังเหล่านี้เป็นข้อมูลอ้างอิงแบบอ่อน ซึ่งหมายความว่าระบบเก็บขยะอาจเรียกใช้ตัวแฟังเหล่านี้ก่อนที่จะมีการเรียกใช้ แต่คุณควรใช้ตัวรับฟังโดยใช้ออบเจ็กต์ถาวร เช่น Activity
public class MyActivity extends Activity
implements ImageManager.OnImageLoadedListener {
private void loadOurImages() {
ImageManager im = ...;
im.loadImage(this);
}
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}