Unity IAP は、中国国外の開発者のために、中国市場でアプリケーションをパブリッシュするための効率的なルートを提供しています。ここでは、Unity Channel SDK を紹介し、Xiaomi Mi Game Center プラットフォームに IAP コンテンツをパブリッシュする開発者にエンドツーエンド処理を説明します。
ゲームを Mi Game Center にパブリッシュするには、3 つの手順があります。
Mi Game Center は Xiaomi の公式な Android ストアです。 これにより、安全な支払いポータルを使用して Xiaomi プラットフォームのプロダクトを検索、閲覧、購入することができます。 詳細は、Unity-Xiaomi パートナーサイト を参照してください。
Unity Channel は Unity IAP の内部コンポーネントで、ユーザーログイン、支払い管理、中国政府のアプリケーション配布に関する規制に対する承認を簡易にすることによって、中国国外の開発者が中国のアプリケーションストア市場にアクセスすることを支援します。
Unity Channel を使用するため、Xiaomi Mi Pay のインテグレーションは、Google Play や iTunes とは以下の点で異なります。
このセクションは、Unity IAP SDK を使って Unity エディターによってゲームを設定する以下の手順について説明します。
Xiaomi は Android ビルドのみをサポートします。以下の 4 つの手順に従ってプロジェクトを Android 向けに設定します。
エディターの Services ウィンドウで Unity IAP を有効にします (Window > Services、Unity IAP の設定 を参照)。インポートを指示する表示が現れたら、必ず IAP アセットパッケージをインポートしてください (下記の画像参照)。バージョン 1.13.0 時点で、Unity IAP アセットパッケージに Unity Channel と Xiaomi の SDK が含まれます。
IAP 無しでアプリケーションを Mi Game Center にパブリッシュしたい場合は、Xiaomi Unity Channel スタンドアロン SDK を設定します。Build Settings ウィンドウ (File > Build Settings) の Platform で Android を選択し、表示された Xiaomi Game Center の Add ボタンをクリックします。
Unity Channel には、アプリケーションストアの認証情報とテストモード機能を管理するためのエディターインターフェースを提供するアセットが含まれています。 この AppStoreSettings アセットは、Unity IAP アセットパッケージをインポートするときに Assets/Plugins/UnityChannel/XiaomiSupport/Resources にインストールされます。Assets > Create > App Store Settings を選択して、手動でエディターに作成することもできます。アセットを選択してインスペクターを表示し、インターフェースにアクセスします。
ノート: AppStoreSettings アセットは Unity 5.6 以降でのみ使用できます。
ゲームが Unity と Xiaomi の両方のサーバーと通信するためには、一意の識別子が必要です。検索フィールドでプロジェクトID を検索することによって、Unity Client の認証情報を調べられます。Unity 5.3 または 5.4 のユーザーは、AppStoreSettings アセットにアクセスできないので、この方法で認証情報を取得して設定する必要があります。上の図に示されている設定は以下の通りです。
これらの認証情報と、インテグレーションプロセスのさまざまな段階でテストモードを切り替える必要があります。App Store Settings のデータは、クライアントに保存するのではなく、サーバー側で更新されます。
Xiaomi アセットパッケージをインポートする ために Unity IAP を使用可能にしたら、他に何もする必要はありません。Unity IAP を有効にする方法は、Unity IAP の設定 を参照してください。
Unity Asset Store を通して最新の Unity IAP プラグインをインストールすることもできます。
Unity IAP にビルドされる Xiaomi クライアント SDK は、クライアントで使用可能なプロダクトのメタデータに依存します。そのような場合、エディターの IAP Catalog ウィンドウ (Window > Unity IAP > IAP Catalog) でプロダクトを定義することが必要です。
カタログの作成: IAP Catalog ウィンドウは、ゲームクライアントのランタイムのメタデータと一緒にプロダクトを定義します。 Codeless IAP のドキュメントには、IAP Catalog を使用してプロダクトを設定するための情報が含まれます。 以下のプロダクト属性は、Xiaomi に特有のものです。
プロダクト属性とパラメーターに関して詳細は、プロダクトの定義 を参照してください。
エディターの IAP Catalog ウィンドウで、App Store Export > Xiaomi Mi Pay Catalog の順に選択してカタログをエクスポートします。
MiGameProductCatalog.prop ファイルを選択した場所にエクスポートします。それから、プロダクトの IAP Configuration ページに移動し Import (後出の IAP プロダクトカタログのインポート 参照) を選択して、Xiaomi Developer Portal](https://developer.unity.mi.com/) にプロダクトカタログをインポートします。
IAP カタログをエクスポートすると、MiGameProductCatalog.prop ファイルのコピーがプロジェクトの Assets/Plugins/Android/assets/ に書き込まれます (下の図を参照)。Unity IAP は、このファイルを IAP Catalog エディターと実行時に使用します。Xiaomi Developer Portal からカタログファイルを明示的にインポートしない場合は、コピーがアプリケーションのデフォルトのプロダクトカタログとして使用されます。
Unity IAP には通常、 IAP カタログデータを送信先ストア用に解析する設定ビルダーが必要であり、その後に Unity IAP Initialize()
API が必要です (IAP の初期化 に関するドキュメント参照)。
Xiaomi のゲームは IAP を初期化する前に追加の処理を必要とします。理由は、Mi Game Center は ログイン API を使用して、起動時にアプリケーションの認証情報を共有する必要があるためです。
変更された初期化プロセスは、以下の通りです。
initialize()
API を呼び出します。これらのステップをゲームのランタイムライフサイクルの早い段階、できれば、起動時に実行します。それらは同じスクリプトで実装できます。
以下の例は、ログイン API を呼び出すために Unity Channel SDK を使って初期化を修正する方法を表しています。
using AppStoreSupport;
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Purchasing;
using UnityEngine.Store;
// ゲームの起動時に、スクリプトを 1 回実行します
public class UnityChannelSample : MonoBehaviour
{
// Xiaomi ログインにはログインリスナーが必要です
//Unity Channel SDK に含まれる ILoginListener 抽象クラス を実装してリスナーを作成します
class SampleLoginListener : ILoginListener
{
public Action initializeIAP;
// ステップ 1 成功、ステップ 2 を呼び出します
public void OnInitialized()
{
Debug.Log("Initialization succeeded.");
UnityEngine.Store.StoreService.Login(this); // 初期化が成功したら Xiaomi ログインを開始します
}
// ステップ 1 失敗、エラーメッセージとリソースを表示します
public void OnInitializeFailed(string message)
{
Debug.Log("Initialization failed.");
}
// ステップ 2 終了、ステップ 3 を呼び出します
public void OnLogin(UserInfo userInfo)
{
Debug.Log(string.Format("Login successful: userId {0}, userLoginToken {1}, channel {2}", userInfo.userId, userInfo.userLoginToken, userInfo.channel));
// ログインが成功したら、IAP の初期化に進みます
initializeIAP();
}
// ステップ 2 が失敗したら、 エラーメッセージとリソースを表示します
public void OnLoginFailed(string message)
{
Debug.Log("Login failed.");
}
}
}
ノート: 上記のサンプルコードでは、ログイン処理の可能なすべての手順を説明するすべての関数を使用する必要があります。ただし、各関数内で呼び出されるアクションを選択することができます。この例では、アクションコールの代わりにデバッグテキストが表示されます。 また、OnLogin() メソッドが Unity IAP 初期化関数を開始します。
次に、ログインリスナーと AppStoreSettings アセットに保存されているアプリケーション認証情報を使用して、Xiaomi API を初期化します。
void Awake()
{
// SamleLoginListener クラスでログインリスナーを作成します
SampleLoginListener loginListener = new SampleLoginListener();
// (SampleLoginListener クラスの) initializeIAP アクションを (次のステップで定義する) 関数に紐づけします
loginListener.initializeIAP = ConfigureIAP;
// AppStoreSettings Asset にアクセスして、保存された認証情報で AppInfo を生成します。AppStoreSettings クラスは AppStoreSupport ライブラリの一部です。
AppStoreSettings appStoreSettings = Resources.Load<AppStoreSettings>("AppStoreSettings");
// 認証情報とログインリスナーを使用して Xiaomi を初期化します
UnityEngine.Store.StoreService.Initialize(appStoreSettings.getAppInfo(), loginListener);
}
プロジェクトの AppStoreSettings アセットを起動する際に、getAppInfo()
関数は Mi Game Center store 初期化処理の認証情報データを返します。
最後に、設定ビルダーを使い、IAP Catalog のプロダクトデータを Xiaomi 用に変換します。それから、Unity IAP の初期化 を行います。
// 設定ビルダーはストアリスナーを必要とします
// IStoreListener 抽象クラスを実装してストアリスナーを作成します
class StoreListener : IStoreListener
{
private IStoreController controller;
private IExtensionProvider extensions;
// 購入のための Unity IAP の準備が整ったら、呼び出されます
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
this.controller = controller;
this.extensions = extensions;
}
// インターネットが使用できない場合は、これを呼び出すことはできません
// インターネットが使用可能になるまで Unity IAP は初期化を試みます
public void OnInitializeFailed(InitializationFailureReason error)
{
}
// 購入が終了したとき、または、Unity IAP に回復不可能な初期化エラーが発生したときに呼び出されます
// OnInitialized() の後で、いつでも呼び出されることがあります
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
return PurchaseProcessingResult.Complete;
}
// 購入が失敗すると呼び出されます
public void OnPurchaseFailed(Product i, PurchaseFailureReason p)
{
}
}
// プロダクトを定義するために設定ビルダーを実行します
public void ConfigureIAP()
{
// IAP Catalog からプロダクトを読み込みます
var module = StandardPurchasingModule.Instance();
var builder = ConfigurationBuilder.Instance(module);
var catalog = ProductCatalog.LoadDefaultCatalog();
// Catalog 内のプロダクトをループで走査し、メタデータをビルダーに抽出します
foreach (var product in catalog.allProducts)
{
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);
}
}
// StoreListener クラスに基づいて、ストアリスナーを作成します
StoreListener storeListener = new StoreListener();
// Unity IAP を初期化します
UnityPurchasing.Initialize(storeListener, builder);
}
設定ビルダーは Product IDs と Product Types を参照して、Price、Type、Title、Description などのメタデータを自動的に収集します。ビルダーは、 IAP Catalog の IAPProductCatalog.json ファイルと Unity IAP 初期化中にインスタンス化された builder
オブジェクトを使用します。
IAP の実装方法の詳細は、以下のドキュメントを参照してください。
AppStoreSettings アセットインターフェース でテストモードに切り替えて、Xiaomi 以外の Android デバイスでゲームの購入フローをテストします。Unity Channel には、テストモードを切り替えるための API も用意されています。
AppInfo.debug = true;
Unity Channel ラッパーは AppInfo
クラスを含み、データを Xiaomi SDK に渡します。 アプリケーションを Xiaomi に提出するには、テストモードを有効にする必要があります。テストモードでは、テスト目的でクレジットカードの要件を回避します。テストモードを有効にしたら、プロジェクトをビルドし、成果物の APK ファイルを Android デバイスで起動します。
実際の購入をテストするには、テストモードを false に設定し、Xiaomi デバイスでテストします。実際の購入には Xiaomi Mi Pay アカウント と、中国元などの適切な通貨が必要です。
このセクションでは Unity IAP SDK を使用して Unity エディターによってゲームを送信する手順を説明します。
Unity エディターで、Window > Unity IAP > Android > Target Xiaomi Mi Game Pay の順に選択して、Mi Game Pay をターゲットにするように Unity IAP を設定します。これにより、Xiaomi はゲームの APK の次のビルドに使用できます。また、ランタイムに Xiaomi Mi Pay のネイティブの請求 API を使用するように Unity IAP に通知する設定ファイルを作成します。
Xiaomi にプッシュする前に、ゲームをビルドするテストを行います。ローカルで、または Unity Cloud Build で Android ビルドターゲットを使ってプロジェクトを設定してテストしてください (Cloud Build を参照)。
エディターの Unity Services ウィンドウで Cloud Build を有効にします (Cloud Build 実装 に関するドキュメントを参照)。
以下の方法のうちの 1 つを使って、ビルドを Cloud Build の History にアップロードします。
エディターから
Unity Cloud Build Developer Dashboard から
以下の方法のうちの 1 つを使って、設定したビルドを Xiaomi Developer Portal にプッシュします。
エディターから
Cloud Build Services ウィンドウでビルド履歴のタイムラインから必要なビルドを探し、Push to Xiaomi を選択します。 プッシュすることを確認します。
Unity Cloud Build Developer Dashboard から
ノート: プロジェクトが属する Organization (組織) の所有者のみが Xiaomi にデプロイすることができます。
UDN 認証情報は、Xiaomi Unity Developer Portal にアップロードされたプロジェクトへのアクセスを許可します。初めてログインするときは、Projects リストに進む前に、Xiaomi の TERMS AND CONDITIONS (利用規約) に同意する必要があります。それから、提出するプロジェクトを検索します。始めにステータス Version1.0: Draft が表示されます(下図の赤枠表示部分)。プロジェクトの処理全体にわたるステータス変更に関する送信ログを表示するには、クリップボードアイコンを選択します。ステータスのリンクを選択して、プロジェクトのメタデータの詳細を表示します。
以下の図のように表示されます。
Mi Game Center に表示されるテキストの情報です。
このセクションでは、Mi Game Center に表示されるモバイルとタブレットデバイスが表示されます。以下のガイドラインに注意してください。
準備が整ったら、Submit を選択してゲームをレビューを受けるために Xiaomi に提出します。プロジェクトのステータスの表示が In review に変わります。プロジェクトのレビュー中、その詳細を編集することはできません。レビューをキャンセルしてプロジェクトの詳細を変更するには、プロジェクトの詳細を開き、Cancel を選択します。
アプリを公開するには ISBN パブリケーションライセンスが必要です。Xiaomi は、国家新聞出版広電総局(SAPPRFT) による ISBN の承認プロセスを包括的にサポートします。
Xiaomi は、SAPPRFT がすべてのゲームを承認することを保証するわけではありません (SAPPRFT 提出ガイドライン を参照)。 ストアや国の規制遵守ルールを満たすためには、ゲームの変更が必要になる可能性があります。
中国政府の承認を受けるために、提出する際には以下のヒントを考慮してください。
提出を完了する前に、以下の手順に従って Xiaomi がもっとも最近の IAP プロダクトカタログをもつことを確認します。
Xiaomi が承認を示すと、プロジェクトステータスは Approved に変更され、以下の認証情報を受け取ります。
AppStoreSettings アセット または 初期化のスクリプト にこれらの認証情報の値を入力し、Test Mode を false
に設定します。ゲームの新しいビルドを作成し、以前のようにこのビルドを Xiaomi にプッシュします。
Xiaomi は電子メールで開発者契約を提供します。契約書に署名すると、Xiaomi は政府の承認プロセスをサポートします。Xiaomi は、ゲームが ISBN ライセンスと、Mi Game Center でパブリッシュする許可を取得すると、それを開発者に通知します。
Xiaomi のコンテンツレビュープロセスは、変更が必要でない限り、通常、1–2 営業日かかります。 しかし、政府の承認プロセスとライセンスの発行には 4–8 か月かかることがあります。審査プロセスの詳細については、Unity-Xiaomi パートナーページ の よくある質問 セクションを参照してください。