4 weeks ago
Hello,
I'm developing a multiplayer VR game for Quest and Windows PCVR. Unity 2023.2.19, XR Plug-in is set to OpenXR, latest XR plugins, and Meta XR Platform SDK 68.0.0.
I've only pieced together loose information online to make this system for grabbing and displaying the player's Oculus/Meta/Account username, but I need help because it's not working. I'm going this route because I don't want to add moderation and check for unique usernames if Meta already has these systems.
I made sure that the Meta XR Platform SDK was in my project which is the only Meta package I have: Meta XR Platform SDK | Integration | Unity Asset Store
It builds and runs fine, it authenticates successfully thanks to the instructions from here: https://developer.oculus.com/documentation/unity/ps-entitlement-check/
try
{
Core.AsyncInitialize(appID); //Their docs had "Platform.Core.AsyncInitialize(appID), but their example only had ()"
Entitlements.IsUserEntitledToApplication().OnComplete(EntitlementCallback);
}
catch(UnityException e)
{
Debug.LogError("Platform failed to initialize due to exception.");
Debug.LogException(e);
// Immediately quit the application.
UnityEngine.Application.Quit();
}
// Called when the Meta Horizon platform completes the async entitlement check request and a result is available.
void EntitlementCallback (Message msg)
{
if (msg.IsError) // User failed entitlement check
{
// Implements a default behavior for an entitlement check failure -- log the failure and exit the app.
Debug.LogError("You are NOT entitled to use this app.");
UnityEngine.Application.Quit();
}
else // User passed entitlement check
{
// Log the succeeded entitlement check for debugging.
Debug.Log("You are entitled to use this app.");
// From https://communityforums.atmeta.com/t5/Unity-VR-Development/How-do-i-access-oculus-username/td-p/889007
Oculus.Platform.Users.GetLoggedInUser().OnComplete(GetLoggedInUserCallback);
}
}
private void GetLoggedInUserCallback(Message msg) {
if (!msg.IsError) {
User user = msg.GetUser();
Oculus_userName = user.OculusID;
Oculus_displayName = user.DisplayName;
PlayerUsernameWeWillSet = Oculus_displayName;
}
else
{
setDefaultPlayerNameInstead = true;
}
}
But when I try to use PlayerUsernameWeWillSet, it's not null or empty because I have checks to set it to a generic player name instead. I know it can take a few seconds, so I have logic to rerun a coroutine every so often trying to see if we got the username but it's still not getting it. My PCVR version is working with a username I'm grabbing from a different source, it displays properly in a text field.
Maybe you see the problem, but if you don't you can help me know how to debug this and get a log after building it as an APK which I haven't tried yet.
Thank you.
4 weeks ago - last edited 4 weeks ago
This may be the problem of you having to upload your APK to the store, and then downloading it from the store
4 weeks ago
Forgot to mention authentication works, I've had it kick me if I sideload it but I publish it to a private alpha channel, download the update, and I'm authenticated in the game.
4 weeks ago - last edited 4 weeks ago
So you want to display the unique Oculus username? That would be the user.OculusID. If this is not the problem sorry for the misunderstanding. I would recommend Unity's android debug manual for debugging standalone builds.
You can use ADB from the cmd line
https://docs.unity3d.com/Manual/android-debugging-on-an-android-device.html
I prefer this tool as it logs straight to the Unity console.
https://docs.unity3d.com/Manual/com.unity.mobile.android-logcat.html
4 weeks ago
Yes I tried putting those things into place, that's in my third code block in my discussion post. I'll put it again:
private void GetLoggedInUserCallback(Message msg) {
if (!msg.IsError) {
User user = msg.GetUser();
Oculus_userName = user.OculusID;
Oculus_displayName = user.DisplayName;
PlayerUsernameWeWillSet = Oculus_displayName;
}
else
{
setDefaultPlayerNameInstead = true;
}
}
4 weeks ago - last edited 4 weeks ago
This will give you the unique Oculus username. The display name is the user's first and last name if I recall correctly.
PlayerUsernameWeWillSet = user.OculusID;