課金を行う際に、値段やタイトルなどアプリに組み込むとタイトルの変更や為替の変動による価格の変更に対応するためアプリの再申請が必要になってしまう。
そもそも世界で売る場合は使用しているマーケットの国がわからないので金額が分かりませんね。
なのでマーケット(iTunes Store/Google Play)から直接取得した方がイイ。
SOOMLAだとまずはイベントのリスニング
StoreEvents.OnSoomlaStoreInitialized += this.OnSoomlaStoreInitialized;
StoreEvents.OnMarketItemsRefreshFinished += this.OnMarketItemsRefreshFinished;
StoreEvents.OnMarketItemsRefreshFailed += this.OnMarketItemsRefreshFailed;
this.storeAssets = new StoreAssets();
SoomlaStore.Initialize(this.storeAssets);
そして、初期化完了後にマーケットの情報を取得しに行く。
void OnSoomlaStoreInitialized() {
#if UNITY_EDITOR
this.OnMarketItemsRefreshFinished(new List<MarketItem>());
#else
SoomlaStore.RefreshMarketItemsDetails();
#endif
}
取得ができたら自分のストアの設定の情報を取得したMarketItemで上書き。
void OnMarketItemsRefreshFinished(List<MarketItem> marketItems) {
// ストアの情報を取得したMarketItemで上書きさせていく
foreach (MarketItem item in marketItems) {
foreach (VirtualGood good in this.storeAssets.GetGoods()) {
PurchaseWithMarket purchaseType = good.PurchaseType as PurchaseWithMarket;
if (purchaseType.MarketItem.ProductId == item.ProductId) {
purchaseType.MarketItem = item;
}
}
StoreEvents.OnSoomlaStoreInitialized -= this.OnSoomlaStoreInitialized;
StoreEvents.OnMarketItemsRefreshFinished -= this.OnMarketItemsRefreshFinished;
StoreEvents.OnMarketItemsRefreshFailed -= this.OnMarketItemsRefreshFailed;
}
ここは…こんな感じでいいのかしら…?
手動でやるのかな?
ストアの情報の取得は稀に失敗することもあるので、何度かリトライさせる必要もありそうです。