ตรวจสอบสิทธิ์ใน 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 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 ของใบรับรองการเซ็นชื่อด้วยคำสั่ง signingReport :

    gradlew signingReport

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

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

    1. ค้นหารหัสไคลเอ็นต์เว็บเซิร์ฟเวอร์ของโปรเจ็กต์และข้อมูลลับไคลเอ็นต์ รหัสไคลเอ็นต์ของเว็บเซิร์ฟเวอร์ระบุโปรเจ็กต์ Firebase ของคุณไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของ Google Play

      หากต้องการค้นหาค่าเหล่านี้:

      1. เปิดโปรเจ็กต์ Firebase ในหน้าข้อมูลรับรอง คอนโซล Google APIs
      2. ในส่วน รหัสไคลเอ็นต์ OAuth 2.0 ให้เปิดหน้ารายละเอียด เว็บไคลเอ็นต์ (สร้างอัตโนมัติโดยบริการของ Google) หน้านี้แสดงรายการ ID และข้อมูลลับของไคลเอ็นต์เว็บเซิร์ฟเวอร์ของคุณ
    2. จากนั้น ใน คอนโซล Firebase ให้เปิดส่วนการ ตรวจสอบสิทธิ์

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

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

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

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

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

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

    1. เลือกประเภท Android
    2. ในช่อง ไคลเอ็นต์ OAuth ให้เลือกรหัสไคลเอ็นต์ Android ของโปรเจ็กต์ (หากคุณไม่เห็น ID ไคลเอ็นต์ 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. คลิก 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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

ขั้นตอนถัดไป

หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก บัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับรหัส Play Games ของพวกเขา บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ของคุณ

ในเกมของคุณ คุณสามารถรับ Firebase UID ของผู้ใช้จากอ็อบเจ็กต์ Firebase.Auth.FirebaseUser :

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  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 Security Rules คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้

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

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

auth.SignOut();