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

คุณใช้บริการ Google Play Games เพื่อลงชื่อเข้าใช้ผู้เล่นในเกม 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 ในส่วนการตั้งค่าบิลด์ > การตั้งค่า Player > การตั้งค่าอื่นๆ ให้ตั้งชื่อแพ็กเกจ 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 และระบุรหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์และรหัสลับไคลเอ็นต์ของโปรเจ็กต์ ซึ่งคุณได้รับในขั้นตอนสุดท้าย

กําหนดค่า 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 เพื่อตรวจสอบสิทธิ์กับ 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;
}

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

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

หากต้องการออกจากระบบของผู้ใช้ ให้เรียกใช้ SignOut() ดังนี้

auth.SignOut();