ตรวจสอบสิทธิ์ใน Unity โดยใช้บริการเกมของ Google Play

คุณใช้บริการเกมของ Google Play เพื่อลงชื่อเข้าใช้ให้ผู้เล่นเล่นเกม Android ที่สร้างบน Firebase และ Unity ได้ หากต้องการใช้บริการ Google Play Games ให้ลงชื่อเข้าใช้ด้วย Firebase ก่อนอื่นให้ลงชื่อเข้าใช้โปรแกรมเล่นด้วย Google Play Games แล้วขอรหัสการให้สิทธิ์ OAuth 2.0 จากนั้นส่งรหัสการตรวจสอบสิทธิ์ไปยัง PlayGamesAuthProvider เพื่อสร้างข้อมูลเข้าสู่ระบบ Firebase ซึ่งคุณจะใช้เพื่อตรวจสอบสิทธิ์ด้วย Firebase ได้

ก่อนเริ่มต้น

ตั้งค่าโปรเจ็กต์ Unity

  1. เพิ่มไฟล์การกำหนดค่า Firebase และ Firebase Unity SDK ลงในโปรเจ็กต์ Unity ตามที่อธิบายไว้ในเพิ่ม Firebase ลงในโปรเจ็กต์ Unity ทำตามวิธีการสำหรับ Android

    ตรวจสอบว่าได้นำเข้า FirebaseAuth.unitypackage แล้ว

  2. ใน Unity Editor ใต้การตั้งค่าบิลด์ > การตั้งค่าโปรแกรมเล่น > การตั้งค่าอื่นๆ ให้ตั้งชื่อแพ็กเกจ Android ของเกม

  3. จากนั้น ภายใต้การตั้งค่าบิลด์ > การตั้งค่าโปรแกรมเล่น > การตั้งค่าการเผยแพร่ ให้เลือกหรือสร้างคีย์สโตร์และคีย์ ซึ่งจะใช้ในการลงนามแพ็กเกจ Android ของคุณ คุณต้องรับรอง APK สำหรับการลงชื่อเข้าใช้ Play Games จึงจะทำงานได้ ข้อกำหนดนี้ใช้กับการเผยแพร่ไม่เพียงเท่านั้น แต่ยังใช้ระหว่างการพัฒนาเกมด้วย

สร้างโปรเจ็กต์ Firebase

  1. ในคอนโซล Firebase ให้ไปที่โปรเจ็กต์ Firebase ที่คุณลงทะเบียนโปรเจ็กต์ Unity

  2. ตั้งค่าลายนิ้วมือ SHA-1 ของเกมจากหน้าการตั้งค่าของคอนโซล Firebase โดยใช้คีย์ที่ตั้งค่าไว้ใน Unity

    คุณรับลายนิ้วมือ SHA-1 ของคีย์ได้ด้วยคำสั่ง keytool ดังนี้

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    หรือรับแฮช SHA ของใบรับรองที่ลงนามด้วยคำสั่ง Gradle signingReport ดังนี้

    gradlew signingReport

    APK ของคุณต้องรับรองด้วยคีย์นี้ รวมถึงระหว่างการพัฒนา

  3. เปิดใช้ Google Play Games เป็นผู้ให้บริการการลงชื่อเข้าใช้

    1. ในคอนโซล Firebase ให้เปิดส่วนการตรวจสอบสิทธิ์

    2. สร้างและรับรหัสไคลเอ็นต์เว็บเซิร์ฟเวอร์และรหัสลับไคลเอ็นต์ของโปรเจ็กต์:

      1. ในแท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ผู้ให้บริการการลงชื่อเข้าใช้ Google

      2. คัดลอกรหัสไคลเอ็นต์และข้อมูลลับของเว็บเซิร์ฟเวอร์จากผู้ให้บริการการลงชื่อเข้าใช้ Google

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

กำหนดค่าบริการเกมของ Play ด้วยข้อมูลแอป Firebase ของคุณ

  1. ใน Google Play Console ให้เปิดแอป Google Play หรือสร้างแอป

  2. ในส่วนขยาย ให้คลิกบริการเกมของ Play > การตั้งค่าและการจัดการ > การกำหนดค่า

  3. คลิกใช่ เกมของฉันใช้ Google APIs อยู่แล้ว เลือกโปรเจ็กต์ Firebase จากรายการ แล้วคลิกใช้

  4. ในหน้าการกำหนดค่าบริการเกมของ Play ให้คลิกเพิ่มข้อมูลเข้าสู่ระบบ

    1. เลือกประเภทเซิร์ฟเวอร์เกม
    2. เลือกรหัสไคลเอ็นต์ของเว็บของโปรเจ็กต์ในช่องไคลเอ็นต์ OAuth ตรวจสอบว่านี่เป็นรหัสไคลเอ็นต์ที่คุณระบุไว้เมื่อเปิดใช้การลงชื่อเข้าใช้ Play Games
    3. บันทึกการเปลี่ยนแปลง
  5. ขณะยังอยู่ในหน้าการกำหนดค่าบริการเกมของ Play ให้คลิกเพิ่มข้อมูลเข้าสู่ระบบอีกครั้ง

    1. เลือกประเภท Android
    2. ในช่องไคลเอ็นต์ OAuth ให้เลือกรหัสไคลเอ็นต์ Android ของโปรเจ็กต์ (หากไม่เห็นรหัสไคลเอ็นต์ Android ให้ตรวจสอบว่าได้ตั้งค่าลายนิ้วมือ SHA-1 ของเกมในคอนโซล Firebase)
    3. บันทึกการเปลี่ยนแปลง
  6. ในหน้าเหตุการณ์ รางวัลพิเศษ และลีดเดอร์บอร์ด ให้สร้างแหล่งข้อมูลของ Play Games ที่ต้องการใช้กับเกม (หากไม่ต้องการใช้ทันที คุณสามารถสร้างรายการตัวยึดตำแหน่งได้) จากนั้นบนหน้าเหตุการณ์ รางวัลพิเศษ หรือลีดเดอร์บอร์ด ให้คลิกรับแหล่งข้อมูล แล้วคัดลอกข้อมูลโค้ดทรัพยากร Android ในจุดที่คุณสะดวก คุณจะต้องมีข้อมูลโค้ดเพื่อตั้งค่าปลั๊กอินบริการ Google Play เกม

    ข้อมูลโค้ดทรัพยากรมีลักษณะเหมือนตัวอย่างต่อไปนี้

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. ในหน้าผู้ทดสอบ ให้เพิ่มอีเมลของผู้ใช้ที่ต้องลงชื่อเข้าใช้เกมได้ก่อนที่จะเผยแพร่ใน Play Store

ผสานรวมการลงชื่อเข้าใช้ Play Games เข้ากับเกมของคุณ

  1. ดาวน์โหลดปลั๊กอิน Play Games สำหรับ Unity เวอร์ชันล่าสุดและแตกไฟล์ออก

  2. นำเข้าแพ็กเกจ Unity ของปลั๊กอินไปยังโปรเจ็กต์ Unity คุณจะดูแพ็กเกจ Unity ได้ในไดเรกทอรี current-build ของที่เก็บถาวรสำหรับรุ่น

  3. ตั้งค่าปลั๊กอิน Play Games ดังนี้

    1. คลิกหน้าต่าง > Google Play Games > การตั้งค่า > การตั้งค่า Android เพื่อเปิดหน้าจอการกำหนดค่า Android
    2. วางข้อมูลโค้ดทรัพยากร Android ที่ได้รับจาก Play Console ลงในช่องคำจำกัดความของทรัพยากร
    3. วางรหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ที่คุณให้ไว้เมื่อเปิดใช้การลงชื่อเข้าใช้ Play Games ในคอนโซล Firebase ลงในช่องรหัสไคลเอ็นต์
    4. คลิกตั้งค่า
  4. ในเกม ให้กำหนดค่าไคลเอ็นต์ Play Games โดยเปิดใช้การตั้งค่า RequestServerAuthCode ดังนี้

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. จากนั้นเมื่อผู้เล่นเลือกที่จะลงชื่อเข้าใช้ด้วย Play Games ให้โทรหา Social.localUser.Authenticate()

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

ตรวจสอบสิทธิ์ด้วย Firebase

หลังจากที่เพิ่มการลงชื่อเข้าใช้ Play Games ลงในเกม คุณจะใช้รหัสการตรวจสอบสิทธิ์จากบริการ Play Games เพื่อตรวจสอบสิทธิ์กับ Firebase ได้

  1. หลังจากที่ผู้เล่นลงชื่อเข้าใช้ด้วย Play Games สำเร็จแล้ว ในเครื่องจัดการการลงชื่อเข้าใช้อย่างต่อเนื่อง ให้รับรหัสการตรวจสอบสิทธิ์สำหรับบัญชีของผู้เล่นดังนี้

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. จากนั้นแลกเปลี่ยนรหัสการตรวจสอบสิทธิ์จากบริการ Play Games เป็นข้อมูลรับรอง Firebase และใช้ข้อมูลเข้าสู่ระบบ Firebase ในการตรวจสอบสิทธิ์ผู้เล่น โดยทำดังนี้

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

ขั้นตอนถัดไป

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

ในเกม คุณจะรับ Firebase UID ของผู้ใช้ได้จากออบเจ็กต์ Firebase.Auth.FirebaseUser โดยทำดังนี้

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string playerName = user.DisplayName;

  // The user's Id, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server, if you
  // have one; use User.TokenAsync() instead.
  string uid = user.UserId;
}

คุณจะได้รับรหัสผู้ใช้ที่ไม่ซ้ำของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้รหัสดังกล่าวเพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้ในกฎการรักษาความปลอดภัยของ Firebase และ Cloud Storage

หากต้องการรับข้อมูลโปรแกรมเล่น Play Games ของผู้ใช้หรือเข้าถึงบริการ Play Games ให้ใช้ API จากปลั๊กอิน Play Games

หากต้องการนำผู้ใช้ออกจากระบบ โปรดโทรหา SignOut()

auth.SignOut();