Unity 非消費型課金アイテム(広告削除など)の実装

UnityIAPのインポート

Package ManagerからIn App Purchasingをインポートします。

IAPcatalogの設定

エディター上で商品設定を行います。
後にストアに商品を設定する時は、このカタログのIDと同じにする必要があります。
※Unityからエクスポートしてストアにインポートも可能

  • ID
    商品のIDを入力(全部小文字)
  • Type
    非消費型なのでNonConsumableを選択
  • Locale
    デフォルトの国
  • Title
    商品名を入力
  • Description
    商品の説明を入力
  • Price(Google)
    GooglePlayで販売する価格を入力
  • PriceTier(Apple)
    Appleストアで販売する価格を選択

課金機能の実装

今回は、カジュアルアプリによくある広告を非表示にする課金をコードレスで実装していきます。
コードレスといっても課金機能の部分がコードレスというだけで、基本となるコードは必要です。

まずPurchaseManager.csというスクリプトを作成して、課金に関する処理を記載します。

using UnityEngine;
using System.Collections;

public class PurchaseManager : MonoBehaviour
{

    public void PurchaseRemoveAds()
    {        
        Debug.Log("広告削除を購入成功した時の処理 ");
    }

    public void FailedPurchaseRemoveAds()
    {        
        Debug.Log("広告削除を購入失敗した時の処理");                
    }

    public void TransactionsResult(bool result, string mess)
    {
        StartCoroutine(RestoreCheck());
    }

    private IEnumerator RestoreCheck()
    {

#if UNITY_ANDROID && !UNITY_EDITOR

        //Androidの場合は自動リストアされるので何もしない
        yield break;

#endif

        yield return new WaitForSeconds(1f);

        if (true)//購入状態チェックしてtrueかどうか
        {
            //購入復元できている時は自動でOnPurchaseCompleteが呼び出されるのでここでは何もしない
        }
        else
        {
            //購入復元できていない時の処理を記載。
            
        }

    }

購入処理を行うSceneにPurchaseManagerを作成して、IAP Buttonを追加します。

ProductIDにIAPカタログで作成したIDを選択します。

OnPurchaseCompleteのイベントにPurchaseManagerのPurchaseRemoveAds()を設定します。

OnPurchaseFailedのイベントにPurchaseManagerのFailedPurchaseRemoveAds()を設定します。

OnProductFetchedは空のままでOKです。
Buttonにはヒエラルキー上にUIのPurchaseButtonを作成して、それをアタッチします。
そうするとPurchaseButtonが押された時にIAP Buttonの方の処理が走ります。

これでPurchaseButtonを押すと、端末の購入処理が呼び出されるようになりました。
対象となる商品はProductIDに設定された商品です。
購入に成功すると、PurchaseRemoveAds()が呼ばれます。
失敗すると、FailedPurchaseRemoveAds()が呼ばれます。

リストア処理

ユーザーが購入した後にゲームをアンインストールして、再インストールした時などに
購入状態を復元してあげるリストア機能を実装する必要があります。

PurchaseManagerにIAP Buttonを追加して、同じProductIDを選択したら
このIAP Buttonをリストアとして使うためにButtonTypeをRestoreに変更します。

Restore設定したIAP ButtonのOnTransactionsRestoredには
PurchaseManagerのTransactionsResultを設定します。

OnProductFetchedは空のままでOKです。
Buttonにはヒエラルキー上にUIのRestoreButtonを作成して、それをアタッチします。
そうするとRestoreButtonが押された時にIAP Buttonの方の処理が走りリストアされ
OnTransactionsRestoredのイベントがコールバックします。

リストアの処理は、GoogleとAppleで違いがあり、Googleの場合は
自動でリストア処理が走るのでリストアボタンを設置しません。
このため起動している端末がどちらのなのかを判定して、Androidだったら
リストアボタンを非表示にする処理は自分で作らないといけません。
iOSの場合は、自動リストア処理は走らないので、ユーザーが自分で
リストアボタンを押さない限り、リストアされません。

なお、リストア成功すると、課金成功時と同じOnPurchaseCompleteが呼ばれます。
リストアの成否によって何か処理をする場合は、OnTransactionsRestoredのBooleanを
成否判定してそれぞれ処理を記載しましょう。

ストア側の設定(GooglePlay)

ストア側に同じProductIDの商品を登録します。

まずはGooglePlayから説明します。
GooglePlayの場合、先にビルドをアップしないと課金アイテムを登録できないので
審査が不要な内部テストにアップロードしておきましょう。

アプリ内アイテムから新規商品を追加します。

アイテムIDにはIAPカタログで作成したProductIDを設定します。
名前と説明もIAPカタログと同じです。IAPカタログからインポートすると早いです。

「価格を設定」を押して販売価格を設定します。
複数数量はチェックしません。

日本円でいくらかを手動で設定します。
海外で購入される際の価格は為替レートで自動的に変換されますので、円だけ設定でOKです。

これで商品が追加できたので、実機テストでPurchaseButtonを押してみましょう。
GooglePlayの購入ポップが表示されれば成功です。

ストア側の設定(AppStore)

AppleStoreConnectでアプリを登録後、そのアプリのアプリ内課金メニューから商品を登録できます。

種類は広告削除という買い切り商品なので非消耗型を選択。
参照名は売上レポートで表示される名称です。
製品IDはIAPカタログのProductIDを入力してください。

作成が完了すると、審査前の下書き状態で登録されます。
参照名がリンクになっているので、押して詳細設定します。

配信する国と価格を設定します。

配信国はデフォルトだとすべてなので、配信しない国や地域はチェック外しましょう。

商品の価格を設定します。
価格を選択すると、価格のリストが表示されるので、そこから選びます。
リストの最後に「他の価格を確認」があり、それを押すことで
価格の刻みが細かくなったリストが表示され、そこから選ぶことも可能です。

AppStoreに課金アイテムを追加する際に審査が必要になります。
スクリーンショットは、購入ボタンが表示されている画面でいいと思われます。
メモには、どういうアイテムなのか説明しておけばよさそうです。
なお、スクリーンショットはAppleの指定サイズを守らなければアップできませんので、
公式に掲載されているどれかのサイズでアップしてください。

Screenshot specifications - Reference - App Store Connect - Help - Apple Developer
Screenshot size

アプリ内課金アイテムの追加が終わると、実機でテストできるようになりますので
ビルドをストアにアップして、TestFlightで配信して実際に購入できるか試しましょう。
なお、課金アイテムの審査はゲームの審査と併せて行われます。

以上です。

コメント

タイトルとURLをコピーしました