Oculus をアイデンティティプロバイダーとして設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
このガイドは、認証されたOculusデベロッパーがOculusアカウントをAccelByte Gaming Services (AGS) に接続するのに役立ちます。Oculusサービス内の追加機能を設定する必要がある場合があります。Oculusサービスの設定に関する詳細については、Oculusの担当者に連絡し、Oculusドキュメントを確認することをお勧めします。
このガイドは公開用であり、機密性のため限定的な情報が含まれています。まず完全な機密ガイドを参照することをお勧めします。機密ガイドのコピーをリクエストするには、AccelByteテクニカルプロデューサーにお問い合わせください。
目標
- AGS SDKを使用してゲームのOculus認証方法を有効にする。
- AGS Player Portalを使用してパブリッシャーウェブサイトのOculus認証方法を有効にする。
前提条件
ウェブログイン統合
- 認証されたOculus Developerアカウントが必要です。
- 認証を設定し、権限を管理するためのAGS Admin Portalアカウントが必要です。
- まだ行っていない場合は、Player PortalとLauncher用のPublisher Namespaceを設定してください。
- Player Portalが必要です。
ゲーム内ログイン統合
- 認証されたOculus Developerアカウントが必要です。
- Unreal Engineの場合、OnlineSubsystem Oculusプラグインをアクティベートする必要があります。
- Unityの場合、Oculus Unity Integrationが必要です。Oculus Integration | Integration | Unity Asset Storeで見つけることができます。
- 認証を設定し、権限を管理するためのAccelByte Admin Portalアカウントが必要です。
- まだ行っていない場合は、ゲーム用のGame Namespaceを設定してください。
- 最新バージョンのAccelByte Game SDKがインポートされたUnityまたはUnreal Engineゲームプロジェクトが必要です。
- AGS Identity and Access Management (IAM) Clientsに関する知識。
Oculus Metaの設定
Oculus Metaアプリケーションの設定
Oculusデベロッパーアカウントでoculus Metaアプリケーションを設定します。Oculus MetaのCreate an App Pageガイドに従ってください。
Oculus Metaプラットフォーム機能のリクエスト
アプリケーションの作成が完了したら、ユーザーID、ユーザープロフィール、アバターなどの特定のユーザーデータにアクセスするためにデータ使用チェックアップをリクエストします。Oculus MetaのData User CheckupガイドのSubmitting a DUC Guide手順に従ってください。
Oculus Developer Portalでの設定に問題がある場合は、カスタマーサポートに連絡してAccelByteから利用可能なガイドのコピーをリクエストしてください。
Oculusログイン方法の設定
ウェブログイン
ウェブログイン統合は現在AGS Shared Cloudでは利用できず、AGS Private Cloudでのみサポートされています。
プレイヤーがOculusアカウントを使用してPlayer Portalにログインできるようにするには、次の手順に従います:
-
AGS Admin portalで、パブリッシャーnamespaceに移動します。
-
サイドバーメニューで、Game Setup > 3rd Party Configuration > Auth & Account Linkingに移動します。
-
Login Methodsページで、+ Add Newボタンをクリックします。

-
ログイン方法オプションのリストから、Oculus Webを選択します。

-
Create Configurationポップアップが表示されます。必要な情報を入力し、Createをクリックします。
- Client IDフィールドにOculus App IDを入力します。
- Client SecretフィールドにOculus App Secretを入力します。
- Organization IDフィールドにOculus Organization IDを入力します。
- Redirect URIフィールドに
<BASE_URL>/auth/platforms/oculuswebを入力します。<BASE_URL>をドメインアドレス(例:https://development.accelbyte.io)に置き換えます。

-
詳細ページにリダイレクトされます。詳細ページでActivateをクリックし、ポップアップでActivateをクリックします。

ゲーム内ログイン
プレイヤーがOculusアカウントを使用してゲーム内からログインできるようにするには、次の手順に従います:
-
AGS Admin portalで、ゲームnamespaceに移動します。
-
サイドバーメニューで、Game Setup > 3rd Party Configuration > Auth & Account Linkingに移動します。
-
Auth & Account Linkingページで、+ Add Newボタンをクリックします。

-
ログイン方法オプションのリストから、Oculus SDKを選択します。

-
Create Configurationポップアップが表示されます。必要な情報を入力し、Createをクリックします。設定の詳細ページが表示されます。
- Client IDフィールドにOculus App IDを入力します。
- Client SecretフィールドにOculus App Secretを入力します。

-
詳細ページでActivateをクリックし、ポップアップでActivateをクリックします。

IAMクライアントの作成
IAMクライアントは、ターゲットプラットフォームでリリースしたいゲームクライアントの表現です。IAM Clientsの詳細については、Manage access control for applicationsを参照してください。
ゲーム内ログイン
各ゲームエンジンの設定は異なります。ゲームエンジンに適用される手順に従ってください。
- Unreal Engine手順
- Unity Engine手順
Unrealゲーム内ログイン統合
OculusをAccelByte SDKとサインインに統合して、プレイヤーがOculus認証情報を使用してゲームにログインできるようにすることができます。
Unreal Engine準備と設定
依存関係の追加
-
Build.csファイルにOnlineSubsystem、OnlineSubsystemOculus、LibOvrPlatformという公開依存関係モジュールを追加します。これらの依存関係は、Unreal EngineからOculusオンラインサブシステムを使用するためにプロジェクトに必要です。public ABThirdPartyLogin(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "OnlineSubsystem", "OnlineSubsystemUtils",
"OnlineSubsystemOculus","LibOVRPlatform",
"Sockets", "Networking", "InputCore", "AccelByteUe4Sdk", "Json", "JsonUtilities", "Http", "WebSockets"
});
PrivateDependencyModuleNames.AddRange(new string[] { });
PrivateDependencyModuleNames.Add("OnlineSubsystem"); -
また、
TutorialProject.Target.csとTutorialProjectEditor.Target.cs内にOnlineSubsystemOculusを追加する必要があります。public ABThirdPartyLoginTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemOculus" } );
}public ABThirdPartyLoginEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V2;
ExtraModuleNames.AddRange( new string[] { "ABThirdPartyLogin", "OnlineSubsystem", "AccelByteUe4Sdk", "OnlineSubsystemOculus" } );
}
Oculus用のUnreal Engineプロジェクト設定
DefaultEngine.iniファイル内に、Oculus設定のいくつかの変数を追加する必要があります。プロジェクトを開くにはこの設定が必要です。デフォルトでは、Oculusは自動的に起動します。riftアプリを開発している場合は、RiftAppId=[YourAppId]を使用してください。それ以外の場合は、OculusAppId=[YourAppId]を使用できます。
[OnlineSubsystem]
DefaultPlatformService=Oculus
[OnlineSubsystemOculus]
bEnabled=true
RiftAppId=[YourAppId]
Unreal Engineサンプルコード実装
SDKを使用してOculusログイン統合をゲームに統合する方法を学びます。ロジックは、プレイヤーがOculusでログインしたときにプレイヤーのログインをオーバーライドし、AGSプラットフォームを使用してSDKがアクセスできるサービスを提供することです。
プロジェクトはOculusをプラットフォームとして使用するため、プレイヤーはOculus認証情報でログインできます。
スニペットで使用されるAccelByteOnlineSubsystemPtrを取得するには、このガイドに従ってください。
-
Oculusがエンタイトルメントパスを実行したら、platform_tokensを取得するためにオンラインアイデンティティ関数を呼び出すことを確認してください。
const IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get();
if (OnlineSubsystem == nullptr)
{
FString Message = TEXT("Cannot login with no online subsystem set!");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);
return;
}
const IOnlineIdentityPtr OnlineIdentity = OnlineSubsystem->GetIdentityInterface();
if (!OnlineIdentity.IsValid())
{
FString Message = TEXT("Could not retrieve identity interface from native subsystem.");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);
return;
} -
システムがplatform_tokenを取得したら、そのトークンを使用してAccelByteの
loginWithOtherPlatformAPIを呼び出します。コードは次のようになります:const FOnLoginCompleteDelegate NativeLoginComplete = FOnLoginCompleteDelegate::CreateLambda([=]
(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error) {
UE_LOG(LogTemp, Warning, TEXT("OnLoginComplete %s : %s"), bWasSuccessful ? TEXT("Success") : TEXT("Fail"), *Error);
FString Message = FString::Printf(TEXT("OnLoginComplete %s : %s"), bWasSuccessful ? TEXT("Success") : TEXT("Fail"), *Error);
OnActionInfoUpdated.Broadcast(Message);
if (bWasSuccessful)
{
auto OculusUserId = OnlineIdentity->GetUniquePlayerId(0);
auto GenAuth = OnlineIdentity->GetAuthToken(LocalPlayer->GetControllerId());
const FString PlatformToken = (TEXT("%s:%s"), OculusUserId, GenAuth);
UE_LOG(LogTemp, Warning, TEXT("PlatformToken : %s"), *PlatformToken);
OnActionInfoUpdated.Broadcast(FString::Printf(TEXT("PlatformToken : %s"), *PlatformToken));
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient(TEXT("YOUR_KEY"));
auto UserApi = ApiClient->GetUserApi().Pin();
UserApi->LoginWithOtherPlatform(EAccelBytePlatformType::Oculus, PlatformToken, OnLoginSuccessDelegate, OnLoginErrorDelegate);
UE_LOG(LogTemp, Warning, TEXT("Request LoginWithOtherPlatform"));
OnActionInfoUpdated.Broadcast(TEXT("Request LoginWithOtherPlatform"));
}
});
OnlineIdentity->AddOnLoginCompleteDelegate_Handle(LocalPlayer->GetControllerId(), NativeLoginComplete);
const bool bWaitForDelegate = OnlineIdentity->Login(LocalPlayer->GetControllerId(), FOnlineAccountCredentials());
if (!bWaitForDelegate)
{
FString Message = TEXT("The online subsystem couldn't login");
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message);
OnActionInfoUpdated.Broadcast(Message);
}注記Oculus認証の
platform_tokenは<oculus_user_id>:<nonce_value>です。このコードで正しいプラットフォームを呼び出していることを確認してください:
EAccelBytePlatformType::Oculus。UserApi->LoginWithOtherPlatform(EAccelBytePlatformType::Oculus, PlatformToken, OnLoginSuccessDelegate, OnLoginErrorDelegate);
サンプルコードのテスト
起動引数
エディターで実行してプロジェクトを起動するか、コマンドプロンプトまたはPowershellでこの実行可能コマンドを使用します。
"[[PathToUE5Folder]]\Epic Games\UE_5.0\Engine\Binaries\Win64\UnrealEditor.exe]" "[PathToProjectFolder]\TestingUnreal\ABThirdPartyLogin\ABThirdPartyLogin.uproject" -skipcompile -game
以下の画像は、Oculusアカウントを使用したテストアプリへの正常なログインを示しています。

Unityゲーム内ログイン統合
OculusアカウントをAccelByte SDKとサインインに統合すると、プレイヤーはOculus認証情報を使用してゲームにログインできます。
Unity準備と設定
-
UnityプロジェクトにAccelByte Unity SDKを追加します。
-
Unity Asset StoreからUnity Oculus Integration Assetを追加します。
-
Unityアセットをインストールしてリストに表示されることを確認します。
Unityサンプルコード実装
AccelByte Unity SDKとOculus Integration Assetを追加したら、次の手順に従います:
-
空のスクリプトを作成して名前を付けます。
-
Editorでスクリプトを開き、このコードを追加します。これは、ユーザーIDとnonceを取得する前にエンタイトルメントをチェックします:
void Awake()
{
try
{
Core.Initialize();// getting oculus APP ID
Entitlements.IsUserEntitledToApplication().OnComplete(EntitlementCallback);// if entitlement pass will automatically return callback
Users.GetLoggedInUser().OnComplete(getUserCallback);//to generate userId
Users.GetUserProof().OnComplete(userProofCallback);//to generate UserNonce
}
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 Quest 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.");
LoginStatus.text = "You are entitled to use this app, Please Login";
}
}
void getUserCallback(Message<Models.User> msg)
{
if (!msg.IsError)
{
Models.User user = msg.Data;
userId = user.ID.ToString();
Debug.Log(
$"user : {user} ");
}
else
{
Models.Error error = msg.GetError();
}
}
void userProofCallback(Message<UserProof> msg)
{
if (!msg.IsError)
{
UserProof userNonce = msg.Data;
nonce = userNonce.Value;
Debug.Log(
$"userNonce : {userNonce} ");
}
else
{
Models.Error error = msg.GetError();
}
} -
Oculus Tab > Platform - Edit Settingを開き、App Idフィールドに入力します。
-
スクリプトはこの関数を実行し続けます。
public void OnLoginClick()
{
OculusLoginButton.interactable = false;
LoginStatus.text = "Logging in...";
var apiClient = AccelByteSDK.GetClientRegistry().GetApi();
var user = apiClient.GetUser();
// oculus token
string oculusToken = userId + ":" + nonce;
Result<TokenData, OAuthError> loginResult = null;
user.LoginWithOtherPlatform(PlatformType.Oculus, oculusToken,
(Result<TokenData, OAuthError> loginResult) =>
{
if (loginResult.IsError)
{
//If we error, grab the Error Error and Description to print in the Log
Debug.Log(
$"Login failed : {loginResult.Error.error} Description : {loginResult.Error.error_description}");
//Set the Status Text to display the Error if there is any
LoginStatus.text =
$"Login failed : {loginResult.Error.error} Description : {loginResult.Error.error_description}";
}
else
{
Debug.Log($"Login successful : {loginResult.Value.ToJsonString()}");
LoginStatus.text = $"Success : {loginResult.Value.ToJsonString()} ";
}
//Enable interaction with the Button again
OculusLoginButton.interactable = true;
});
}注記Oculus認証の
platform_tokenは<oculus_user_id>:<nonce_value>です。 -
この関数は、OculusプラットフォームタイプでAccelByteエンドポイントにリクエストを送信し、コールバックを返します。
サンプルコードのテスト
これで、プロジェクトをビルドして実行できます。以下の画像は、Oculusアカウントとテストアプリを使用した正常なログインを示しています。


注意
Oculusには2種類のユーザーIDがあります:
- app scoped id: アプリケーションごとに一意のID、異なるデバイス上の同じアプリケーションでは異なりますが、アプリグループ化によって回避できます。同じアプリグループ内では、新しいユーザーは同じapp scoped idを持ちます。デバイス間でユーザーデータを共有したいゲームの場合は、アプリを同じアプリグループに配置してください。
- organization scoped id: 組織ごとに一意で、同じ組織内の異なるアプリがユーザーを識別できるようにします。
AGSアカウントリンクには、この組織内のアプリに関係なく同じOculusアカウントを識別できるようにorganization scoped idを使用します。
また、IAPなどの一部の機能にはapp scoped idを利用します。
このエンドポイントを使用して、AGSユーザーIDでapp scoped idを取得できます。
このエンドポイントを使用して、app scoped idでAGSユーザーアカウントを取得できます。