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

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

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

  2. Unity

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

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

  3. Unity

    Behave 2 for Unityを使ってみた

    Behave 2 for UnityとはBehaviour Tre…

  4. Unity

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

    UniRxとはUniRxは、Reactive Extensions…

  5. Unity

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

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

コメント

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

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

カテゴリー

最近の記事

  1. Unity

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

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

    Behave 2 for Unityを使ってみた
  4. Unity

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

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