-
Notifications
You must be signed in to change notification settings - Fork 2
Authentication
Let's talk about general player authentication practices with the Ultimate Mobile plugin.
Your game should authenticate the player as early as possible after launching, ideally as soon as you can present a user interface to the player. The code sample below show's how to authenticate the user:
using SA.CrossPlatform.GameServices;
...
var client = UM_GameService.SignInClient;
client.SignIn(result => {
if (result.IsSucceeded) {
Debug.Log("Player is signed");
} else {
Debug.LogError($"Failed to sign in: {result.Error.FullMessage}");
}
});The player info is available right after successful authentication. How ever, sign-in isn't only one flow that can update player info or state, There is a number of events on different platforms. All those cases handled internally by a plugin.
That's why you need to subscribe to the OnPlayerUpdated event. Also, you should know that OnPlayerUpdated will be fired before the sign-in flow. Use OnPlayerUpdated event to update the player UI in your game. See the code sample below:
using SA.CrossPlatform.GameServices;
...
UM_GameService.SignInClient.OnPlayerUpdated.AddListener(PrintPlayerInfo);
private void PrintPlayerInfo() {
var playerInfo = UM_GameService.SignInClient.PlayerInfo;
Debug.Log($"playerInfo state: {playerInfo.State}");
if(playerInfo.State == UM_PlayerState.SignedIn) {
var player = playerInfo.Player;
Debug.Log($"player id: {player.Id}");
Debug.Log($"player alias: {player.Alias}");
Debug.Log($"player displayName: {player.DisplayName}");
}
}You can also grab the player avatar as Unity Texture2D object using the GetAvatar method. See the example below:
using SA.CrossPlatform.GameServices;
...
var client = UM_GameService.SignInClient;
if(client.PlayerInfo.State == UM_PlayerState.SignedIn) {
var player = client.PlayerInfo.Player;
player.GetAvatar((texure) => {
//We need to make sure here that player is still signed
//by the time we are getting image load callback
if(client.PlayerInfo.State == UM_PlayerState.SignedIn) {
if(texure == null) {
//You may want to assign some default texture here
}
//Assign image to RawImage object
m_userAvatar.texture = texure;
}
});
}The player authentication state can always be accessed via PlayerInfo.State see the example below:
using SA.CrossPlatform.GameServices;
...
var client = UM_GameService.SignInClient;
if(client.PlayerInfo.State == UM_PlayerState.SignedIn) {
Debug.Log("Player is currently signed");
}Some platforms (Android for example) have a requirement for the developer to provide a user with the ability to sign in and out from the application. You may use SignOut function for that purpose. See the example below:
using SA.CrossPlatform.GameServices;
...
UM_GameService.SignInClient.SignOut((result) => {
if (result.IsSucceeded) {
Debug.Log("Player is just out");
} else {
Debug.LogError($"Sign out failed: {result.Error.FullMessage}");
}
});Please note that SignOut call will also trigger OnPlayerUpdated event.
Reliable and high-quality Unity Development service. Let's Talk!
Website | AssetStore | LinkedIn | Youtube | Scripting Reference
- Application
- Dark Mode
- Native Dialogs
- Native Preloader
- Date Picker Dialog
- Time Picker Dialog
- Rate Us Dialog
- Build Info
- Locale
- Permissions
- Wheel Picker Dialog
- Getting Started
- Connecting to The Service
- Purchase flow
- Transactions Validation
- Test Inside the Editor
- Advanced use cases
- Getting Started
- Enabling the Ads Service
- Banner Ads
- Non-rewarded Ads
- Rewarded Ads
- Unity Ads
- Google AdMob
- Chartboost
- Getting Started
- Analytics API
- Automatic Tracking
- Unity Analytics
- Firebase Analytics
- Facebook Analytics