【StoreKit2 / Swift / iOSアプリ開発】StoreKit 2 で月額サブスクリプションを実装するぅ!!!

iOS

ちょっとサブスクリプションを確認したら、サーバーを通すチェックが必要とか
firebase使えるけどユーザーが増えると高額になるとか…vpsで自前で用意するのも止まると困るので。。。と考えていたら!?

StoreKit2 は、アプリだけで完結できるということを確認!よしやりましょう!

StoreKit2
https://developer.apple.com/jp/videos/play/wwdc2021/10114/
StoreKit2 + SwiftUI
https://developer.apple.com/videos/play/wwdc2023/10013/

早速やってみましょう!

App Store Connect の設定

まず、App Store Connect でサブスクリプションを登録します。

  1. App Store Connect にログイン
  2. 対象アプリを選択
  3. 収益化→サブスクリプションから
    サブスクリプショングループを作成
  4. グループにサブスクリプションを作成(配信先、金額など設定
    1ヶ月 $0.99など
  5. ローカライズ(名前や説明を入力)

という感じで保存しました。

請求の猶予期間
全てのユーザー、更新のユーザー、sandboxのみなど選択できるようです
3日、16日 , 28日 から選択できるようです、更新時にカード期限切れなどの場合猶予を持たせたりするのに良いようです
なしでも大丈夫です。

無料トライアルなどは、猶予ではなく普通に無料で回数制限で使ってもらうなどで良いかと

Sandboxテスター

通常ユーザーでテストするとこうなりました。

sandboxテスターに入れると 「5分ごとの月次更新」など確認できます!

実機テストなのですが
設定 > App Store > SANDBOXアカウント
これを変えるだけでOKでした!

購入後、購入履歴を削除して、サブスクリプションを解除してみる

appstoreのsandboxアカウントをチェックして「購入履歴を削除」します。すぐには消えない?

購入済みアイテムが購入できるアイテムになければOKです^^v

購入中断テスト?

appstoreconnectのsandboxアカウントを購入中断

これはうまく中断できていないかも?普通に購入できているような

ひとまず置いておいて

レシート検証と通知

レシート検証

transaction内のレシート検証を行うことが出来ます。
verifiedされたtransactionなので通常はOKなのですが、それをサーバー側でも検証すると不正検知できたりということのようです。

verifiedされているのに、サーバー経由でappstoreに確認したら不正だった。ということもあるかもしれません。
過去にverifiedしたtransactionデータを再利用したり。などあるそうで。

不正データだったとしても検知するだけではなく、それをどう処理するかのロジックをアプリ側で対応しないといけません、不正なので機能停止。など

storekit1ではレシート検証が必須だったようです、2では推奨のようです。

レシート検証は非同期で行うだけなので、即時購入停止などはできません。transactionはverifiedされているので一旦transactionはfinishして検証結果に合わせてアイテム付与などを行うということですね

ゲームなどはサーバー側でユーザーのアイテムデータを管理することも多いと思うのでその辺りはまた重要になってきそうです。

今そこまで重要度は高くないですが、とりあえずレシート検証も入れてみます。

通知

appstoreに登録するとサーバーに購入関連通知を受け取ることができます。
このユーザーはアイテム使ったのに課金がキャンセルされている!など?あるのかな

通知とレシート検証を検証してみたい。などなど

通知を受け取るのは簡単なので受け取って保存してみましょう

App Store Server Notifications V2

App Store Server Notifications V2 | Apple Developer Documentation
Specify your secure server’s URL in App Store Connect to receive version 2 notifications.

通知を受け取るには?

  1. App Store Connect での設定:
    • App Store Connect にログインし、アプリを選択します。
    • 「App の情報」>「App Store Server Notifications V2」で、通知を受け取るサーバーの URL を設定します。

プロダクションサーバーとsandboxサーバーのURLを入れます!

  1. サーバー側の実装:
    • Apple から送信される通知を受け取るための API エンドポイントをサーバーに実装します。
    • 受信した通知の JSON ペイロードを検証し、必要な情報を抽出します。
    • トランザクションの情報をデータベースなどに保存し、管理します。
  2. 通知の検証:
    • Appleから受け取った通知は、JWS署名されています。
    • Appleの公開鍵を使って署名を検証し、通知の信頼性を確認する必要があります。

今回はGoでエンドポイントを作ってみます!
ちょっとテーマが大きいのでGoで作る部分は別記事を投稿します

続く。

お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

タイトルとURLをコピーしました