2016年10月31日にリリースされたUnity IAP Store package 1.9から、コードを書かずにアプリ内課金を行えるようになりました。



- [Beta] Codeless IAP tools. Implement IAP by adding IAP Buttons to your project (Window > Unity IAP > Create IAP Button) and configure your catalog of IAP products without writing a line of code (Window > Unity IAP > IAP Catalog). Preliminary documentation is available [here](https://docs.google.com/document/d/1597oxEI1UkZ1164j1lR7s-2YIrJyidbrfNwTfSI1Ksc/edit).

Unity IAP Store package 1.9 is now available

ドキュメントはCodeless IAP Getting Started Guideにあります。

ServicesからUnity IAPを1.9に更新すると、ウィンドウメニューに、Window -> Unity IAP -> Create IAP Buttonが追加されます。選択すると、IAP Button(Script)の追加された、uGUIのボタンが配置されます。

shop

次に、IAP Catalogに、iTunes Connectで設定した課金アイテムのIDを設定します。エディターで実行すると、Fake Storeの購入ダイアログが出ます。

editor

課金が成功すると、On Purchase Completeが、課金がキャンセルされると、On Purchase Failedが呼ばれます。

次に、実機で実行してみたのですが、ボタンを押しても反応がありません。Unity Cloud Buildでは詳細なエラーが分からないので、Xcodeプロジェクトを書き出してみた所、Add the In-App Purchase feature to your App IDというエラーが出ていました。


unity_iap


どうやら、iTunes ConnectのConrtacts、Tax、Bankingを登録しないと、課金APIのテストはできないようです。


You will not be able to test any StoreKit functionality until you have an iOS Paid Applications contract – StoreKit calls in your code will fail until Apple has processed your Contracts, Tax, and Banking information.

Part 1 - In-App Purchase Basics and Configuration


登録が終わったら、実機テストをします。iTunesConnectでの審査前でもテストは可能です。ただし、iOSでの実機テストでは、SandBoxテスターのアカウントでないと、以下のようなエラーで失敗します。



2017-01-06 16:46:29.171848 appid[261:19234] UnityIAP:Requesting product data...
2017-01-06 16:46:30.103910 appid[261:19234] UnityIAP:Received 1 products
2017-01-06 16:46:30.144066 appid[261:19234] UnityIAP:No App Receipt found
2017-01-06 16:46:30.150693 appid[261:19234] UnityIAP:addTransactionObserver
IAPButton.PurchaseProduct() with product ID: gacha1
UnityEngine.Purchasing.IAPButton:PurchaseProduct()
UnityEngine.Events.InvokableCallList:Invoke(Object[])
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchPress(PointerEventData, Boolean, Boolean)
UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchEvents()
UnityEngine.EventSystems.StandaloneInputModule:Process()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

2017-01-06 16:46:30.310534 appid[261:19234] UnityIAP:PurchaseProduct: gacha1
2017-01-06 16:46:30.331487 appid[261:19234] UnityIAP:UpdatedTransactions
purchase({0}): gacha1
UnityEngine.Events.InvokableCallList:Invoke(Object[])
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchPress(PointerEventData, Boolean, Boolean)
UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchEvents()
UnityEngine.EventSystems.StandaloneInputModule:Process()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

2017-01-06 16:46:31.806437 appid[261:19234] UnityIAP:UpdatedTransactions
2017-01-06 16:46:31.806652 appid[261:19234] UnityIAP:PurchaseFailed: 0
onPurchaseFailedEvent({0}): gacha1
UnityEngine.Purchasing.PurchasingManager:OnPurchaseFailed(PurchaseFailureDescription)
UnityEngine.Purchasing.AppleStoreImpl:ProcessMessage(String, String, String, String)
UnityEngine.Purchasing.Extension.UnityUtil:Update()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

IAPButton.OnPurchaseFailed(Product UnityEngine.Purchasing.Product, PurchaseFailureReason Unknown)
UnityEngine.Purchasing.IAPButton:OnPurchaseFailed(Product, PurchaseFailureReason)
UnityEngine.Purchasing.IAPButtonStoreManager:OnPurchaseFailed(Product, PurchaseFailureReason)
UnityEngine.Purchasing.AppleStoreImpl:ProcessMessage(String, String, String, String)
UnityEngine.Purchasing.Extension.UnityUtil:Update()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)


iTunes ConnectでSandBoxテスターを作成する際は、gmailのエイリアスを使うと便利です。iPhoneの設定のiTunesからApple IDをログアウトした後、テストアプリを起動、IAP Buttonをタップするとログインを要求されるので、SandBoxテスターとしてログインします。これで、課金のテストができます。

参考サイト:Unity IAPを使ってて思ったこと審査前にテスト課金をする