18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityIAP IAPボタンを用いた非消費型アイテムのリストア対応

Posted at

経緯

iTunes Connectで申請が通りましたので、
UnityのIAPボタンを用いた非消費型アイテムのリストアの対応方法について記載したいと思います。

環境

  • Unity5.5.0f3
  • Unity IAP 1.9.3

iOSのリストアはまだ要コーディング。

先にGoogle Playの方についてですが、こちらに関してはノーコーディングで作成することができました。
iOSについてはリストア機能をボタン含め用意しなければならないため、その点についてのみ追記する必要があります。

リストアボタン実装時の注意点

リストアボタン実装時の注意点として、復元ボタンと同一のScene上にリストアする必要のあるIAPボタンが実装されている必要があります。
もしも同一シーン上にリストアする必要のあるIAPボタンが実装されていない場合は、画面外で良いので用意してやってください。
その際、ProductIDとOnPurchaseCompleteだけで良いので、実際に実装しているボタンと同じ値を使用してください。

リストアボタンの実装

リストアボタンのプログラムについては、下記のように実装いたしました。
私の場合は非消費型アイテムが2つありましたので、2つのアイテムに対してリストアを実行しています。

RestoreButton.cs
using UnityEngine;
using UnityEngine.Purchasing;

public class RestoreButton : MonoBehaviour {

    private IAPButton itemX;
    private IAPButton itemY;

    public void Start()
    {
        //IAPボタンを実装しているGameObjectを探して、格納する。
        itemX = GameObject.Find("XXXXButton").GetComponent<IAPButton>();
        itemY = GameObject.Find("YYYYButton").GetComponent<IAPButton>();
    }

    public void RestoreButtonClicked()
    {
        // iPhone/OSXでない場合
        if (Application.platform != RuntimePlatform.IPhonePlayer &&
            Application.platform != RuntimePlatform.OSXPlayer)
        {
            //iPhone/OSXでない旨のダイアログを表示するとベター
            return;
        }
        //サーバに接続されていない場合
        if (Application.internetReachability == NetworkReachability.NotReachable)
        {
            //サーバに接続されていない旨のダイアログを表示するとベター
            return;
        }
        // リストアを実行する。
        itemX.RestoreProduct();
        itemY.RestoreProduct();
    }
}

iPhone/OSXでない場合の対応を実施していますが、そもそもリストアボタンをiOS以外では表示しないようにしたほうが良いです。
上記でIAPButton.cs内のRestoreProduct()関数を実行していますが、こちらも実装する必要があります。

IAPButton.csにiOS用リストア機能追加

(Unity公式)リストアのトランザクション
iOSのリストアをしたい場合は上記URLのプログラムを基にすれば良いのですが、
ではどう実装するのよということで、今回は下記のように実装しました。

IAPButton.cs
    //ここから追加
    public void RestoreButtonClicked()
    {
        //一応OnInitialized失敗時対応を入れておく。
        if(controller == null)
        {
            return;
        }
        extensions.GetExtension<IAppleExtensions>().RestoreTransactions(result =>
        {
            if (result)
            {
            }
        });
    }
    //ここまで追加
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        this.controller = controller;
        this.extensions = extensions;   
    }

まず、公式サイトに記載されたリストアのトランザクションを実行する関数をIAPButtonStoreManagerクラス内の関数として作成する必要があります。
また、IAPButtonクラス内にあるIAPButtonStoreManagerクラスは外部から呼び出せないため、RestoreButton.csから呼び出すために、IAPButtonクラスの関数として下記を追加する必要があります。

IAPButton.cs
    void PurchaseProduct()
	{
		Debug.Log("IAPButton.PurchaseProduct() with product ID: " + productId);
		IAPButtonStoreManager.Instance.InitiatePurchase(productId);
	}
    //ここから追加
    public void RestoreProduct()
    {
        IAPButtonStoreManager.Instance.RestoreButtonClicked();
    }
    //ここまで追加

リストア成功時には、OnPurchaseCompleteが実行されます。
なお、リストア失敗時には、OnpurchaseFailedは実行されません。

##申請の通ったアプリはこれです

s_C3PXI1OVMAATuXL.jpg

ぷよぷよシミュレータのようなものです。
iOS:https://itunes.apple.com/jp/app/id1195565268
google play:https://play.google.com/store/apps/details?id=com.feath.FourLinksSimulator

18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?