Implementing Google Play games services in your Android games lets you leverage Google’s service layer for features such as achievements and leaderboards. If your game implements Google Play game services, additional configuration is required to support the builds that UDP creates for different stores.
ゲームが Google Play ゲームサービスを呼び出すと、Google Play ゲームサービスは以下の詳細が Google Play Console に登録されている情報と一致することを確認します。
それらが一致しない場合、プレイヤーは Google Play ゲームサービスを使用してアプリケーションにログインできません。
UDP を通して特定のストアにゲームを公開する場合、UDP はストア固有のサフィックスをパッケージ名に追加します。さらに、独自の秘密鍵を使用して証明書を生成しない場合、UDP は再パックされたビルドごとに証明書を生成します。これにより、証明書やパッケージ名が Google Play Console の情報と一致しなくなります。このため、ユーザーはGoogle Play ゲームサービスを使用してゲームにログインできなくなります。
次のセクションでは、この問題を解決する方法について説明します。
このセクションでは、UDP バージョンを Google Play アプリケーションに紐づけして、Google Play ゲームサービスを UDP で機能させる方法について説明します。
このセクションでは、Google Play ゲームサービスプロジェクトを作成し、それを新規または既存のクラウドプロジェクトに紐づける方法について説明します。
Play Games Services 設定ページで、Yes, my game already uses Google APIs (はい、このゲームはすでに Google API を使っています) を選択した場合は、以下を行ってください。
Play Games Services 設定ページで No, my game doesn’t use Google APIs (いいえ、このゲームは Google API を使っていません) を選択した場合は、以下の通り。
新規の Play Games Services プロジェクトを作成する場合、Add credential リンクは無効です。
上記のステップを完了すると、Google Play ゲームは Google Play ゲームサービスに紐づけられます。以下のステップでは、UDP ビルドをゲームサービスに紐づけます。
アプリを Google Play ゲームサービスにリンクすると、他の (UDP) アプリをゲームサービスに紐づけできます。
openssl x509 -in [downloaded-pem-filepath] -fingerprint -noout
Google Play アプリケーションにリンクした UDP ビルドは、Google Cloud Platform > Google API & Services ダッシュボードの Credentials (認証情報) で確認できます。
これらの手順により、Mi GetApps (この SDK は古いバージョンの Google モバイルサービスと統合しているため競合が発生します) を除き、紐づけられているすべての UDP ストアバージョンで Google Play ゲームサービスが正常に機能します。
ノート: Google のシステムに変更を加えると、上記のソリューションに影響を与える可能性があります。詳しくは、Google のドキュメント を参照してください。
Cloud Build を使って、以下の方法でゲームを UDP コンソールに展開できます。
This section explains how to use Cloud Build to push your game to UDP. In the Unity Editor, enable Cloud Build in the Project Settings window.
Unity エディターの Cloud Build 機能を通してゲームを UDP に展開するには、UDP ビルドをアップロードして UDP にプッシュ送信する必要があります。
Unity Dashboard の Cloud Build 機能を通してゲームを UDP に展開するには、UDP ビルドを Unity Dashboard にアップロードして、そこから UDP にプッシュ送信する必要があります。
Unity Teams Advanced を使用すると、ビルドを自動的に生成できます。
In the Cloud Build tab of the Project Settings window:
Manage Build Targets > Add new build target を選択します
1. TARGET SETUP ウィンドウで PLATFORM フィールドを Android に設定し、便利な TARGET LABEL を入力します。
1. Next: Save を選択します。
1. Start Cloud Build を選択してから、作成したターゲットビルドを選択します。
Unity Cloud Build Developer Dashboard を通してビルドを UDP に直接プッシュ送信します (前述を参照)。
UDP は、ゲームで使用されている他のサービスに、ゲームがダウンロードされたストアを通知できます。
この情報は、Unity サービスだけでなく、サードパーティまたは独自のサービスでさまざまな方法で利用できます。
たとえば、Unity Remote Config を使用すると、ゲームのダウンロード元のストアなど、定義したルールに基づいてゲーム設定を調整できます。
このセクションでは、他のサービスがこの情報にアクセスできるようにする方法を説明し、例 を紹介します。
ゲームがプレイヤーのデバイスで最初に起動されると、UDP は udp.json
ファイルを作成してゲームの Persistent Data Path (永続データパス) に置きます。このファイルには、ゲームがダウンロードされたストアを示すフィールド udpStore
が含まれています。その情報を取得して、目的に応じて利用します。
ノート: これにより、ゲームマニフェストに新しい権限が追加されることはありません。
ファイル udp.json
は以下のパスに保存します。
Application.PersistentDataPath + '/Unity' + /Application.CloudProjectID + /udp/udp.json
上のパスで
Application.PersistentDataPath
はゲームの永続データパスです。Application.CloudProjectID
はゲームの Unity プロジェクト ID です。以下は udp.json
ファイルへのパスの例です。
path/storage/emulated/0/Android/data/com.mystudio.mygame/files/Unity/c83d2de2-de74-4b75-83fc-ade948bda064/udp/udp.json
上のパスで
Application.PersistentDataPath
= path/storage/emulated/0/Android/data/com.mystudio.mygame
Application.CloudProjectID
= c83d2de2-de74-4b75-83fc-ade948bda064
ファイル udp.json
には次の情報が含まれます。
{"key":"UDP","udpStore":"StoreName","udpClientId":"value_of_udpClientId","CloudProjectId":"value_of_CloudProjectId"}
フィールド udpStore
には、ゲームのダウンロード元の UDP ストアの値が含まれます。
以下は udp.json
ファイルの例です。
{"key":"UDP","udpStore":"Huawei","udpClientId":"icjaB7wmu_q7AOjrSLH8yw","cloudProjectId":"bc2be074-09f3-450f-8e98-a0f79c9746f7"}
In this example, the game was downloaded from the HUAWEI AppGallery.
ヒント: JSONUtility.FromJsonOverwrite
を使って、ファイルのコンテンツをテキストアセットとして読み込みます。
以下の表は、UDP で利用可能なストアの udpStore
値のリストです。
これらは、大文字小文字を区別します。
ストア (UDP でのチャンネル名) | udpStore の値 |
---|---|
UDP Sandbox (ジェネリックな UDP ビルド用) | UdpSandbox |
ONE store | OneStore |
APPTUTTi | Apptutti |
Mi GetApps (Xiaomi) | XiaomiStore |
HUAWEI AppGallery | Huawei |
QooApp Game Store | QooApp |
Uptodown | Uptodown |
SHAREit | ShareIt |
JioGames | JioGames |
Legion Store | Legion |
Unity Remote Config を使用すると、アプリケーションの新しいバージョンを展開せずにゲーム設定を調整できます。プレイヤーがゲームを起動すると、Remote Config は、ルール条件 (Unity、アプリケーション、ユーザー、自身で定義したカスタム基準に基づく) として使用されるコンテキスト属性を検出します。次に、サービスは、適用されるルールに従って、各プレイヤーのカスタマイズされた設定を返します。
ルール条件の属性として udpStore
を使用すると、ゲームのダウンロード元の UDP ストアに応じてゲーム設定を決定できます。
Remote Config を使用して udpStore を実装するには、以下の手順に従います。
public struct AppAttributes
{
public string udpStore;
}
{
string udpFilePath = System.IO.Path.Combine(Application.persistentDataPath, "Unity", Application.cloudProjectId, "udp", "udp.json");
string udpFileContents = System.IO.File.ReadAllText(udpFilePath);
var appAttr = JsonUtility.FromJson<AppAttributes>(udpFileContents);
Unity.RemoteConfig.ConfigManager.FetchCompleted += ConfigManager_FetchCompleted;
Unity.RemoteConfig.ConfigManager.FetchConfigs(null, appAttr);
}
Unity IAP を使用して UDP を実装する場合は、最初に Unity IAP を設定 します。
ノート: UDPパッケージを使用する代わりに Unity IAP バージョン 1.22.0–1.23.5 を使って UDP を実装することを選択した場合は、Unity IAP 経由でのみ実装してください。
Unity IAP は自動的に以下を処理します。
ただし、ゲームは Unity IAP ドキュメント に基づいて、Unity IAP の同様の機能 (初期化や購入など) を適切に使用する必要があります。
Unity IAP を使用してゲームのアプリ内課金を実装したら、以下の手順で Unity IAP を使用して UDP を設定します。
When fetching the IAP products to pass to the queryInventory
method, invoke ProductCatalog.LoadDefaultCatalog()
. This returns the IAP products defined in the Editor’s IAP Catalog (Services > Unity IAP > IAP Catalog).
例
var catalog = ProductCatalog.LoadDefaultCatalog();
foreach (var product in catalog.allValidProducts)
{
if (product.allStoreIDs.Count > 0)
{
var ids = new IDs();
foreach (var storeID in product.allStoreIDs)
{
ids.Add(storeID.id, storeID.store);
}
builder.AddProduct(product.id, product.type, ids);
}
else
{
builder.AddProduct(product.id, product.type);
}
}
UDP コンソールでゲームの IAP Catalog (IAP カタログ) を変更する場合は、UDP コンソールから IAP プロダクト情報を取得するようにゲームを設定してください。
queryInventory
メソッドに渡す IAP プロダクトを取得する場合はbuilder.AddProduct を呼び出し、UDP コンソールから定義された特定の IAP プロダクトを取得します。
builder.AddProduct(product.id, product.type, new IDs{})
各通貨に調整したプロダクト価格を表示するには、productInfo.Value.Price
を使用します。
UDP コンソールで定義されているすべての IAP プロダクトを取得するには、IAP プロダクトの取得メソッドを呼び出さないでください。ゲームは自動的に UDP コンソールから IAP カタログ全体を取得します。
ノート: UDP コンソールに IAP プロダクトの CSV ファイルをアップロードすると、IAP カタログが完全に上書きされます。
UDP 用のすべてのアプリ内課金を IAP カタログ に加え、設定します。
ノート: ゲームクライアントで IAP カタログを使用しない場合 (例えば、ゲームサーバー上でのみ IAP アイテムを維持する場合) でも、UDP コンソールで IAP カタログを作成 する必要があります。
IAP カタログが正しく保存されていることを確認するには、加えたアイテムが UDP コンソールに表示されていることを確認します。