する質問をすることでしか得られない、回答やアドバイスがある。呼び出すとその中でクラッシュしてしまいます検索しても原因や対策がわかりそうな情報がみつからず困っています。似たような症状に遭遇した方や原因に見当がつく方がいましたら解決に向けて情報を頂けると助かります。(以下略)」のように変わっていました。(メールの内容(本文)は日本語のレシートですが件名だけ英語に変わった状態)attachmentクリップ3気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。15:25UnityIAPは情報が少ないので詳しい内容やソースを明記された方が回答を得られやすいと思います。レシート検証については情報がないので。UnityIAPは情報が少ないので詳しい内容やソースを明記された方が回答を得られやすいと思います。レシート検証については情報がないので。16:10追記しました。そのまま全部載せる訳にはいかないので改変してありますが概ねこんな感じです。そのまま全部載せる訳にはいかないので改変してありますが概ねこんな感じです。管理対象アイテムと定期購読と選べるので管理対象アイテムの方で登録されています。管理対象アイテムと定期購読と選べるので管理対象アイテムの方で登録されています。blank.SandBoxだとorderIdは空になるようです。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。18:33回答ありがとうございます。テスト方法]http://devwalker.blogspot.jp/2013/07/google-play-in-app-billing.htmlこのページによると1.サンドボックス2.実購入テストの2つのテスト方法があると書いてありました。指定してテストを実施しました。返ってくる」ので期待通りの動作になっています。得られないという症状です。(テストアカウントを使っているので実際の支払いは発生しませんがサンドボックス用の予約されたIDではなく実際の商品IDを使っていて、支払われないけど購入処理は実際に行うという流れでレシートメールもやってきます)回答ありがとうございます。2つのテスト方法があると書いてありました。指定してテストを実施しました。返ってくる」ので期待通りの動作になっています。得られないという症状です。アカウント」を利用せず実際に購入したらorderIdやTransactionIdはどうなのでしょうね。orderIdやTransactionIdはどうなのでしょうね。09:35予約されたアイテムID(android.test.purchased)での購入でメールは来ませんでした。今しているテストアカウントでの実購入テストが実はSandBoxなのでは...?というのは私も一瞬疑ったんですが、テストではない本当のアカウントで購入を試してみるのはちょっと勇気が要りますね...テストで動いてるから最終確認で本番環境でも1度だけ確認してみる、というのとはニュアンスが違うので本番でもダメな可能性が最初からある程度ある状態ではなかなか...(汗)今しているテストアカウントでの実購入テストの事がSandBoxである事、予約されたアイテムIDでのSandBoxテストは実はリファレンスで言うSandBoxとは別物である事、の明確な情報がどこかにあればいいんですが...私はまだ見つけられていません。どこかに発見された時はぜひおしえて下さいm(._.)m予約されたアイテムID(android.test.purchased)での購入でメールは来ませんでした。今しているテストアカウントでの実購入テストの事がSandBoxである事、予約されたアイテムIDでのSandBoxテストは実はリファレンスで言うSandBoxとは別物である事、の明確な情報がどこかにあればいいんですが...私はまだ見つけられていません。11:141・2共にサンドボックステストでした。https://developer.android.com/google/play/billing/billing_testing.html正しくは、1は「静的応答テスト」で、2が「実際のアプリ内購入を行うアプリ内課金の実装テスト」になります。accounts.とあり、テスト購入品のorderIdフィールドは空のままとあります。1・2共にサンドボックステストでした。2が「実際のアプリ内購入を行うアプリ内課金の実装テスト」になります。テスト購入品のorderIdフィールドは空のままとあります。購入した時のorderIdは偽の注文IDとの記載がありました。ID)よって1・2の結果は正常だと判断できるはずです。orderIdは偽の注文IDとの記載がありました。よって1・2の結果は正常だと判断できるはずです。09:11ありがとうございます!orderIdが得られない件については了解致しました。本番で課金テストできるようになったら改めて確認しようと思います。他の問題は解決していませんがBAにさせて頂きます。orderIdが得られない件については了解致しました。本番で課金テストできるようになったら改めて確認しようと思います。他の問題は解決していませんがBAにさせて頂きます。11:43orderIdについての追加です。purchases.とあり、テストの際はorderIdのかわりにpurchaseTokenを代用する旨の記述がありました。Billingをしっかり読み込むとまだ何かあるかもしれませんね。「ライブラリに追加しました」の件は仕様変更があったみたいです。http://mtimsno.hatenablog.jp/entry/2016/06/27/213208orderIdについての追加です。テストの際はorderIdのかわりにpurchaseTokenを代用する旨の記述がありました。Billingをしっかり読み込むとまだ何かあるかもしれませんね。「ライブラリに追加しました」の件は仕様変更があったみたいです。RECEIPT_VALIDATIONと常に定義する様にしたらValidateが通る様になりました。最終的に以下の様にしています。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。定義した時にクラッシュします。(RECEIPT_VALIDATIONを定義している時しかValidate()は呼び出されない)発生する例外はIAPSecurityExceptionではなくNullReferenceExceptionです。定義した時にクラッシュします。発生する例外はIAPSecurityExceptionではなくNullReferenceExceptionです。・UnityIAPの再インポート・SetPublicKeyでパブリックキーを設定せず、マニュアルに沿って設定する。・SetPublicKeyでパブリックキーを設定せず、マニュアルに沿って設定する。19:03残念ながら症状は変わりません。いうか何度も繰り返し購入しているとどんどんおかしくなります。ログを見るとAを購入成功後にAの消費処理をしているようなのですがAを何度か連続購入してBを購入してAを購入するという流れだとAの購入に戻った時の消費処理では何故かAの消費ではなくBの消費処理をしようとする...みたいな混乱が生じてしまうようです。なると消費できていないので次にそれを買おうとすると所有しているからと購入できなくなります。残念ながら症状は変わりません。いうか何度も繰り返し購入しているとどんどんおかしくなります。ログを見るとAを購入成功後にAの消費処理をしているようなのですがAを何度か連続購入してBを購入してAを購入するという流れだとAの購入に戻った時の消費処理では何故かAの消費ではなくBの消費処理をしようとする...みたいな混乱が生じてしまうようです。なると消費できていないので次にそれを買おうとすると所有しているからと購入できなくなります。09:30ValidateをするとクラッシュするのでValidateをしないで購入処理を試しています。消費処理というのは自前では何もしておりません。UnityIAPが勝手におこなっているらしい...とログから推察しているだけにすぎません。(商品のGooglePlay用ID)というログの記録で解釈しています。2つめのログだけはサンプルのUnityIAPDemo.cs内(ProcessPurchase)に出力が指定されていますが最初と最後の2件はそのファイルには見当たらないので内部的にUnityが処理&ログ出力している部分だと思います。ValidateをするとクラッシュするのでValidateをしないで購入処理を試しています。消費処理というのは自前では何もしておりません。UnityIAPが勝手におこなっているらしい...とログから推察しているだけにすぎません。いうログの記録で解釈しています。2つめのログだけはサンプルのUnityIAPDemo.cs内(ProcessPurchase)に出力が指定されていますが最初と最後の2件はそのファイルには見当たらないので内部的にUnityが処理&ログ出力している部分だと思います。内部出力までは確認していなかったので。内部出力までは確認していなかったので。該当するかわかりませんがAnalytics&UnityIAP絡みの問題をUnity5.3.5p5で1つ対応されているみたいです。Unity5.3.5p5で1つ対応されているみたいです。17:57ありがとうございます!Unityをアップデートしてみます。ファイルに保存したのを見ています。ありがとうございます!Unityをアップデートしてみます。ファイルに保存したのを見ています。20:25すっかりlogcatのことを忘れてました。Monitor使えば実購入テスト中もリアルタイムにロギング出来ますね。logcatのことを忘れてました。Monitor使えば実購入テスト中もリアルタイムにロギング出来ますね。キャンセル完了するlink+1ログを見るとAを購入成功後にAの消費処理をしているようなのですがAを何度か連続購入してBを購入してAを購入するという流れだとAの購入に戻った時の消費処理では何故かAの消費ではなくBの消費処理をしようとする...みたいな混乱が生じてしまうようです。なると消費できていないので次にそれを買おうとすると所有しているからと購入できなくなります。こちらは改善されました?というのも当方でも同様の症状を確認しております。---以下確認した問題になります。誤りや追加がありましたら共有をお願いします。消費対象となるプロダクトではなく購入済み他プロダクトの消費処理を勝手に行っている。購入済み他プロダクトが消費型プロダクト以外の場合も消費処理を実行しており当然ながら失敗している。結果として消費対象のプロダクトは消費処理が行われないので再購入できない問題が発生する。内で購入プロダクトの数量・アンロック管理を行う場合に不整合が発生してしまう。内で数量・アンロック管理を行うことも不整合が発生する。消費型プロダクトの消費処理はUnityIAP側で自動処理され、その結果用のイベントリスナーが無いため消費の成否及び何を消費したのか把握するすべが無い。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。15:36おっしゃる通りの症状が今もでています。Unityサポートに問い合わせもしましたが有効な回答は得られていません。この症状は今の所GooglePlayでのみ起きているようでiOS版では同症状の発生は確認できておりません。おっしゃる通りの症状が今もでています。Unityサポートに問い合わせもしましたが有効な回答は得られていません。この症状は今の所GooglePlayでのみ起きているようでiOS版では同症状の発生は確認できておりません。誤りがあることに気づきました。「購入済み他プロダクトが消費型プロダクト以外の場合も消費処理を実行しており当然ながら失敗している」ですが、成功しているケースがありました。非消費型でも消費処理に成功という意味不明な現象です。Unityサポートから良い回答が得られるのを期待しております。合わせてこちらからも問い合わせをしておきました。iOSは簡易なチェックのみ実施しましたが、すぐ気づく様な問題はなかったですね。誤りがあることに気づきました。「購入済み他プロダクトが消費型プロダクト以外の場合も消費処理を実行しており当然ながら失敗している」ですが、成功しているケースがありました。非消費型でも消費処理に成功という意味不明な現象です。Unityサポートから良い回答が得られるのを期待しております。合わせてこちらからも問い合わせをしておきました。iOSは簡易なチェックのみ実施しましたが、すぐ気づく様な問題はなかったですね。16:16サポートの方は英語圏で同様の問題を報告している人を見つけられていないそうで同様の報告を何処かで見かけたら教えて欲しいと言われました。こちらが本題ですが、バグの情報を社内DBで探してAndroidのみで発生する問題で近い物があったそうです。それと同じ原因だとすれば社内的には既に修正済みでリリースに向けて確認中だそうです。そのバージョンは1.6でIAPモジュールの再インポートで更新されるようです。IAPモジュールのバージョンを確認できるそうです。(手元環境では1.5.0でした)1.6で治るかどうかはわかりませんがひとまず1.6を首を長くして待ってます。1.6が出たら(もしくは追加情報があれば)また報告させてもらいます。サポートの方は英語圏で同様の問題を報告している人を見つけられていないそうで同様の報告を何処かで見かけたら教えて欲しいと言われました。こちらが本題ですが、バグの情報を社内DBで探してAndroidのみで発生する問題で近い物があったそうです。それと同じ原因だとすれば社内的には既に修正済みでリリースに向けて確認中だそうです。そのバージョンは1.6でIAPモジュールの再インポートで更新されるようです。IAPモジュールのバージョンを確認できるそうです。1.6で治るかどうかはわかりませんがひとまず1.6を首を長くして待ってます。1.6が出たら(もしくは追加情報があれば)また報告させてもらいます。16:49情報共有ありがとうございます。当方からもログ付きの質問をしているので把握されていると思われます。いや〜、既に対応中とのことでホッとしています。ちなみにUnity5.3.5p6でImportしたものは1.5でした。こちらもUnityサポートの回答に追加情報がありましたらコメントします。情報共有ありがとうございます。当方からもログ付きの質問をしているので把握されていると思われます。いや〜、既に対応中とのことでホッとしています。ちなみにUnity5.3.5p6でImportしたものは1.5でした。こちらもUnityサポートの回答に追加情報がありましたらコメントします。14:50早速1.6を試してみました。致命的な問題が改善されていることを確認しました。問題については残ったままになっています。1.6を試してみました。致命的な問題が改善されていることを確認しました。問題については残ったままになっています。17:09私も1.6.0を再importして確認してみました(Unityはまだ5.3.5p6のままでp7にはあげていません)が、アプリの見た目上の動作としては想定通りの結果になっているように見えます。(2)の問題も今の所は(私の試した範囲内では)発生しなくなっているようです。最初の購入時にエラーログが記載されていました。UnityEngine.AndroidJNISafe.CallVo私も1.6.0を再importして確認してみました(Unityはまだ5.3.5p6のままでp7にはあげていません)が、アプリの見た目上の動作としては想定通りの結果になっているように見えます。(2)の問題も今の所は(私の試した範囲内では)発生しなくなっているようです。最初の購入時にエラーログが記載されていました。17:52こちらは5.3.5p7で試しています。エラーメッセージはこちらでも出力されましたが現在は出力されていないです。継続してエラーが出力されますか?Validateですが、getReceiptPayloadへ処理を切り分けていますが、ProcessPurchaseで実行してもダメでしょうか?こちらは5.3.5p7で試しています。エラーメッセージはこちらでも出力されましたが現在は出力されていないです。19:13再インストールして確認しましたがご指摘の通り初回の購入ダイアログの表示時のみエラーメッセージが出力されますね。キャンセルしたりそのまま購入した後の2度目以降の購入ダイアログの表示時には出力されない様です。消費型プロダクトの場合は消費処理も行われておりました。サポートに問い合わせてみます。ご指摘の通り初回の購入ダイアログの表示時のみエラーメッセージが出力されますね。2度目以降の購入ダイアログの表示時には出力されない様です。消費型プロダクトの場合は消費処理も行われておりました。サポートに問い合わせてみます。09:25エラーメッセージは起動後最初の購入時にのみ記録されます。続けて購入する時にそれ以降エラーは記録されません。アプリの見た目上の動作的にはエラーが出てもそれ以降の購入も全部正常に動作しているようには見えています。内容(Validateの呼び出し)をProcessPurchaseの中に直接展開すると...って話しでしょうか?それにどんな意図があるのか分からないので教えてください。ちなみにiOS版ではValidateを呼び出してもクラッシュせずGooglePlay限定です。エラーメッセージは起動後最初の購入時にのみ記録されます。続けて購入する時にそれ以降エラーは記録されません。全部正常に動作しているようには見えています。それにどんな意図があるのか分からないので教えてください。ちなみにiOS版ではValidateを呼び出してもクラッシュせずGooglePlay限定です。ProcessPurchaseの中に直接展開するその通りです。私もそれに合わせてValidateが通っているので、あえて理由をつけるなら成功している状況にソース形態を合わせてみるですね。以下は間違っていることを前提としますが、getReceiptPayloadメソッドに切り分けられたことでValidate中にProcessPurchaseが完了してしまい、Validateで利用される参照がきれてクラッシュしているのではと想像します。getReceiptPayloadメソッドが戻り値を返しているので同期的な動作をしているとは思いますが正直よくわかりません。理由をつけるなら成功している状況にソース形態を合わせてみるですね。Validateで利用される参照がきれてクラッシュしているのではと想像します。同期的な動作をしているとは思いますが正直よくわかりません。15:22課金テストだけのアプリにValidateの呼び出しを追加した状態のアプリでは当方の環境でも落ちない事が確認できました。UnityIAP自体ではValidateに問題ないようです。他のSDK類との競合で何かがおかしくなっているようです。エラーログにWebViewと書かれていたのでWebViewに何か問題があるのかも?という事でそっち方向を調べてみる事にします。課金テストだけのアプリにValidateの呼び出しを追加した状態のアプリでは当方の環境でも落ちない事が確認できました。UnityIAP自体ではValidateに問題ないようです。他のSDK類との競合で何かがおかしくなっているようです。エラーログにWebViewと書かれていたのでWebViewに何か問題があるのかも?という事でそっち方向を調べてみる事にします。15:47UnityIAPの問題ではなかった様で良かったです。後学のために何のSDKで問題になったか教えてもらえないでしょうか?UnityIAPの問題ではなかった様で良かったです。10:35クラッシュログにはWebViewと記載があるのでWebViewだろうという事しかわかっていません。何か進展があれば追加報告させていただきます。クラッシュログにはWebViewと記載があるのでWebViewだろうという事しかわかっていません。何か進展があれば追加報告させていただきます。15:11初回の購入ダイアログ表示時のみエラー出力される件ですが、サポートでは把握していない問題とのことでサポート指定のサンプルを試した所、確かにエラー出力はされませんでした。(https://bitbucket.org/Unity-Technologies/unity-iap-samples)色々試してみた所、UnityIAPの初期化をAwake()で行うと出力されないことを確認しました。HiroshiWatanabeさんの場合、Start()で初期化している所をAwake()に変更すればエラー出力されなくなるかもしれません。サポート指定のサンプルを試した所、確かにエラー出力はされませんでした。UnityIAPの初期化をAwake()で行うと出力されないことを確認しました。エラー出力されなくなるかもしれません。Exceptionが出る原因がわかりました。設定してあったため、最適化されて消え去ってしまった未使用と誤認した何かを参照してしまっているという状態になっていたようです。link.xmlでSystem.Security.Cryptographyだけ禁止にしてやるという措置を取るとNullエラー出なくなりました。Exceptionが出る原因がわかりました。設定してあったため、最適化されて消え去ってしまった未使用と誤認した何かを参照してしまっているという状態になっていたようです。link.xmlでSystem.Security.Cryptographyだけ禁止にしてやるという措置を取るとNullエラー出なくなりました。16:57情報ありがとうございます。存在自体知らなかったので参考になりました。備忘録的にURL貼っときます。呼ばれ正常処理が行えない症状がありますが、サポートからはアプリ側でPending管理を行いユーザーが購入操作できない様にして欲しい旨の回答がありました。常にCompleteを返す場合関係無いですがサーバー連携を行う際は注意が必要です。情報ありがとうございます。存在自体知らなかったので参考になりました。備忘録的にURL貼っときます。ユーザーが購入操作できない様にして欲しい旨の回答がありました。常にCompleteを返す場合関係無いですがサーバー連携を行う際は注意が必要です。課金による広告消去機能を実装したい。FPDIで文字が書けない。頂いたご意見への回答は行っておりません。