Unity

UnityIAPを導入するにあたり、つまずいた点

UnityIAP(In App Purchase)はUnity5.3のバージョンからサポートされた、アプリ内の課金処理機能です。

こちらを実装するにあたり、つまずいた点をまとめます。

Unityのバージョン

  • Unity 5.4.5f1
  • IAP  1.20.0

レシート検証がうまくいかない

Androidで課金を行った際、サーバーサイドでsignatureのレシート検証がうまくいかない事象がありました。
ただ、レシートの検証部分を別アプリのレシートに置き換えると検証が成功します。

検証が成功する別アプリのレシートは以下のようになっています。
※IAPのバージョンが違う、検証が成功する別アプリのレシートです。(一部英数字部分をXXXXでデータを改変しております)

{"orderId":"GPA.XXXX-XXXX-XXXX-XXXX","packageName":"com.XXXX.androidXXXX","productId":"XXXX","purchaseTime":1529984483008,"purchaseState":0,"developerPayload":"9b2b9ed6c016b462e407ace9553fa8c60578664","purchaseToken":"XXXXXXXXXXXX"}

検証が失敗するレシートは以下のようになっています。

{"orderId":"GPA.XXXX-XXXX-XXXX-XXXX","packageName":"com.XXXX.androidXXXX","productId":"XXXX","purchaseTime":1530253868122,"purchaseState":0,"developerPayload":"{\"developerPayload\":\"VmNzMkNHaW5SRFN3b1I2dDZObnJ1N08zMUJSZVlZaWY=\\n\",\"is_free_trial\":false,\"has_introductory_price_trial\":false}","purchaseToken":"XXXXXXXXXXXX"}

検証が失敗するレシートではdeveloperPayloadが2重にはいっており、かつBase64エンコードされているようでした。
そのため、Base64デコードを行い下記のようなレシートにしましたがsignatureのレシート検証に失敗しました。

{"orderId":"GPA.XXXX-XXXX-XXXX-XXXX","packageName":"com.XXXX.androidXXXX","productId":"XXXX","purchaseTime":1530253868122,"purchaseState":0,"developerPayload":"Vcs2CGinRDSwoR6t6Nnru7O31BReYYif","purchaseToken":"XXXXXXXXXXXX"}

Unityテクノロジージャパンに問い合わせ

Unityテクノロジージャパンに質問を投げてみました。

質問1

Androidストアの生のレシート情報は取得できる方法があるのかどうか
回答→できません。

質問2

Androidストアに対してPayloadを送るときに、UnityIAP内で何かを改変して送っているのかどうか
回答→改変は行なっておりません。

質問3

Androidストアから購入した後のレシート情報はUnityIAP内で何か改変しているのかどうか
回答→base64エンコードされています。

質問4

UnityIAP Ver1.20.0の仕様で課金成功時のレシート情報のdeveloperPayload内の

  • is_free_trial
  • has_introductory_price_trial
  • is_updated

以上3つの役割の説明を頂きたい
回答→主にSubscription用に用意されているパラメータです。

との回答をいただきました。

結局何が原因だったのか

原因はdeveloperPayloadの文字列をbase64デコードしてレシートに再登録していたことがsignatureのレシート検証がうまくいかなかった原因でした。

関連記事

  1. Unity

    Behave 2 for Unityを使ってみた

    Behave 2 for UnityとはBehaviour Tre…

  2. Unity

    UniRxを使ってコードを見やすくする

    UniRxとはUniRxは、Reactive Extensions…

  3. Unity

    UnityでUIをタップした際に、奥のWorld上のオブジェクトが反応しないようにする方法

    UnityでuGUIで作成したButtonをタップした際に奥にあるオブ…

  4. Unity

    GTMF 2018東京に行ってきたのでまとめてみる

    7月13日(金)に行われたGTMF2018東京に行ってきました。公…

  5. Unity

    【中途採用】Unityエンジニアの転職先としてオススメする会社5選

    Unityエンジニアの需要ゲーム制作ツールとして不動の地位を築いた…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

カテゴリー

最近の記事

  1. Unity

    UnityIAPを導入するにあたり、つまずいた点
  2. Unity

    UnityでUIをタップした際に、奥のWorld上のオブジェクトが反応しないよう…
  3. Unity

    UniRxを使ってコードを見やすくする
  4. Unity

    GTMF 2018東京に行ってきたのでまとめてみる
  5. Unity

    【中途採用】Unityエンジニアの転職先としてオススメする会社5選
PAGE TOP