Primeros pasos con Firebase Authentication en C++

Puedes usar Firebase Authentication para permitir que los usuarios accedan a tu app con uno o más métodos de acceso, que incluyen el acceso con dirección de correo electrónico y contraseña, y proveedores de identidad federada, como Acceso con Google y Acceso con Facebook. En este instructivo, se muestra cómo agregar un acceso con dirección de correo electrónico y contraseña a la app para comenzar a usar Firebase Authentication.

Conectar un proyecto de C++ con Firebase

Para poder usar Firebase Authentication, debes realizar los siguientes pasos:

  • Registra tu proyecto de C++ y configúralo para usar Firebase.

    Si tu proyecto de C++ ya usa Firebase, significa que ya está registrado y configurado para esa plataforma.

  • Agrega el SDK de Firebase C++ a tu proyecto de C++.

Ten en cuenta que agregar Firebase a un proyecto de C++ implica realizar tareas en Firebase console y en el proyecto abierto de C++ (por ejemplo, descargar archivos de configuración de Firebase desde la consola y transferirlos al proyecto de C++).

Registrar usuarios nuevos

Crea un formulario que permita a los usuarios nuevos registrarse en tu app con su dirección de correo electrónico y una contraseña. Cuando un usuario complete el formulario, valida la dirección de correo electrónico y la contraseña que proporcionó el usuario para después pasarlos al método CreateUserWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

Para verificar el estado de la operación de creación de cuenta, puedes registrar una devolución de llamada en el objeto Future CreateUserWithEmailAndPasswordLastResult. Si estás escribiendo un juego o una app con algún tipo de bucle de actualización periódica, también puedes incluir un sondeo del estado en el bucle de actualización.

Por ejemplo, si usas un Future:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

Como alternativa, para usar el sondeo, haz algo como el siguiente ejemplo en el bucle de actualización del juego:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

Permitir el acceso de usuarios existentes

Crea un formulario que permita a los usuarios existentes acceder con su dirección de correo electrónico y una contraseña. Cuando un usuario complete el formulario, llama al método SignInWithEmailAndPassword:

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

Obtén el resultado de la operación de acceso de la misma forma que obtuviste el resultado del registro.

Configurar un objeto de escucha del estado de autenticación y obtén datos de la cuenta

Para responder a eventos de acceso y cierre de sesión, adjunta un objeto de escucha al objeto de autenticación global. Se llamará a este objeto de escucha cada vez que cambie el estado de acceso del usuario. Dado que el objeto de escucha no se ejecuta hasta que termina de inicializarse el objeto de autenticación y se completan todas las llamadas a la red, es el mejor lugar para obtener información acerca del usuario que accedió.

Para crear el objeto de escucha, implementa la clase abstracta firebase::auth::AuthStateListener. Por ejemplo, para crear un objeto de escucha que obtiene información sobre un usuario cuando este accede correctamente, haz lo siguiente:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

Adjunta el objeto de escucha con el método AddAuthStateListener del objeto firebase::auth::Auth:

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Próximos pasos

Obtén información para admitir otros proveedores de identidad y cuentas de invitado anónimas en los siguientes vínculos: