Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 46 additions & 2 deletions docs/godot/identifying.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ You can merge players using `Talo.players.merge()` by providing the IDs of both
:::caution
There are a few limitations to merging players:

- **Player 2** cannot have a Talo Player Authentication alias or a Steam alias.
- If **Player 1** has a Talo Player Authentication or Steam alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.current_alias` must belong to Player 1). In this case, make sure your last `Talo.players.identify()` call before merging uses Player 1's alias.
- **Player 2** cannot have a Talo Player Authentication, Steam or Google Play Games alias.
- If **Player 1** has a Talo Player Authentication, Steam or Google Play Games alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.current_alias` must belong to Player 1). In this case, make sure your last `Talo.players.identify()` call before merging uses Player 1's alias.
- Both players cannot have overlapping alias services. For example, if both players have an alias with the service "username", the merging process will fail.
:::

Expand Down Expand Up @@ -164,6 +164,50 @@ You can build an avatar URL by replacing **[AVATAR_HASH]** with the `META_STEAMW

These props will be updated each time the player is identified using `Talo.players.identify_steam()`.

## Google Play Games integration

:::tip
You can enable this integration on the [integrations page](https://dashboard.trytalo.com/integrations).
:::

If you have the Google Play Games integration enabled, Talo can identify a player using an OAuth client. Follow Google's official documentation for setting up [Game Server credentials](https://developer.android.com/games/pgs/console/setup#generate_an_oauth_20_client_id).

All you need to do is pass a server auth code to the `Talo.players.identify_google_play_games` function. Here's an example using the [Godot Play Games Services plugin](https://github.com/godot-sdk-integrations/godot-play-game-services):

```gdscript
extends Node2D

@onready var play_games_sign_in_client: PlayGamesSignInClient = %PlayGamesSignInClient

func _enter_tree() -> void:
GodotPlayGameServices.initialize()

func _ready() -> void:
play_games_sign_in_client.user_authenticated.connect(
func (is_authenticated):
if is_authenticated:
play_games_sign_in_client.request_server_side_access("yourid.apps.googleusercontent.com", false)
)

play_games_sign_in_client.server_side_access_requested.connect(
func (auth_code):
Talo.players.identify_google_play_games(auth_code)
)

play_games_sign_in_client.is_authenticated()
```

Replace "yourid.apps.googleusercontent.com" with the client ID you generated earlier.

### Google Play Games player props

After successfully authenticating the player, these [props](/docs/godot/player-props) will automatically be created for them:

- `META_GOOGLE_PLAY_GAMES_DISPLAY_NAME` - The player's chosen display name
- `META_GOOGLE_PLAY_GAMES_AVATAR_URL` - A direct link to the player's avatar

These props will be updated each time the player is identified using `Talo.players.identify_google_play_games()`.

## Offline player cache

If the `cache_player_on_identify` setting is enabled (default `true`), Talo will store player data locally. If a player tries to identify while offline, Talo will try and use local data if it exists.
Expand Down
24 changes: 24 additions & 0 deletions docs/integrations/google-play-games.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
sidebar_position: 2
description: Use Talo's native Google Play Games integration to automatically identify players signed in to Google.
---

# Google Play Games

Using [Game Server credentials](https://developer.android.com/games/pgs/console/setup#generate_an_oauth_20_client_id), you can automatically identify players signed in to Google Play Games.

You can enable this integration on the [integrations page](https://dashboard.trytalo.com/integrations).

![The Talo integrations page showing the Google Play Games settings](/img/gpg-integration.png)

<hr/>

## Authentication

To get started, [create an OAuth client](https://developer.android.com/games/pgs/console/setup#generate_an_oauth_20_client_id) (ensure you create credentials for a **Game server**) and copy the details into the dashboard.

To identify a player, [request a server auth code](https://developer.android.com/games/pgs/android/server-access) and pass the code to Talo. Talo will automatically sync the player without them needing to create an account.

Talo will also add helpful `props` to your player such as their display name and avatar URL.

More info is available in the [Godot plugin docs](/docs/godot/identifying#google-play-games-integration) and [Unity package docs](/docs/unity/identifying#google-play-games-integration).
2 changes: 1 addition & 1 deletion docs/integrations/steamworks.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ By setting up the Talo Steamworks integration, you are able to authenticate and

You'll need to pass the ticket generated by the [GetAuthTicketForWebApi](https://partner.steamgames.com/doc/api/ISteamUser#GetAuthTicketForWebApi) API when identifying players. Using this, Talo will automatically verify the session and sync the player.

Talo will also add helpful `props` to your player such as app ownership details and ban statuses.
Talo will also add helpful `props` to your player such as app ownership details, profile names and avatars.

More info is available in the [Godot plugin docs](/docs/godot/identifying#steamworks-integration) and [Unity package docs](/docs/unity/identifying#steamworks-integration).

Expand Down
79 changes: 63 additions & 16 deletions docs/unity/identifying.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public void DoStuffIfIdentified()
{
try
{
Talo.IdentityCheck();
Talo.IdentityCheck();
}
catch (Exception ex)
{
Expand All @@ -100,24 +100,24 @@ Once all the relevant data has been cleared, the `Talo.Players.OnIdentityCleared
```csharp
private async void ClearIdentity()
{
try
{
await Talo.Players.ClearIdentity();
}
catch (Exception ex)
{
Debug.LogError($"Failed to clear identity: {ex.Message}");
}
try
{
await Talo.Players.ClearIdentity();
}
catch (Exception ex)
{
Debug.LogError($"Failed to clear identity: {ex.Message}");
}
}

// Listen for the identity cleared event
void Start()
{
Talo.Players.OnIdentityCleared += () =>
{
Debug.Log("Player identity has been cleared");
// Handle post-clear logic here
};
Talo.Players.OnIdentityCleared += () =>
{
Debug.Log("Player identity has been cleared");
// Handle post-clear logic here
};
}
```

Expand All @@ -132,8 +132,8 @@ You can merge players using `Talo.Players.Merge()` by providing the IDs of both
:::caution
There are a few limitations to merging players:

- **Player 2** cannot have a Talo Player Authentication alias or a Steam alias.
- If **Player 1** has a Talo Player Authentication or Steam alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.CurrentAlias` must belong to Player 1). In this case, make sure your last `Talo.Players.Identify()` call before merging uses Player 1's alias.
- **Player 2** cannot have a Talo Player Authentication, Steam or Google Play Games alias.
- If **Player 1** has a Talo Player Authentication, Steam or Google Play Games alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.CurrentAlias` must belong to Player 1). In this case, make sure your last `Talo.Players.Identify()` call before merging uses Player 1's alias.
- Both players cannot have overlapping alias services. For example, if both players have an alias with the service "username", the merging process will fail.
:::

Expand Down Expand Up @@ -212,6 +212,53 @@ You can build an avatar URL by replacing **[AVATAR_HASH]** with the `META_STEAMW

These props will be updated each time the player is identified using `Talo.Players.IdentifySteam()`.

## Google Play Games integration

:::tip
You can enable this integration on the [integrations page](https://dashboard.trytalo.com/integrations).
:::

If you have the Google Play Games integration enabled, Talo can identify a player using an OAuth client. All you need to do is pass a server auth code to the `Talo.Players.IdentifyGooglePlayGames` function.

The official Google Play Games Plugin has documentation for how to [request server auth codes](https://developer.android.com/games/pgs/unity/unity-start#retrieve-auth-codes).

```csharp
using GooglePlayGames.BasicApi;

// Define selectedScope having additional identity scopes.
private List selectedScopes = new List();

// Add scopes you want to request.
selectedScopes.Add(AuthScope.OPEN_ID);
selectedScopes.Add(AuthScope.PROFILE);
selectedScopes.Add(AuthScope.EMAIL);

// Call RequestServerSideAccess with additional scopes and retrieve
// authcode and grantedscopes list.
PlayGamesPlatform.Instance.RequestServerSideAccess(
/* forceRefreshToken= */ false,
selectedScopes,
(AuthResponse authResponse) =>
{
string authCode = authResponse.GetAuthCode();
List grantedScopes = authResponse.GetGrantedScopes();

// Pass the auth code to Talo
// Alternatively, you can `await` the result
_ = Talo.Players.IdentifyGooglePlayGames(authCode);
}
);
```

### Google Play Games player props

After successfully authenticating the player, these [props](/docs/unity/player-props) will automatically be created for them:

- `META_GOOGLE_PLAY_GAMES_DISPLAY_NAME` - The player's chosen display name
- `META_GOOGLE_PLAY_GAMES_AVATAR_URL` - A direct link to the player's avatar

These props will be updated each time the player is identified using `Talo.Players.IdentifyGooglePlayGames()`.

## Offline player cache

If the `cachePlayerOnIdentify` setting is enabled (default `true`), Talo will store player data locally. If a player tries to identify while offline, Talo will try and use local data if it exists.
4 changes: 1 addition & 3 deletions src/components/HomepageFeatures.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@ const FeatureList = [
{
title: 'Integrations',
Svg: require('../../static/img/tabler-icon-exchange.svg').default,
description: (
<>Learn how integrations like Steamworks sync with Talo and how to configure them.</>
),
description: <>Learn more about Talo's Steamworks and Google Play Games integrations.</>,
link: '/docs/integrations/steamworks',
},
]
Expand Down
Binary file added static/img/gpg-integration.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading