Version: 2020.3
言語: 日本語
UDP コンソールを使ったゲームの管理と公開
UDP ビルドでの Firebase の使用

他のサービスを利用した UDP の使用

UDP ビルドの GooglePlay ゲームサービス

概要

Android ゲームに Google Play ゲームサービス を実装すると、実績 (achievement) やリーダーボード (leaderboard) などの機能に Google のサービスレイヤーを活用できます。ゲームが Google Play ゲームサービスを実装している場合、UDP がさまざまなストア用に作成するビルドをサポートするには、追加の設定が必要です。

ゲームが Google Play ゲームサービスを呼び出すと、Google Play ゲームサービスは以下の詳細が Google Play Console に登録されている情報と一致することを確認します。

  • アプリケーションの パッケージ名
  • アプリケーションが署名された 証明書

それらが一致しない場合、プレイヤーは Google Play ゲームサービスを使用してアプリケーションにログインできません。

UDP を通して特定のストアにゲームを公開する場合、UDP はストア固有のサフィックスをパッケージ名に追加します。さらに、独自の秘密鍵を使用して証明書を生成しない場合、UDP は再パックされたビルドごとに証明書を生成します。これにより、証明書やパッケージ名が Google Play Console の情報と一致しなくなります。このため、ユーザーはGoogle Play ゲームサービスを使用してゲームにログインできなくなります。

次のセクションでは、この問題を解決する方法について説明します。

UDP ビルド用に Google Play ゲームサービスを設定

このセクションでは、UDP バージョンを Google Play アプリケーションに紐づけして、Google Play ゲームサービスを UDP で機能させる方法について説明します。

  1. Google Play Console で、ターゲットアプリケーションに移動します。
  2. Play Games Services > Setup and management > Configuration の順に移動します。
    • Google Play ゲームに Google Play ゲームサービスが実装されている場合は、すでに Google Play ゲームサービスプロジェクトに紐づけられています。この場合は、以下を行ってください。
      1. Use an existing Play Games Services project を選択します。
      2. プロジェクトを選択して Use を選択します。
      3. UDP アプリケーションをゲームサービスに紐づける のステップに従います。
    • Google Play ゲームに Google Play ゲームサービスが実装されていない場合は、以下を行ってください。
      1. Play Games Services 設定ページで、Yes, my game already uses Google APIs (はい、このゲームはすでに Google API を使っています) か No, my game doesn’t use Google APIs (いいえ、このゲームは Google API を使っていません) を選択します。
      2. Google Play ゲームサービスプロジェクトの作成と紐づけ のステップに従います。

Google Play ゲームサービスプロジェクトの作成と紐づけ

このセクションでは、Google Play ゲームサービスプロジェクトを作成し、それを新規または既存のクラウドプロジェクトに紐づける方法について説明します。

Play Games Services 設定ページで、Yes, my game already uses Google APIs (はい、このゲームはすでに Google API を使っています) を選択した場合は、以下を行ってください。

  1. クラウドプロジェクトを選択します。
  2. Use を選択して、新規の Play Games Services プロジェクトを作成し、既存のクラウドプロジェクトに紐づけます。

Play Games Services 設定ページで No, my game doesn’t use Google APIs (いいえ、このゲームは Google API を使っていません) を選択した場合は、以下の通り。

  1. ゲーム名を入力します。
  2. Use を選択して、新規の Play Games Services プロジェクトを作成し、既存のクラウドプロジェクトに紐づけます。

新規の Play Games Services プロジェクトを作成する場合、Add credential リンクは無効です。

  1. Configure OAuth consent screen を選択します。
  2. Play Games Services 設定画面で Refresh を選択します。
    Add credential が選択可能になります。
  3. Add credential を選択します。
    Add credential ページが開きます。
  4. Add credential ページで以下を行います。
    1. TypeAndroid を選択します。
    2. Enable anti-piracyOff に設定します。これにより、ユーザーは Google Play とは別のアプリストアからゲームをインストールした場合でも、ゲームにアクセスできます。
    3. Authorization セクションで、Create OAuth client を選択します。これにより、ポップアップ画面が表示されます。
    4. Create OAuth Client ID を選択し、ポップアップ画面に入力してフォームを完成します。

上記のステップを完了すると、Google Play ゲームは Google Play ゲームサービスに紐づけられます。以下のステップでは、UDP ビルドをゲームサービスに紐づけます

UDP アプリケーションをゲームサービスに紐づける

アプリを Google Play ゲームサービスにリンクすると、他の (UDP) アプリをゲームサービスに紐づけできます。

  1. Play Games Services > Setup and management > Configuration の順に移動します。
    1. Play Games Services ページで Add credential を選択します。
  2. Add credential ページで以下を行います。
    1. Android を選択します。
    2. Enable anti-piracyOff に設定します。これにより、ユーザーは Google Play とは別のアプリストアからゲームをインストールした場合でも、ゲームにアクセスできます。
    3. Authorization セクションで、Create OAuth client を選択します。これにより、ポップアップ画面が表示されます。
    4. Create OAuth Client ID を選択し、ポップアップ画面に入力してフォームを完成します。
  3. Create OAuth client ID フォームで必要な項目を記入し、UDP ビルドのエントリーを作成します。
    1. Name フィールドで、例えば “Samsung バージョン” のような、対応するストアにちなんだ名前を付けます。
    2. Package name フィールドで、UDP コンソールを通して対応するストアに登録されているビルドのパッケージ名を指定します。
      ストア特有のパッケージ名は UDP コンソールに表示されます。
      1. My Games > Publish タブを選択します。
      2. 対応するストアの Advanced を選択します。
        パッケージ名は Basic Information セクションに表示されます。
    3. Certificate (証明書) のフィールドで、対応する UDP ストアに使用されている証明書を使用します。Repack (再パック) の操作後、UDP は新しい証明書でアプリに署名します。
      ストア固有の証明書が UDP コンソールに表示されます。
      1. My Games > Publish タブを選択します。
      2. 対応するストアの Advanced を選択します。
        パッケージ名は Basic Information セクションに表示されます。
        ノート: 以下のコマンドを使用して APK 証明書をダウンロードし、指紋情報を取得することもできます。
        openssl x509 -in [downloaded-pem-filepath] -fingerprint -noout
      3. SHA–1 を UDP コンソールから証明書フィールドにコピーします。
  4. フォームを記入し終わったら Create を選択し Google Play Console に戻ります。
  5. Refresh OAuth clients を選択します。
  6. 新しい OAuth クライアントを選択します。
    1. Save changes を選択し、認証情報を保存します。
  7. Google Play アプリケーションに紐づけるストア固有の UDP ビルドごとに、上記の手順を繰り返します。

Google Play アプリケーションにリンクした UDP ビルドは、Google Cloud Platform > Google API & Services ダッシュボードの Credentials (認証情報) で確認できます。

これらの手順により、Mi GetApps (この SDK は古いバージョンの Google モバイルサービスと統合しているため競合が発生します) を除き、紐づけられているすべての UDP ストアバージョンで Google Play ゲームサービスが正常に機能します。

ノート: Google のシステムに変更を加えると、上記のソリューションに影響を与える可能性があります。詳しくは、Google のドキュメント を参照してください。

Cloud Build を UDP と共に使用

Cloud Build を使って、以下の方法でゲームを UDP コンソールに展開できます。

Cloud Build を使ってビルドを UDP コンソールにプッシュ送信

ここでは、CloudBuild を使用してゲームを UDP にプッシュ送信する方法について説明します。 Unity エディターで、Unity Services ウィンドウから Cloud Build を有効にします。

エディターで Cloud Build を使用してゲームを UDP に展開

Unity エディターの Cloud Build 機能を通してゲームを UDP に展開するには、UDP ビルドをアップロードして UDP にプッシュ送信する必要があります。

  1. Cloud Build Services ウィンドウで、これまでビルドをアップロードしたことがない場合は、Upload Build を選択します。
  2. ファイル内で
    • UDP ビルドの APK を選択してください
    • 便利な LABEL を入力してください
    • PLATFORM フィールドを Android に設定します
  3. UPLOAD を選択して、アップロードプロセスを完了させます。
  4. Cloud Build Services ウィンドウで、ビルドの History (履歴) タイムラインから目的のビルドを見つけ、Push to Unity Distribution Portal を選択します。
    1. プッシュできること、およびアクションが完了することを確認します。

Unity Dashboard を使ってゲームを UDP に展開

Unity Dashboard の Cloud Build 機能を通してゲームを UDP に展開するには、UDP ビルドを Unity Dashboard にアップロードして、そこから UDP にプッシュ送信する必要があります。

  1. Unity Developer Dashboard で、プロジェクトの Cloud Build > History の順に移動します。
  2. Upload を選択し APK ファイルを選択します。
  3. Platform フィールドで Android を選択します。
  4. Upload を選択します。
  5. ビルド横の More メニューを選択して、ドロップダウンを開きます。
  6. Push to Unity Distribution Portal を選択します。

Cloud Build を使ったビルドと展開

Unity Teams Advanced を使用すると、ビルドを自動的に生成できます

Cloud Build Services ウィンドウで

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 を保存場所

ファイル 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 の読み込み

ファイル udp.json には次の情報が含まれます。

{"key":"UDP","udpStore":"StoreName","udpClientId":"value_of_udpClientId","CloudProjectId":"value_of_CloudProjectId"}

フィールド udpStore には、ゲームのダウンロード元の UDP ストアの値が含まれます。

以下は udp.json ファイルの例です。

{“key”:“UDP”,“udpStore”:“SamsungGalaxyStore”,“udpClientId”:“icjaB7wmu_q7AOjrSLH8yw”,“cloudProjectId”:“bc2be074–09f3–450f–8e98-a0f79c9746f7”}

この例では、ゲームは Samsung Galaxy Store からダウンロードされました。

ヒント: JSONUtility.FromJsonOverwrite を使って、ファイルのコンテンツをテキストアセットとして読み込みます。

udpStore 値

以下の表は、UDP で利用可能なストアの udpStore 値のリストです。

これらは、大文字小文字を区別します。

ストア (UDP でのチャンネル名) udpStore の値
UDP Sandbox (ジェネリックな UDP ビルド用) UdpSandbox
ONE store OneStore
APPTUTTi Apptutti
Mi GetApps (Xiaomi) XiaomiStore
HUAWEI AppGallery Huawei
Samsung Galaxy Store SamsungGalaxyStore
QooApp Game Store QooApp
TPAY MOBILE Stores Tpay
Uptodown Uptodown
SHAREit ShareIt
JioGames JioGamesStore

Remote Config を通した udpStore の使用

Unity Remote Config を使用すると、アプリケーションの新しいバージョンを展開せずにゲーム設定を調整できます。プレイヤーがゲームを起動すると、Remote Config は、ルール条件 (Unity、アプリケーション、ユーザー、自身で定義したカスタム基準に基づく) として使用されるコンテキスト属性を検出します。次に、サービスは、適用されるルールに従って、各プレイヤーのカスタマイズされた設定を返します。

ルール条件の属性として udpStore を使用すると、ゲームのダウンロード元の UDP ストアに応じてゲーム設定を決定できます。

Remote Config を使用して udpStore を実装するには、以下の手順に従います。

  1. UDP パッケージ をダウンロードしインストールします。
  2. Unity Remote Config パッケージをダウンロードしインストールします。詳しくは、Remote Config のドキュメント を参照してください。
  3. 少なくとも “udpStore” パラメーターを含む AppAttributes 構造体を作ります。
    public struct AppAttributes { public string udpStore; }
  4. ゲームコードで Remote Config の ConfigManager.FetchConfigs コールを実装します。
  5. FetchConfigs を呼び出すときに AppAttributes 構造体の新規インスタンスを作成し、Application.PersistentDataPath + ‘/Unity’ + /Application.CloudProjectId + /udp/udp.json に対して JSONUtility.FromJsonOverwrite を使って UDP ストアデータを読み込み、ファイルのコンテンツをテキストアセットとして読み込みます。
    { 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); }
  6. AppAttributes 構造体を ConfigManager.FetchConfigs で使用するよう注意してください。
  7. Remote Config ウィンドウを開き (Window > Remote Config)、UDP ストアに基づいて変更したいパラメーターを作ります。
  8. パラメーターを設定し、ゲームコードに組み込んだら、Remote Config ウィンドウで各ストアのルールを作成します。
  9. 各ルールの Condition に以下を入力します。app.udpStore == “[storeName]”
  10. 設定を有効にするには、Remote Config ウィンドウの左ペインにあるルール名 (Name) の横にあるチェックボックスを選択します。
  11. アプリケーションをデバイスにビルドし、ルールが正しく適用されていることを確認して、配布します。

Unity IAP を使用した UDP 用の IAP アイテムの実装

Unity IAP を使用して UDP を実装する場合は、最初に Unity IAP を設定 します。

ノート: UDPパッケージを使用する代わりに Unity IAP バージョン 1.22.0–1.23.5 を使って UDP を実装することを選択した場合は、Unity IAP 経由でのみ実装してください。

Unity IAP は自動的に以下を処理します。

  • UDP の初期化
  • ストアの IAP プロダクトインベントリのクエリ
  • プロダクトの購入のリクエスト
  • 購入したアイテムの消費

ただし、ゲームは Unity IAP ドキュメント に基づいて、Unity IAP の同様の機能 (初期化や購入など) を適切に使用する必要があります。

Unity IAP を使用してゲームのアプリ内課金を実装したら、以下の手順で Unity IAP を使用して UDP を設定します。

IAP インベントリのクエリ

Unity IAP (コードによる実装) を使用

エディターで定義した IAP プロダクトを取得

queryInventory メソッドに渡す IAP プロダクトを取得する場合は、ProductCatalog.LoadDefaultCatalog() を呼び出します。このメソッドは、エディターの IAP Catalog (Window > Unity IAP > IAP Catalog) で定義された IAP プロダクトを返します。

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 プロダクト情報を取得

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 カタログを取得

UDP コンソールで定義されているすべての IAP プロダクトを取得するには、IAP プロダクトの取得メソッドを呼び出さないでください。ゲームは自動的に UDP コンソールから IAP カタログ全体を取得します。

ノート: UDP コンソールに IAP プロダクトの CSV ファイルをアップロードすると、IAP カタログが完全に上書きされます。

Unity IAP パッケージを IAP カタログに入力

UDP 用のすべてのアプリ内課金を IAP カタログ に加え、設定します。

ノート: ゲームクライアントで IAP カタログを使用しない場合 (例えば、ゲームサーバー上でのみ IAP アイテムを維持する場合) でも、UDP コンソールで IAP カタログを作成 する必要があります。

  1. Unity エディターで Window > Unity IAP > IAP Catalog を選択します。
  2. Add Product を選択し、各 IAP プロダクトに詳細情報を入力します。
    1. Unity Distribution Portal Configuration で IAP アイテムの価格を加えます。
  3. IAP プロダクトを UDP コンソールに保存するには、Sync to UDP を選択します。作成した各 IAP プロダクトに対し、この操作を行います。

IAP カタログが正しく保存されていることを確認するには、加えたアイテムが UDP コンソールに表示されていることを確認します。

UDP コンソールを使ったゲームの管理と公開
UDP ビルドでの Firebase の使用