「承認と購入のリクエスト」で購入完了後のレシートが空


問題

iPhoneには、ファミリー共有による承認と購入のリクエストを利用した課金フローがあります。
これを利用した場合、SKPaymentTransactionのstateがpurchasedの購入完了時にレシート情報がappStoreReceiptURLに含まれてない問題が発生しました。
レシートはサーバーに送信して検証を行っており、検証NGで課金失敗扱いになっていました。

レシート
Bundle.main.appStoreReceiptURL

解決

こちらを参考にappStoreReceiptURLの解析処理を仕込み、購入したtransactionIdentifierが含まれているか確認を行います。
含まれていない場合(今回の問題の事象)、レシートの更新を行うことで、該当のレシート情報が含まれるようになることを確認できました。

レシートの更新処理
request = [[SKReceiptRefreshRequest alloc] init];
request.delegate = self;
[request start];

参考文献

In App Purchaseのレシートをローカルで検証できるようになった話