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

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

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

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

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

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

  2. ในเครื่องมือแก้ไข Unity ใต้การตั้งค่าบิลด์ > การตั้งค่าโปรแกรมเล่น > อื่นๆ การตั้งค่า ตั้งชื่อแพ็กเกจ 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 ของใบรับรองที่ลงนามด้วย คำสั่ง signingReport ของ Gradle:

    gradlew signingReport

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

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

    1. ในคอนโซล Firebase ให้เปิด ส่วน Authentication

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

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

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

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

กำหนดค่า Play Games services ด้วยข้อมูลแอป Firebase ของคุณ

  1. ใน คอนโซล Google Play, เปิดแอป Google Play หรือสร้างแอป

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

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

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

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

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

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

    <?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 สำเร็จแล้ว Continuation Handler รับรหัสการให้สิทธิ์สำหรับบัญชีของผู้เล่น

    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;
}

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

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

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

auth.SignOut();