ーーーーーーーーーーーーーー
↑ 前回Androidで課金を実装してみたら意外と簡単だったので、調子に乗ってiOSのほうでもやってみたらこっちは簡単ではありませんでした。
まず途中まではAndroidと一緒です。
インスペクター右上のServicesタブをクリックするとプロジェクトID作れとか言われるのでcreateをクリック。
In-App-Purchasing をオンにする。
Enableをクリック。
13歳以下をターゲットにしてるならチェック。Continue
なんか色々エラーを吐かれるけどアンドロイドで経験済みなのでもう気にしない。
window --> Package Manager見て2.2.2以下ならOK。
----------------------------------------------2022.1.17 追記
Unityのバージョン上げると、IAPパッケージも上がります。2.2.2以上なら▶をクリックして、IPAパッケージを2.2.2以下にダウングレードすればOK。
----------------------------------------------2022.1.17 追記
Importをクリック。行け
import終わるとpluginsにunityPurchasing いうのができる。
Create IAP Buttonで課金ボタンを作るよ。これを押すと課金されて私の私腹が肥えるのです。ヒッヒッヒ。
課金ボタンを配置。このアプリは学習アプリで無料で使えるけれど、もっとたくさんの問題を勉強したい人は課金ボタン押してね!っていうことなのです。
プロダクトIDは適当でいいそうです。アンドロイドは777にしたのでiOSはスリーナインにしてやろう。
Typeでどんな課金にするのか決める。
薬草みたいに何度も購入するようなアイテムだとConsumable。
広告消すみたいに1回購入したらずっと効果が続くみたいなのはNon Consumable。
subscriptionは月額課金みたいなの。
Locale はJapanese。
title はアプリストアに表示される製品の名前。
description はこのアイテムの説明。
priceは価格。iOSはドルしか選択できない模様。
Automatically initialize UnityPurchasingはよく分からんけど自動的に初期化するそうです。recommendedでお勧めされてるのでチェックを入れておく。
アンドロイドはこれでOKやったけど、iOSのほうはSelect screenshotいうところから購入画面のスクショ画像を選択しないといけないみたい。面倒ね。それとApple SKU とApple Team IDいうところに入力しないといけないそうだ。
Apple SKU いうのは自由に決めて良いそうです。でも後でAppStoreConnectのほうでアプリ提出ページ作るときに、ここで決めたSKUと同じのを入力しないといけないのでメモしておこう。ここのSKUをhogeにしたらAppStoreConnectのSKUもhogeにする。
Apple Team IDはApple Developer ウェブサイトで確認できます。私はXcodeのSigning Certificate欄に表示されているIDがそうなんだろって思ってましたが、ここのIDは違うみたい。ちゃんとApple Developerのページで確認しましょう。
課金画面のスクショはテスト課金の時に撮ろうと思ってたので今はまだないのです。Unityエディターで課金ボタン押した時の画面のスクショを使うことにする。あとで差し替える。そのダミースクショをResourcesに放り込んでおいて、Select a screenshot をクリックしてそれを選択する。
最後にCatalog Export からApple XML Deliveryを選択して保存する。
Product ID にさっきのカタログがいるので選択。
この課金ボタンを押した時の処理を書く。
public class Mains : MonoBehaviour { //課金しているかどうか判別 int KakinFLG = 0; //UIを見せたり隠したりするのに使う。スケール0にさせて隠す GameObject ActPanel; void Start() { //課金状況データを読み込む KakinFLG = PlayerPrefs.GetInt("KakinData", 0); //課金されてるなら課金ボタンを消しとく if (KakinFLG == 2) { ActPanel = GameObject.Find("BuyButton"); ActPanel.transform.localScale = Vector3.zero; //見えなくしておく } } //-------------------------------------------------------------課金ボタン押した時の処理 public void PushKakin() { //課金フラグ立てる KakinFLG = 2; //課金データに課金されたことを記録 PlayerPrefs.SetInt("KakinData", KakinFLG); //課金ボタンさんさようなら ActPanel = GameObject.Find("BuyButton"); ActPanel.transform.localScale = Vector3.zero; //見えなくしておく } //-------------------------------------------------------------課金ボタン押した時の処理
あとは課金フラグが立ってるかどうかで処理を判別すればOK。
if(KakinFLG==0){広告表示とか}
if(KakinFLG==2){広告非表示とか}
スクリプト書いたらそれをボタンに反映させましょう。On Purchase Complete の+クリック。
Noneって所にさっきのスクリプトをアタッチしてるオブジェクトD&D。
Functionのところにさっき書いたPushKakin()って関数があるのでそれ選択したらOK。
アンドロイドではここで課金ボタン押して動作テストしたんやけど、iOSではリストアいうボタンを作らんとアカンそうです。リストアって何なのかよく分からないけど、なんか間違ってアプリ消したりしたときに課金した情報を復活させたりするそうです。
windowからリストア用のボタンを作りましょうかね。
このRestoreボタンは、課金ボタンと同じシーンに配置しないといけないそうですよ。
Product IDにさっき作ったカタログ(999)があるのでそれを選択。Button TypeでRestoreを選択。これを選択したらなんかProduct IDの項目が消えたので別にカタログ(999)を選択しなくてもいいかもしれない。でもUnityマニュアルの画像ではカタログ選択してたので念のため選んでおいたのよ。
ここで課金ボタンの動作テスト。課金ボタンを押すとこんな画面が出てきてBuyを押すとPushKakin()関数が実行されました。
ちなみにRestoreボタンを押してみたらWindowsEditorではこの機能サポートしてないよってエラーが出るのね。
アプリの設計はここまでで、次回はXcodeでビルド、AppStoreConnect へアップロード、TestFlightで課金テストをやりまーす。
ーーーーーーーーーーーーーーーーーーーーーーー