🍏

Configuration.storekitの実装 〜 払戻し編

2023/09/06に公開1

前置き

前回、Configuration.storekiについて記事を書いたので、それの続編。
今回は、払戻し(Refund)機能に関する、現時点(2023/9/6時点)の情報を纏めておく。

前回の記事はこれ。
https://zenn.dev/m_tattin/articles/017f97690d6d6d

今回は、自分のアプリに以下のSample Codeを参考に払戻し(Refund)機能を実装した。

実装

実装部分はAppleが提供しているSample Codeを見るとわかると思うので詳細な説明は割愛。

Sample Code:
https://developer.apple.com/documentation/swiftui/food_truck_building_a_swiftui_multiplatform_app

Sample CodeのRefundView.swiftを参考にして、refundRequestSheet(for:isPresented:onDismiss:)を実装。

Configuration.storekitを使って動作確認

App Storeでは公開していないDemo用のプロジェクトで、Configuration.storekitを使って課金処理を行なっている部分に、払戻し(Refund)機能を追加。

Demo用のプロジェクトでは、Configuration.storekitでAuto-renewableの「広告非表示1ヶ月」という課金処理が可能なので、それを購入してから払戻し(Refund)機能を実行した。

購入情報一覧の表示

購入した情報の表示は👌
購入一覧

購入情報の表示

購入情報を選択して払戻しを実行すると、払戻しの画面っぽい Request Refund [Xcode]という画面が表示される。
が、日本語対応されていないのか、文字化けしていた。

文字化けする

払戻し実行

ただ、選択部分は動作するし、ボタンもタップできるので動作はしていそう。
ISSUEを選択して、「Request Refund」をタップしたら、「Your request has been submitted.」と表示された。
ただ、その画面で下に表示される「Done」ボタンはタップしても反応しなかった。

動作はしてそう

ジェスチャー操作で引き下げて閉じることはできた。

ボタンが反応しない

Configuration.storekitを使って画面の確認はできそう。
ただ、文字化けとボタンが反応しないという問題に遭遇。

とりあえず動きそうという手応えを得たので、自分のアプリで、普通ではわからないだろう部分に払戻し機能を組み込んで、App Storeで公開することにした。

補足

App Storeで公開する前に、TestFlightでも動作確認を行なったが、Configuration.storekitを利用した場合と同じような動作だった。
サンドボックスでもダメっぽかった。

自分のアプリに組み込んで動作確認

払戻し機能を追加して、わかりにくい部分から払戻しリクエストができるようにしたアプリを公開して動作を確認した。

が、結果は失敗。
返金をリクエストするという画面が表示され、「リクエストを送信できませんでした。」と…

リクエストを送信できない

おそらく、プロモーションコードを利用しているから、そもそも返金ができないからじゃないか?、と勝手に推測。

そして、残念なことに、2024年4月15日までは有効な為、新しい購読課金ができなかった…
詰んだ…

自力では解決できないと判断し、協力を要請することにした。

自分のアプリに組み込んで動作確認(Take 2)

ということで、購読をしていないアカウント(娘のアカウント)を利用してリリースされたアプリで改めて動作確認。

余談
今まで承認部分についても確認をしたことがなかったので初めての体験。
娘のアカウントで課金処理を行なって承認リクエストを許可すると、課金処理の途中でクレジットカードのセキュリティコードの入力画面に遷移するというのを知らなかった。
セキュリティコードを入れて完了すると課金処理が正常終了。

本題。
ここからは動画だと個人情報も含まれてしまうのでスクリーンショットベースで。
購読処理完了後、同様に課金情報は表示される。

本番の購入情報

選択して払戻しを試みる。

払戻し前

プロモーションコードを利用している場合とは異なる画面に。

払戻し画面

理由を選択して「返金をリクエスト」をタップ。

リクエスト完了

無事にリクエストが送信されたっぽい。
念の為、もう一回やると、

リクエスト中

既に返金リクエストが行われている旨のメッセージが出た。
ちょっと不安だったが日本語環境でも問題なく動作していそう。

まとめ

払戻し機能について、AppleのSample Codeを使うと、サクッと実装が可能。

ただ、Configuration.storekitやサンドボックス環境では払戻しの動作確認まではできなさそうなので、App Storeで公開されてから試す必要があるっぽい。

App Storeで公開した場合でも、プロモーションコードを利用した場合はリクエストを送信できないので注意。

App Storeできちんと購入したものについては、refundRequestSheet(for:isPresented:onDismiss:)でリクエストを送信することが可能。

ということで、払戻し機能を普通ではわからないだろう部分に組み込んでApp Storeで公開したが、次のバージョンアップではメニューに払戻しを追加しても良さそう。

最後に

Configuration.storekitで課金テストをやっていても不安になる部分かな、と思ったので、自分のアプリで確認した内容を纏めてみました。
払戻し(Refund)機能を実装しようかな?、と考えている方の参考になればと思います。

Discussion