public void AuthenticatePlayerWithValidPlayFabSessionTicket() { var ticket = GetPlayerSessionTicket(); var authServiceReq = new ExchangePlayFabTokenRequest { PlayfabToken = ticket }; var authResult = _authServiceClient.ExchangePlayFabToken(authServiceReq); Assert.NotNull(authResult.PlayerIdentityToken); }
// this is the client implementation of ExchangePlayFabToken -- the server in this example is owned by Spatial and they have an implementation i cant access public override Task <ExchangePlayFabTokenResponse> ExchangePlayFabToken(ExchangePlayFabTokenRequest request, ServerCallContext context) { UserAccountInfo userInfo; try { var authenticateTask = PlayFabServerAPI.AuthenticateSessionTicketAsync( new AuthenticateSessionTicketRequest { SessionTicket = request.PlayfabToken, }); authenticateTask.Wait(); userInfo = authenticateTask.GetAwaiter().GetResult().Result.UserInfo; } catch (Exception e) { Log.Error(e, "Failed to authenticate PlayFab ticket"); throw new RpcException(new Status(StatusCode.InvalidArgument, "Failed to authenticate PlayFab ticket")); } try { var playerIdentityToken = _authServiceClient.CreatePlayerIdentityToken( new CreatePlayerIdentityTokenRequest { PlayerIdentifier = userInfo.PlayFabId, Provider = "playfab", ProjectName = _project } ); _analytics.Send("player_token_exchanged", new Dictionary <string, string> { { "provider", "PlayFab" }, { "spatialProjectId", _project } }, userInfo.PlayFabId); return(Task.FromResult(new ExchangePlayFabTokenResponse { PlayerIdentityToken = playerIdentityToken.PlayerIdentityToken })); } catch (Exception e) { Log.Error(e, $"Failed to create player identity token for {userInfo.PlayFabId}"); throw new RpcException(new Status(StatusCode.Internal, $"Failed to create player identity token for {userInfo.PlayFabId}")); } }