ตรวจสอบสิทธิ์ใน 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 ภายใต้ Build Settings > Player Settings > Other Settings ให้ตั้งชื่อแพ็คเกจ Android ของเกมของคุณ

  3. จากนั้น ภายใต้ Build Settings > Player Settings > Publishing Settings ให้เลือกหรือสร้างที่เก็บคีย์และคีย์ ซึ่งจะใช้ในการลงชื่อแพ็คเกจ 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. สร้างและรับ ID ไคลเอนต์เว็บเซิร์ฟเวอร์ของโครงการของคุณและรหัสลับไคลเอ็นต์:

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

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

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

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

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

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

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

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

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

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

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

    <?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 สโตร์

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

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

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

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

    1. คลิก Window > Google Play Games > Setup > Android Setup เพื่อเปิดหน้าจอ การกำหนดค่า 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;
}

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

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

หากต้องการลงชื่อออกจากผู้ใช้ ให้โทร SignOut() :

auth.SignOut();