「Unity/課金/サンプル」の版間の差分
(→iOSの場合) |
(→全部コードで処理する場合) |
||
行77: | 行77: | ||
foreach (var product in controller.products.all) | foreach (var product in controller.products.all) | ||
{ | { | ||
− | Debug.Log(" | + | Debug.Log("Title=" + product.metadata.localizedTitle); |
Debug.Log("Description=" + product.metadata.localizedDescription); | Debug.Log("Description=" + product.metadata.localizedDescription); | ||
Debug.Log("PriceString=" + product.metadata.localizedPriceString); | Debug.Log("PriceString=" + product.metadata.localizedPriceString); | ||
行118: | 行118: | ||
public void OnPurchaseClicked(string productId) | public void OnPurchaseClicked(string productId) | ||
{ | { | ||
+ | Debug.Log("OnPurchaseClicked productId=" + productId); | ||
if (controller != null) | if (controller != null) | ||
{ | { | ||
行124: | 行125: | ||
} | } | ||
} | } | ||
+ | </pre> | ||
+ | |||
+ | ====処理ログ==== | ||
+ | 07-12 22:25:15.646 19383 19444 I Unity : UnityIAPManager OnInitialized | ||
+ | 07-12 22:25:15.664 19383 19444 I Unity : Title=This is stone10 (Flick Typing input practice app) | ||
+ | 07-12 22:25:15.681 19383 19444 I Unity : Description=This is stone10!! | ||
+ | 07-12 22:25:15.698 19383 19444 I Unity : PriceString=¥100 | ||
+ | 07-12 22:25:17.046 19383 19444 I Unity : OnPurchaseClicked productId=stone10 | ||
+ | |||
+ | 07-12 22:25:27.994 19383 19444 I Unity : PurchaseProcessingResult This is stone10 (Flick Typing input practice app) | ||
+ | 07-12 22:25:28.019 19383 19444 I Unity : PurchaseProcessingResult | ||
</pre> | </pre> | ||
2020年7月13日 (月) 00:55時点における版
目次
都度購入
Androidの場合
- GooglePlayDeveloper/指定アプリ/ストアで表示/アプリ内サービス/管理対象のアイテム/管理対象のアイテム作成
- プロダクトidを(stone10)などで入れる(storeと連携してないと、購入ボタンを押しても商品が無いとなる)
- 有効にするを選択して、有効になっていることを確認
日本語を追加した場合は、日本語の説明も入れないと、保存されないので気を付ける。
iOSの場合
- ituneconnect管理画面/app内課金/管理/+をクリック
- 消耗型を選択し、id(stone10)などを入れてく
- 審査用の画像は( 640 x 920)で登録すればよい
- ituneconnectから契約を選択して、有料Appの利用規約に同意
- 口座情報を入れる(ゆうちょなら"Japan Post Bank"で"9900-[口座番号]"
- 納税にアメリカ納税情報を入れる
- 納税情報を入れたところOnInitializeFailed(NoProductsAvailable)の失敗イベントが呼ばれなくなり、正常にOnInitializedが呼ばれるようになった^^
"Type of Income"は"Income from the sale of applications" Capacity in which acting欄に "Self"
参考:https://re35.org/release-ios-app/
参考:http://lab.studioheat.com/?p=335
定額課金
Androidの場合
- GooglePlayDeveloper/指定アプリ/ストアで表示/アプリ内サービス/定期購入
- プロダクトidを(com.example.hogeapp.monthly)などで入れる(storeと連携してないと、購入ボタンを押しても商品が無いとなる)
- 有効にするを選択して、有効になっていることを確認
日本語を追加した場合は、日本語の説明も入れないと、保存されないので気を付ける。
iOSの場合
- ituneconnect管理画面/app内課金/管理/+をクリック
- 自動更新サブスクリプションを追加(自動更新サブスクリプションがない場合は、ユーザ権限のとこの有料Appの契約とアメリカ納税情報が入ってるか確認する)
Unityから課金用ボタン設定
課金の記述方法として以下2パターンがある
- 全部コードで処理する方法
- コードレス処理がある。
全部コードで処理する場合
- 以下課金呼び出しコードを記述(例:stone10はproductID)
UnityIAPManager manager; manager = new UnityIAPManager(); manager.OnPurchaseClicked("stone10");
UnityIAPManager.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Purchasing; public class UnityIAPManager : IStoreListener { private IStoreController controller; private IExtensionProvider extensions; public UnityIAPManager() { var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); builder.AddProduct("stone10", ProductType.Consumable); UnityPurchasing.Initialize(this, builder); } /// <summary> /// Unity IAP が購入処理を行える場合に呼び出されます /// </summary> public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { this.controller = controller; this.extensions = extensions; Debug.Log("UnityIAPManager OnInitialized"); foreach (var product in controller.products.all) { Debug.Log("Title=" + product.metadata.localizedTitle); Debug.Log("Description=" + product.metadata.localizedDescription); Debug.Log("PriceString=" + product.metadata.localizedPriceString); } } /// <summary> /// Unity IAP 回復不可能な初期エラーに遭遇したときに呼び出されます。 /// /// これは、インターネットが使用できない場合は呼び出されず、 /// インターネットが使用可能になるまで初期化を試みます。 /// </summary> public void OnInitializeFailed(InitializationFailureReason error) { Debug.Log("OnInitializeFailed"); } /// <summary> /// 購入が終了したときに呼び出されます。 /// /// OnInitialized() 後、いつでも呼び出される場合があります。 /// </summary> public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) { Debug.Log("PurchaseProcessingResult " + e.purchasedProduct.metadata.localizedTitle); return PurchaseProcessingResult.Complete; } /// <summary> /// 購入が失敗したときに呼び出されます。 /// </summary> public void OnPurchaseFailed(Product i, PurchaseFailureReason p) { Debug.Log("OnPurchaseFailed product=" + i.ToString()); if (p == PurchaseFailureReason.PurchasingUnavailable) { // デバイス設定で IAP が無効である場合があります。 } } public void OnPurchaseClicked(string productId) { Debug.Log("OnPurchaseClicked productId=" + productId); if (controller != null) { controller.InitiatePurchase(productId); } } }
処理ログ
07-12 22:25:15.646 19383 19444 I Unity : UnityIAPManager OnInitialized 07-12 22:25:15.664 19383 19444 I Unity : Title=This is stone10 (Flick Typing input practice app) 07-12 22:25:15.681 19383 19444 I Unity : Description=This is stone10!! 07-12 22:25:15.698 19383 19444 I Unity : PriceString=¥100 07-12 22:25:17.046 19383 19444 I Unity : OnPurchaseClicked productId=stone10
07-12 22:25:27.994 19383 19444 I Unity : PurchaseProcessingResult This is stone10 (Flick Typing input practice app) 07-12 22:25:28.019 19383 19444 I Unity : PurchaseProcessingResult </pre>
全部コードで処理する場合(その2)
こちらを使ってもいける。
https://gist.github.com/YoshihideSogawa/f7c118127ce50e593a5b4a12e8426d6e
- 上記をPurchaser.csで保存する
- Unityのヒエラルキーに新規Objectを作成し、適当な名前で、Purchaser.csをアタッチする
コードレスの場合
(未完成です)
- unityメニュー/windows/UnityIAP/CreateIAPButtonでボタンを作成する
- unityメニュー/windows/IAP Catalogをクリックし以下のような詳細データを入れる
id:monthlyなど type:Subscription(自動課金)
- 作ったbuttonのプロパティのproductIdに先ほどいれたid(monthlyなど)いれる
- Assets/Plugins/UnityPurchasing/script/CodelessIAPStoreListener.csにイベントが発生するので確認する
参考
コードレスの場合の参考
http://it-happens.info/unity-purchase/
全部コードの場合の参考
https://docs.unity3d.com/ja/current/Manual/UnityIAPSettingUp.html
https://gist.github.com/YoshihideSogawa/f7c118127ce50e593a5b4a12e8426d6e