基本的には上記記事を信じれば大体解決します。本当に感謝。
Codeless IAPは非推奨だと紹介している所もあるけれど問題無いと信じて進む。
IAP側のコールバック処理(OnPurchaseCompleteなど)が終了する前にIAPButtonをSetActive(false)にするとエラーが発生する。Coroutineなどで1秒程度(?)待機してからSetActive(false)を実行する。
実機での購入/リストアテストでは、Android側が厄介。
Androidで課金アイテムを追加&実機で試す為には、内部テスト(またはクローズドテスト)のアップロードが必須。
テスト購入の設定のためには「Google Play Console」のトップから「設定>ライセンス テスト」でライセンス テスターとしての登録が必要。実際にテスター設定されているメールアドレスを登録し、ライセンス応答は「LICENSED」で良い(たぶん)。
ライセンステスターとしての登録にはある程度の待機時間が必要。
ライセンステスターとして無事に登録されていると購入画面で「テストカード」での購入が表示される。実際のクレジットカードでの購入画面が出た場合は、実際に請求されるので注意する。
Codeless IAPでAndroidのリストアを確実に行うためには「最初に開始するシーン」に「アクティブなオブジェクト」へ「IAPListenerを追加」して「Consume Purchaseにチェックを入れ」て「OnPurchaseCompleteに購入成功時の関数を追加する」ことが必要。特に「アクティブなオブジェクトにIAPListenerを追加」が重要。(AndroidではIAPスクリプトの初期化時にリストアが走るが、これがアクティブでなかった場合はAndroidでは実行されないため?)
余談(AdMob)
AdMobでのコールバック関数(HandleRewardAdLoadedみたいなやつ)はメインスレッドではない(?)ので、フラグの変更(IsRewardGet = trueみたいなやつ)程度にしておかないとエラーが出る。それをUpdateで適宜チェックするのがシンプル実装……だけれど、なんか気持ち悪いよね。
余談(プロビジョンファイル)
iOSアプリでAdMobを使う際はワイルドカード証明書は使えない(?)ので個別で用意する(詳細不明)