2016-04-12 3 views
3

長期間アプリ内購入領収書をローカルに確認するAppleの例を使用していましたが、最近はサンドボックスモードでの作業が中止されました。アップルのVerificationController.mがサンドボックスのアプリ内購入領収書の署名を確認できませんでした

たぶんtransaction.transactionReceiptを検証しようとしたとき、それはで失敗し、それが関連のiOS 9.3.1だ、または彼らは、サーバー側で何かを変更した、 -

AssertMacros: signature_blob_ptr->version == 2, file: ../VerificationController.m 
Transaction is invalid! 

それは違うversion(3の代わりを持っています2)及びは、以下の構造体と一致しない証明書の残り -

struct signature_blob { 
    uint8_t version; 
    uint8_t signature[128]; 
    uint32_t cert_len; 
    uint8_t certificate[]; 
} 

任意のアイデアはどのようにAppleのアプリ内購入時の領収書のバージョン3を確認するには?

+0

この問題に関する詳細情報を見つけましたか?私のプロダクションアプリが動作していないことを除いて全く同じ状況に直面しています...ありがとうございました – brbgyn

+0

私の場合に起こったことを受け入れられた答えは反映されているようです。 – Kof

答えて

3

私は "バージョン3"のシグネチャを見て、それをリバースエンジニアリングしました。

唯一の変更は署名の長さです。今はの128ビットではなく、です。残りのブロブは、https://developer.apple.com/legacy/library/releasenotes/StoreKit/IAP_ReceiptValidation/index.htmlのコードを使用して解凍し、検証します。

アップルの最新のルート証明書はhttps://www.apple.com/certificateauthority/になりました。バージョン3のBLOBに含まれている署名証明書を検証するには公開鍵を使用する必要があります。

バージョン2と3の両方をサポートできるように、残りの署名を解凍する前にまずバージョンを入手することをお勧めします。

+0

私はあなたが言ったように私は変更されているが、私のためには動作しません。 –

+0

@HardikShekhat具体的にしてください。あなたはどんなエラーを出していますか?何を試しましたか? –

1

Appleはそのサーバー側のチェックにiOS6スタイルの領収書を減価償却のように見えます: https://forums.developer.apple.com/thread/44603

をライブはまだ動作しますように今のところそれはそう、私たちは、おそらく新しいフォーマットに

参照リンクを介して移動する必要があります詳細については。

0

私は同じ問題を説明しました。 Appleが領収書をローカルで確認すると、すべてが覚えていて無効な領収書で作業が中止されました。今日(2014年4月14日)最新バージョンのiOS(iOS 9.3.1)と新しいxCodeバージョン(7.3)がインストールされ、検証が再び機能しています。私のコードで何も変更していない!

+0

この問題は、iOS 9.3を使用しているユーザーに発生しています。したがって、xcodeを再インストールすると問題は解決しますが、問題は解決しません...この問題に関する詳細情報は見つかりましたか?ありがとうございます – brbgyn

0

基本的に、リンゴはすべてのアプリを破壊しました。新しいデバイスサイズのすべてのアートワークに1日か4日かかってしまい、それを売ることができないため、それらを更新できません。残念ながら、私はそれらを無料にすることはできません。なぜなら、無料のアプリ内購入であっても領収書は失敗するからです。

自分自身に注意してください:サーバー側の機能を私のコントロールから再利用しているアプリケーションを作成しないでください。

関連する問題