ตรวจสอบสิทธิ์ใน 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 Editor ให้ตั้งชื่อแพ็กเกจ Android ของเกมในส่วนการตั้งค่าบิลด์ > การตั้งค่าเพลเยอร์ > การตั้งค่าอื่นๆ

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

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

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

  2. ระบุลายนิ้วมือ SHA-1 ของเกม

    1. ในFirebase Console ให้ไปที่ การตั้งค่า > แท็บทั่วไป

    2. เลื่อนลงไปที่การ์ดแอปของคุณ เลือกแอป Android แล้ว เพิ่มลายนิ้วมือ SHA-1 ในช่องลายนิ้วมือของใบรับรอง SHA

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

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

    หรือคุณจะรับแฮช SHA ของใบรับรองการลงนามด้วยคำสั่ง gradle signingReport ก็ได้

    gradlew signingReport

    ดูรายละเอียดวิธีรับลายนิ้วมือ SHA ของแอปได้ที่การตรวจสอบสิทธิ์ไคลเอ็นต์

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

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

    1. ในคอนโซล Firebase ให้ไปที่ความปลอดภัย > การตรวจสอบสิทธิ์

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

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

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

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

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

  1. ในGoogle Play Console ให้เปิด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 เป็นข้อมูลเข้าสู่ระบบ 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 และสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ได้

ในเกม คุณสามารถรับ UID ของ Firebase ของผู้ใช้จากออบเจ็กต์ 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 Games มีให้

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

auth.SignOut();