WWDC Quick Look 💓 By SwiftGGTeam
Explore testing in-app purchases

Explore testing in-app purchases

元の動画を見る

ハイライト

Apple は、WWDC23 でアプリ内購入テスト ツールに多数のアップデートを行いました。Xcode 15 の StoreKit テストでは、静的な更新レートとマルチインスタンス トランザクション マネージャーが追加され、サンドボックスは請求問題のメッセージ シミュレーションと猶予期間テストをサポートし、ファミリー共有のアプリ内購入テスト サポートを間もなく開始します。

主な内容

Xcode での StoreKit テスト: ローカルでの高速反復

(01:15) StoreKit Testing は、WWDC20 で導入されて以来、アプリ内購入をローカルでテストするための頼りになるソリューションです。完全にオフラインで実行され、App Store Connect で製品を構成する必要がなく、サーバーに依存しません。 StoreKit 構成ファイルでテスト製品を作成および管理し、コードを変更して、シミュレーターまたは実際のデバイスですぐに検証できます。

(02:35) Xcode 15 には、新しい静的更新レート オプションが導入されました。以前は、更新率はサブスクリプション期間に関連付けられており、月次サブスクリプションは 1 分ごとに更新され、年間サブスクリプションは 30 分ごとに更新されました。サブスクリプション期間に関係なく、同じ頻度で更新される設定された更新レートを選択できるようになりました。これにより、さまざまなサブスクリプション タイプの対話動作のテストがより制御しやすくなります。

(03:06) もう 1 つの便利なアップデートは、マルチインスタンス トランザクション マネージャーです。アプリの複数のインスタンス (iPhone および iPad シミュレーターなど) を同時に実行する場合、トランザクション マネージャーは各インスタンスのトランザクションを個別に表示します。アプリを開かずにトランザクション マネージャーから直接購入を開始することもできるため、外部トランザクションの処理ロジックを簡単にテストできます。

(02:04) App Store Connect から Xcode に製品を同期する機能も言及する価値があります。同期ボタンをクリックすると、アプリ内購入の製品定義が Xcode の StoreKit 構成ファイルに自動的にインポートされるため、2 セットのデータを手動で管理する必要がなくなります。

App Store サンドボックス: エンドツーエンドの検証

(04:07) サンドボックスは、App Store Connect で設定した実際の製品データを使用して、本番環境に近いアプリ内購入プロセスをテストします。登録された開発者アカウントを持つデバイスが必要で、App Store Connect のユーザーとアクセスでサンドボックス Apple ID を作成します。

(06:05) 今年、サンドボックスに請求問題メッセージが追加されました。支払い失敗によりユーザーのサブスクリプションが請求再試行状態になると、システムは請求問題プロンプトシートをポップアップ表示し、ユーザーがアプリを離れることなく支払い問題を解決できるようにガイドします。サンドボックスでこのプロセスをシミュレートできます。まず、自動更新されるサブスクリプションを購読し、次にデバイスのサンドボックス アカウント設定で [購入と更新を許可する] スイッチをオフにして、支払いの失敗をシミュレートします。アプリに戻った後、StoreKit のメッセージ API が送信します。billingIssue理由メッセージにより、請求問題シートがトリガーされます。

(09:12) 請求猶予期間テストもサンドボックスに追加されました。 App Store Connect で猶予期間を設定した後、支払いが失敗した場合、サンドボックスのサブスクリプションは猶予期間に入り、ユーザーは引き続き有料コンテンツにアクセスできます。サンドボックスの猶予期間の長さは、実際の猶予期間を待つことなく、設定した更新レートに従って自動的に調整されます。

(10:40) ファミリー共有のアプリ内購入テストが間もなくサンドボックスに導入されます。 App Store Connect のユーザーとアクセスでサンドボックス ファミリー メンバーを整理し、ファミリー共有が有効になっている製品を購入する必要があります。トランザクションは家族メンバーごとに作成され、アプリは StoreKit のisFamilySharable属性はファミリー共有製品とパスを識別しますrevocationDateメンバーが共有を終了するときに、アクセス許可の取り消しを処理します。

(14:01) 今年後半に、更新率の調整、中断された購入のテスト、購入履歴のクリアという 3 つの新しいオプションが iOS サンドボックス アカウント設定ページに追加される予定です。これらの機能は、以前は App Store Connect でのみ利用可能でしたが、現在はデバイス上で直接実行できるようになりました。

TestFlight: 実際のフィードバックを収集する

(15:12) TestFlight は、社内および社外のテスターに​​アプリを配布し、実際のユーザーからフィードバックを収集するために使用されます。 TestFlight を通じてダウンロードされたアプリのアプリ内購入を行う場合、デバイスにログインしている Apple ID が使用されますが、実際の料金は発生しません。自動更新可能なサブスクリプションは、サンドボックスと同じレートで更新されます。

(16:58) 今年、TestFlight はテスター管理を簡素化しました。ステータス、セッション数などによるテスターのフィルタリング、およびグループ メンバーの一括追加または削除をサポートしています。新しい「内部専用」配布方法により、ビルドは内部テスターのみが利用できるようになり、誤ってレビューのために App Store に送信されることがなくなります。

詳細

3 つのツール セットに適用できるシナリオ

(18:10) 3 つのツール セットにはそれぞれ独自の焦点があり、組み合わせて使用​​できます。

ツールベストユースステージコアコンピテンシー
Xcode での StoreKit テスト初期開発完全にオフライン、迅速な反復、自動テスト
App Store サンドボックス機能検証期間エンドツーエンド検証、サーバー統合テスト
テストフライト発売前実際のユーザーからのフィードバック、マルチデバイスの検証

(18:12) 特定の機能のサポート:

  • クーポン コード引き換えおよび値上げシート: Xcode のみでの StoreKit テスト
  • 請求の再試行と猶予期間: Xcode + Sandbox での StoreKit のテスト
  • サーバー側検証: サンドボックス + TestFlight (App Store サーバー通知とサーバー API をサポート)
  • ユーザー フィードバックの収集: TestFlight のみ

請求問題メッセージの実装

(06:59) 請求に関する問題メッセージは、理由タイプが次の StoreKit 2 のメッセージ API を使用します。billingIssue

import StoreKit

// Message API はデフォルトで、アプリの起動時またはフォアグラウンド復帰時に自動表示されます
// 特定のビューでは、メッセージ表示の延期または抑制を選択できます

for await message in StoreKit.Message.messages {
    if message.reason == .billingIssue {
        // 適切なタイミングで表示するか、現在の UI 状態に応じて判断
        await message.display()
    }
}

キーポイント:

  • メッセージ API はデフォルトで自動的に表示されますが、メッセージ フローをリッスンすることで表示タイミングを制御できます。
  • ユーザーを混乱させる可能性のあるビュー(支払いプロセスなど)では、表示を遅らせる必要があります。
  • ユーザーが [続行] をクリックすると、支払い方法を更新するための iOS アカウント設定ページにジャンプします。

サンドボックスのテスト手順

(07:49) 請求に関する問題メッセージをテストする完全なプロセス:

  1. サンドボックス Apple ID がアクティブな自動更新可能なサブスクリプションに登録されていることを確認します。
  2. デバイスの「設定」→「App Store」→「サンドボックス アカウント」を開きます。 3.「購入と更新を許可」スイッチをオフにします
  3. サブスクリプションが更新レートで失敗するまで待ち、請求再試行状態に入る
  4. アプリケーションに戻ると、StoreKit が送信します。billingIssueニュース
  5. 請求に関する問題シートが表示されます。「続行」をクリックします。 7.アカウント設定で「購入と更新を許可」を再度有効にします
  6. サブスクリプションは正常に更新され、請求に関する問題のメッセージは消えました。

猶予期間の構成

(09:38) App Store Connect で猶予期間を有効にします。

  1. アプリのサブスクリプションページに移動します
  2. [請求猶予期間] セクションを見つけて、[請求猶予期間の設定] をクリックします。
  3. 猶予期間の長さを選択します (実稼働環境で有効)
  4. 該当するサブスクライバーと環境 (サンドボックスまたは両方) を選択します。 5.「確認」をクリックします

サンドボックスの猶予期間と請求の再試行期間は、リアルタイムを待つことなく、更新レートに基づいて自動的に事前設定されます。

重要ポイント

  1. アプリ内購入の自動テスト パイプラインを確立します

    • 何をすべきか: StoreKitTest フレームワークを使用して、購入、復元、サブスクリプション ステータスの変更などのコア プロセスをカバーする自動テストを作成します。
    • 価値がある理由: Xcode 15 のマルチインスタンス トランザクション マネージャーにより同時テストが可能になり、静的な更新レートによりテスト時間が予測可能になります
    • 開始方法: テスト ターゲットに StoreKitTest をインポートし、使用します。SKTestSessionテスト セッションを作成し、主要なアプリ内購入シナリオをカバーする XCTest ユース ケースを作成します。
  2. サンドボックスでの支払い失敗シナリオのプレビュー

    • やるべきこと: 請求の問題、猶予期間、返金などのエッジ シナリオを体系的にテストして、支払い例外が発生したときにアプリケーションが正しく動作することを確認します。
    • 実行する価値がある理由: 運用環境での支払いの失敗は、ユーザー離れの主な原因です。サンドボックスで回復プロセスを事前に確認すると、非自発的チャーンを大幅に減らすことができます。
    • 開始方法: サンドボックス アカウント設定で購入権限をオフにし、アプリケーションの請求問題メッセージの処理を観察します。猶予期間を有効にした後にサブスクリプション回復ロジックをテストする
  3. ホームシェアリング機能のテスト準備

    • やるべきこと: App Store Connect でファミリー共有製品を構成し、サンドボックス ファミリー メンバーを整理し、共有ロジックを確認します。
    • 実行する価値がある理由: ファミリー共有は新しいユーザーを引きつけ、エンゲージメントを高めることができますが、権限の付与と取り消しのロジックが正しいことを確認する必要があります。
    • 開始方法: 自動更新可能なサブスクリプションのファミリー共有を有効にし、ユーザーとアクセスにサンドボックス ファミリー メンバーを追加し、購入後の各メンバーのトランザクション受信をテストし、共有を終了するときに権限を取り消します。
  4. TestFlight テスト プロセスを最適化

    • 内容: TestFlight の新しいフィルタリング機能とバッチ管理機能を使用して、内部テストをより効率的に組織します。
    • 実行する価値がある理由: 「内部専用」配布方法により、レビューのための誤った送信が回避され、バッチ管理によりテスターのメンテナンス時間が節約されます。
    • 開始方法: 内部テスト ビルドには内部のみのディストリビューションを選択し、フィルタリング機能を使用してテスターをステータスごとに整理し、非アクティブなテスターを定期的にクリーンアップします。

関連セッション

コメント

GitHub Issues · utterances