Melakukan Autentikasi Menggunakan Yahoo dan Unity

Anda dapat mengizinkan pengguna melakukan autentikasi dengan Firebase menggunakan penyedia OAuth, seperti Yahoo dengan mengintegrasikan Login OAuth umum berbasis web ke aplikasi Anda menggunakan Firebase SDK untuk menjalankan alur login secara menyeluruh. Alur ini memerlukan penggunaan Firebase SDK berbasis ponsel, sehingga hanya didukung di platform Android dan Apple.

Sebelum memulai

Sebelum dapat menggunakan Firebase Authentication, Anda perlu:

  • Mendaftarkan project Unity Anda dan mengonfigurasikannya agar dapat menggunakan Firebase.

    • Jika project Unity Anda telah menggunakan Firebase, berarti project tersebut telah terdaftar dan dikonfigurasi untuk Firebase.

    • Jika belum memiliki project Unity, Anda dapat mendownload aplikasi contoh.

  • Tambahkan Firebase Unity SDK (khususnya, FirebaseAuth.unitypackage) ke project Unity Anda.

Perlu diperhatikan bahwa penambahan Firebase ke project Unity Anda memerlukan tindakan baik di Firebase console maupun di project Unity yang terbuka (misalnya, Anda mendownload file konfigurasi Firebase dari konsol, lalu memindahkannya ke project Unity).

Mengakses class Firebase.Auth.FirebaseAuth

Class FirebaseAuth adalah gateway untuk semua panggilan API. Class ini dapat diakses melalui FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Menangani alur login dengan Firebase SDK

Untuk menangani alur login dengan Firebase SDK, ikuti langkah-langkah berikut:

  1. Buat instance FederatedOAuthProviderData yang dikonfigurasi dengan ID penyedia yang sesuai untuk Yahoo.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
    
  2. Opsional: Tentukan parameter OAuth kustom tambahan yang ingin dikirim dengan permintaan OAuth.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Yahoo.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    

    Untuk parameter yang didukung Yahoo, lihat dokumentasi OAuth Yahoo. Perlu diperhatikan bahwa Anda tidak dapat meneruskan parameter yang diperlukan Firebase dengan custom_parameters(). Parameter tersebut adalah client_id, redirect_uri, response_type, scope, dan state.

  3. Opsional: Tentukan cakupan OAuth 2.0 tambahan selain profile dan email yang ingin diminta dari penyedia autentikasi. Jika aplikasi Anda memerlukan akses ke data pengguna pribadi dari Yahoo API, Anda harus meminta izin ke Yahoo API di bagian API Permissions di konsol developer Yahoo. Cakupan OAuth yang diminta harus sama persis dengan yang sudah dikonfigurasi sebelumnya dalam izin API aplikasi. Misalnya jika permintaan akses baca/tulis diajukan ke kontak pengguna dan telah dikonfigurasi sebelumnya dalam izin API aplikasi, sdct-w harus diteruskan sebagai ganti dari cakupan OAuth hanya baca sdct-r. Jika tidak, alur akan gagal dan error akan ditampilkan kepada pengguna akhir.

    providerData.Scopes = new List<string>();
    
    // Request access to Yahoo Mail API.
    providerData.Scopes.Add("mail-r");
    // This must be preconfigured in the app's API permissions.
    providerData.Scopes.Add("sdct-w");
    

    Untuk mempelajari lebih lanjut, baca dokumentasi cakupan Yahoo.

  4. Setelah data penyedia Anda dikonfigurasi, gunakan data tersebut untuk membuat FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
        new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Lakukan autentikasi dengan Firebase menggunakan objek penyedia Auth. Perlu diperhatikan bahwa tidak seperti operasi FirebaseAuth lainnya, tindakan ini akan mengendalikan UI Anda dengan memunculkan tampilan web, tempat pengguna dapat memasukkan kredensial mereka.

    Untuk memulai alur login, panggil SignInAndRetrieveDataWithCredentialAsync:

<<../_includes/_sign_in_with_provider_unity.md>>>

  1. Meskipun contoh di atas berfokus pada alur login, Anda juga dapat menautkan penyedia Yahoo ke pengguna yang ada menggunakan LinkWithProviderAsync. Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama agar bisa login dengan salah satu penyedia tersebut.

    user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("LinkWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("LinkWithProviderAsync encountered an error: "
              + task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  2. Pola yang sama dapat digunakan dengan ReauthenticateWithProviderAsync, yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.

  • Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari objek Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // 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;
    }
    
  • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik milik pengguna yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.

Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Untuk memproses logout pengguna, panggil SignOut():

auth.SignOut();