I am trying to integrate EOS to be able store achievements in our game.
I can authenticate the user (using EOS_LCT_Developer credentials), but in log I can see messages like:
LogEOSAuth: NewUserToken: User ClientId: xyz...NiT AccountId: ef1...930 Access[Expires: 2023.05.11-16.02.13 Remaining: 7200.62] Refresh[Expires: 2023-05-11T22:02:13.623Z Remaining: 28800.62] State: Valid
LogEOSAuth: UserAuthGenerated: Received FUserAuthToken
LogEOSAuth: UserAuthGenerated: Login complete: EOS_Success
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 10.267168s.
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 10.289062s.
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 20.537193s.
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 20.628698s.
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 31.009222s.
...
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 113.678703s.
LogEOSAuth: WaitForProductUserId() initiating ResolveProductUserId() after timeout for: ef1...930
LogEOSAuth: WaitForProductUserId(ef1...930) in progress for 113.696320s.
LogEOSAuth: FAccountUtil::ResolveToProductUserId - No First Logged In User
LogEOSUI: Social Overlay: Achievements disabled because of missing product user id (EOS_InvalidAuth).
LogEOSAuth: WaitForProductUserId() initiating ResolveProductUserId() after timeout for: ef1...930
LogEOSAuth: FAccountUtil::ResolveToProductUserId - No First Logged In User
Do I miss some configuration API calls?
Thanks,
Oldes
Hello,
These logs hint that you haven’t called EOS_Connect_Login. EOS_Auth_Login will log you into Epic Account Services. To log into EOS Game Services (achievements are a game service), you need to also login via the EOS_Connect interface.
Here is a code snippet to help you out:
EOS_Auth_Token* UserAuthToken = nullptr;
assert(AuthHandle != nullptr);
EOS_Auth_CopyUserAuthTokenOptions CopyTokenOptions = { 0 };
CopyTokenOptions.ApiVersion = EOS_AUTH_COPYUSERAUTHTOKEN_API_LATEST;
EOS_HConnect ConnectHandle = EOS_Platform_GetConnectInterface(PlatformHandle);
assert(ConnectHandle != nullptr);
if (EOS_Auth_CopyUserAuthToken(AuthHandle, &CopyTokenOptions, EpicId, &UserAuthToken) == EOS_EResult::EOS_Success)
{
LogFile << "EOS_Auth token:" << UserAuthToken->AccessToken << "\n";
EOS_Connect_Credentials Credentials;
Credentials.ApiVersion = EOS_CONNECT_CREDENTIALS_API_LATEST;
Credentials.Token = UserAuthToken->AccessToken;
Credentials.Type = EOS_EExternalCredentialType::EOS_ECT_EPIC;
EOS_Connect_LoginOptions Options = { 0 };
Options.ApiVersion = EOS_CONNECT_LOGIN_API_LATEST;
Options.Credentials = &Credentials;
Options.UserLoginInfo = nullptr;
// Setup a context so the callback knows what AccountId is logging in.
std::unique_ptr<FConnectLoginContext> ClientData(new FConnectLoginContext);
ClientData->AccountId = EpicId;
EOS_Connect_Login(ConnectHandle, &Options, ClientData.release(), ConnectLoginCompleteCb);
EOS_Auth_Token_Release(UserAuthToken);
}
else
{
std::cout << "Failed to copy user auth token!" << std::endl;
return 1;
}
You can read more on this in the Connect Interface documentation.
If I’m mistaken and this isn’t your issue. Can you share your code?
Thanks,
Seb