Imvu.Login().Then(
	userModel => userModel == null ? AssetLoader.Load(defaultAvatarUrl) : AssetLoader.Load(userModel)
).Then(
	gameObj => gameObj.SetActive(true)
).Catch(
	error => Debug.Log(error)
);

The login process is handled for you when you call Imvu.Login(). This returns a Promise<UserModel, string>. Promises here function very much like JavaScript promises, and they're documented in more detail at the end of this document. The promise can be accepted with a null UserModel, which means that the user declined to log in. This isn't really an error, so it's handled separately, but it means it's important that you null check the UserModel. In this example, the null case is handled by loading a default avatar. It could also be handled by asking the user to login again.

Either way, it calls AssetLoader.Load(), which loads an IMVU asset. In this case, an avatar. This returns aPromise<GameObject, string>. The avatar will already be setup to work with Mecanim, and have an Animator on it. But, it will be inactive, so the asset won't actually appear in the scene until you tell it to. Hence the call toSetActive(true).

If there are any actual errors at either step, it will fall through to the Catch() and log the error.