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

  3. จากนั้น ภายใต้ การตั้งค่า Build > การตั้งค่าผู้เล่น > การตั้งค่าการเผยแพร่ ให้เลือกหรือสร้างที่เก็บคีย์และคีย์ ซึ่งจะใช้ในการลงนามแพ็คเกจ 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 > การตั้งค่าและการจัดการ > การกำหนดค่า

  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 Store

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

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

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

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

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

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

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

auth.SignOut();