View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • App Store Server APIの新機能

    App Store Server APIとApp Store Server Notificationsの最新アップデートを紹介します。現在APIが提供する機能を確認し、通知でサブスクリプションステータスを追跡し、サーバ上のトランザクションと連携し、通知漏れを効率的に回復する方法を学びます。また、StoreKitまたはStoreKit 2を使用してサーバでアプリをサポートする方法を紹介し、APIで非推奨となる重要な事項や、推奨される移行ワークフローについても共有します。

    リソース

    • App Store Server API changelog
    • App Store Server Notifications changelog
    • Generating JSON Web Tokens for API requests
    • Get Transaction Info
    • onlyFailures
    • status
    • Submit feedback
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC23

    • App Store Serverライブラリについて
    • SwiftUI向けのStoreKitについて

    WWDC22

    • App内課金の最新情報
    • App内課金の統合と移行の検討
  • ダウンロード

    ♪ ♪

    みなさん こんにちは App Storeサーバチームの エンジニア Ianです 今日は 新機能や重要なアップデートを含む アプリ内課金用サーバAPIに関する エキサイティングなアップデートを 紹介します なじみのない方もいるかもしれませんが アプリ内課金をサーバ上で 最大限に活用するためのAPIを主に 2つ提供しています 一つ目はApp Store Server APIです サーバからApp Store Server APIを オンデマンドで呼び出すと アプリ内課金を効果的に管理するために 必要なすべてのデータを戻します APIは アプリ内課金データを取得し さらに修正するための 様々の強力なエンドポイントを提供します

    もう一つの主要APIは App Store Server Notifications V2です

    App Store Server Notifications V2を 使用すると App Storeサーバは アプリで行われた アプリ内課金に関するアップデートを サーバに積極的に送信します つまりApp Store Server APIを ポーリングすることなく 分単位のアップデートを取得できます

    通知は サブスクリプションの更新 有効期限 返金など 包括的なイベントをカバーしています

    これらにより アプリ内課金の ライフサイクルを完全に追跡できるため ユーザーの行動をよりよく理解し 対応することができます

    App Store Server APIと App Store Server Notifications V2は 多くの優れた機能を共有しています どちらもトランザクションデータを 使い慣れた JSONフォーマットで提供し データは署名されているので Appleからであることを確信できます StoreKit 2または original StoreKit APIを使用する アプリをサポートするために 両方のAPIを使用することもできます またみなさまからのフィードバックに基づき これらのAPIを新しい機能で 積極的にサポートしています

    本日App Store Server APIと App Store Server Notifications V2の 一連の最新アップデートの コレクションをお知らせします

    たくさんの新機能があるので 今日のセッションではほんの少ししか 説明する時間がありません これらの新機能の詳細については デベロッパ向けドキュメントを ご覧ください それでは App Storeサーバのアップデートの 素晴らしい世界に飛び込んでみましょう 本日はアップデートを3つに分けて 紹介します まず サーバ上でトランザクションを より簡単に扱うための新機能について 詳しく説明します 次に ユーザーのサブスクリプションの ステータスを確実に判断するのに役立つ App Store Server Notificationの 機能強化について説明します そして最後に 古いAPIからの移行に関する 重要な最新情報を提供します トランザクションから始めましょう トランザクションは アプリ内課金の 核となるデータオブジェクトです これらはデバイスでのアプリ内課金を表し プロダクトID 種類 購入日など 多くの購入に関する 重要な情報が含まれています

    App Store Serverは JWSで署名されたJSONオブジェクトを 通じてトランザクションを表します これはApp Store Server APIおよび App Store Server Notifications V2全体に わたって使用される 安全で標準化された形式です

    署名付きトランザクションを取得する 主な方法は App Store Server APIの Get Transaction Historyエンドポイントを 使用することです

    このエンドポイントは アプリの 指定されたユーザーの 完全な取引履歴を戻すので 過去から現在までのすべてのユーザーの 購入履歴を最新の状態に 保つために使用できます しかし アプリからサーバへの 呼び出しなどによって サーバがすでにトランザクションを 認識していることもあります サーバサイドでは そのトランザクションをさらに検証し 最新情報があることを 確認したいのかもしれません

    以前は このユースケースは Get Transaction Historyを呼び出し 一致するトランザクションのレスポンスを 選別する必要がありました 見つかったら レスポンスのデータで トランザクションの記録を 更新することができます

    特に ユーザーの取引履歴が 複数のページにまたがっていて エンドポイントを何度も 呼び出す必要がある場合 このプロセスは面倒に感じるかもしれません また 終了した消耗型トランザクションを 探している場合にも Get Transaction Historyレスポンスに 表示されないため 機能しません このユースケースでは より具体的な ソリューションが求められます

    そこで今日 このユースケースに 直接対応する 新しいエンドポイントを紹介します 新しいGet Transaction Info エンドポイントを使うと 個別の購入のために署名された 取引情報を要求することができ 準備するのはtransactionIdだけです

    すべてのtransactionIdsは プロダクトタイプやユーザーのデバイス上の トランザクションの 終了ステータスに関係なく サポートされます そう このエンドポイントから完成した 消耗型トランザクションを 取得することもできます

    新しいエンドポイントがどのように 機能するのか 簡単に見てみましょう App Storeサーバの この新しいエンドポイントに transactionIdをパスパラメータとして GET requestを送信します

    signedTransactionInfo列を含む レスポンスを受け取ります

    signedTransactionInfoを デコードすることで リクエストで 指定したIDのトランザクション情報を 見ることができます

    それで終わりです 新しいGet Transaction Info エンドポイントは非常にシンプルですが サーバ上のトランザクションを扱う際の 柔軟性を高めます 様々なケースで役に立つと思います さて 柔軟性というテーマをさらに 発展させてみましょう

    App Store Server APIの 評判のよい エンドポイントはご存知かもしません

    これらのエンドポイントはそれぞれ originalTransactionIdを パスパラメータとして必要とします IDはどのユーザーにデータを要求または 送信しているかをサーバに示します

    しかし 常にoriginalTransactionIdが 手元にあるとは限りません トランザクションIDしかない場合は どうればよいでしょうか originalTransactionIdを取得するために 新しいGet Transaction Infoエンドポイントに それを送信することができますが なぜ1つのエンドポイントを呼び出すために 別のエンドポイントを呼び出すのでしょうか 代わりに今日からこれらのエンドポイントを transactionIdで呼び出すことができます

    以前と同じように リクエストのパスに IDを入力するだけです この柔軟性の向上により App Store Server APIの コアエンドポイントを これまでより簡単に 呼び出せることを期待しています また すでにこれらのエンドポイントを originalTransactionIdsで 呼び出している場合でも 同様に機能し続けるので 心配はいりません では App Store Server Notificationsに 届くアップデートに話を移しましょう アプリが自動更新サブスクリプションを 提供している場合 それらのサブスクリプションの ステータスと時間の経過とともに どのように変化するかを 追跡することが重要です ここでは サブスクリプションの 5つのステータスを見ることができます App Store Server Notifications V2を 使用すると このステータスの変化につながる イベントの通知を迅速に 受け取ることができるため 適切なタイミングでコンテンツを 迅速に有効化および無効化し スムーズなユーザーエクスペリエンスを 維持できます

    通知がどのように サブスクリプションのステータスに関する 情報を知らせることができるか 見てみましょう 多くの通知イベントは それらのタイプとサブタイプを通して サブスクリプションのステータスを 直接示します 例えば このサブタイプINITIAL_BUYの SUBSCRIBED通知を見てみましょう

    この通知は プロダクトへの 新しいサブスクリプションを示し サブスクリプションのステータスが アクティブであることを示します

    ここに 通知タイプがEXPIREDの場合の シンプルな例があります

    これは 関連するサブスクリプションの ステータスが「期限切れ」になったことを 明確に示しています

    しかし 一部の通知については サブスクリプションステータスが あまり明確でない場合があります 例えば この返金の通知です この通知タイプは アプリ内課金の返金が 行われた場合に送信されます この通知のsignedTransactionInfoを チェックすることで 返金された購入品がわかります

    この場合 返金は自動更新 サブスクリプションに対するものなので サブスクリプションのステータスの 記録を更新したいと思います

    ステータスが "Revoked "に なったと思いがちですが 必ずしもそうではありません 同じoriginalTransactionIdを持つ より最近の サブスクリプション更新購入がある場合 サブスクリプションのステータスはまだ アクティブの可能性があります その場合は サブスクリプション コンテンツへのアクセスを 無効にすべきではありません

    この状況では サブスクリプションの ステータスは単に不明確であり 通知内のデータだけでは 更新するのに十分ではありません これは理想的とは言えません App Storeサーバからサブスクリプションの 通知を受け取る際 サブスクリプションの最新の ステータスを明確に示すことで サーバ上でこの重要な情報を常に 最新の状態に保つことができます

    そこで本日 App Store Server Notifications V2の データオブジェクトに新しい ステータスフィールドを導入します このフィールドは 先に詳述した サブスクリプションの 5つのコアステートのうちの 1つを示す単純な整数です

    この新しいフィールドは 自動更新サブスクリプションのために送信する すべての通知に含まれます これで App Store Server APIの Get All Subscription Statusesエンドポイントを 呼び出さなくても サブスクリプションのステータスを 取得できるようになりました この新しいフィールドが 先に説明した シナリオをどう改善するか見てみましょう これで サブスクリプションの 返金通知を受け取ったときに ステータスフィールドをチェックするだけで サブスクリプションのステータスを 把握できるようになりました

    この場合は1なので 関連するサブスクリプションが アクティブだとわかります

    新しいステータスフィールドでは App Store Server Notificationsが これまで以上に役に立ちます とても便利なので いずれも見逃さないようにしましょう しかし サーバーに障害が発生した場合 App Storeサーバに 通知が届かない可能性があります

    そのため App Store Server APIの Get Notification Historyエンドポイントを 提供しています

    このエンドポイントを使用すると App Storeサーバがアプリ用に生成した バージョン2の通知を 過去6カ月分まで要求できます

    そうすることで サーバーに既知の停止が発生した場合 停止期間中に このエンドポイントを呼び出し サーバーが見逃した通知を 取得することができます

    しかし 使用例によっては このプロセスはあまり効率的でないと 感じるかもしれません ときには停電時以外でも 一過性のネットワークの問題などで サーバーが通知を見逃すことがあります このような状況では エンドポイントに問い合わせる 明確な期間がないため サーバがすでに受信している通知を 何ページにもわたって 選別する必要があります このユースケースに対応するため Get Notification Historyに "onlyFailures"という新しい リクエストフィールドを導入します

    このオプションフィールドは 返される通知を サーバに 到達できなかったものだけに制限します 応答には 現在再試行中の通知も 含まれます

    サーバがまだ確かめていない通知だけを 解析すればよいので 停電や時折発生するネットワーク問題から の復旧が格段に速くなります この新しいフィールドがどのように 機能するのか見てみましょう Get Notification Historyエンドポイントに リクエストを送信し リクエストボディに新しいフィールド onlyFailuresを含めます

    これがその応答です

    notificationHistory配列の各エントリは notificationを表し リクエストに 新しいonlyFailuresフィールドが 含まれているので ここにリストされている すべての通知が サーバに到達できませんでした 一つの通知項目を拡大してみましょう

    ここにsignedPayloadがあります この文字列をデコードして サーバに最初に送られたのと同様に 通知の内容を見ることができます

    この通知のsendAttempts配列を見てみると 各送信試行の結果を見ることができます この配列は最大6つのエントリーを 含むことができ 最初の送信試行に1つ 再試行には最大5つの エントリーを含むことができます

    ここでは 2つのエントリーだけが表示され 両方とも失敗しているので 通知はまだ再試行プロセスにあるはずです 後の再試行が成功した場合 onlyFailuresフィールドを含む それ以降のリクエストでは この通知は表示されなくなります これが新しいonlyFailuresフィールドの 仕組みです Get Notification Historyがさらに 便利になることがわかると思います

    最後に 古いAPIからの移行に関する 重要なアップデートです アプリ内課金を提供しているアプリであれば verifyReceipt APIをご存知でしょう

    2021年に App Store Serverから アプリ内課金データを取得する 新しい方法として App Store Server APIを リリースしました この2つのAPIを比較してみましょう

    verifyReceiptを使用すると StoreKitの オリジナルバージョンを実行している クライアントから受信したレシートを 検証しデコードできます App Store Server APIでは これら3つのエンドポイントを使用して レシートに記載されているのと 同じデータをすべて取得できます また App Store Server APIは 他にはない有用なデータや 強力な機能を提供する 様々な追加エンドポイントも 提供しています

    通知APIに目を移すと 古いApp Store Server Notifications V1を まだサポートしています

    しかし2021年に App Store Server Notifications V2を導入しました では これらのAPIを比較してみましょう

    App Store Server Notifications V1とV2は アプリ内課金イベントを リアルタイムでサーバに直接送信します しかしV2では 型とサブタイプの 両方を使ってイベントを定義することで より明確にしています そして 違いはそれだけにとどまりません またV2は 追加イベントの通知 テスト通知のリクエスト機能 通知履歴へのアクセス そして ユーザーのサブスクリプションの状態を 追跡するための全く新しい ステータスフィールドを提供します

    App Store Server APIと App Store Server Notifications V2の 採用によって アプリ内課金データを サーバ上で安全かつ効率的に 管理するための多様な新機能を ご利用いただけます 最終的に それはユーザーにとって より良いアプリ内課金体験を意味します そのため本日 verifyReceiptと App Store Server Notifications V1の 廃止を発表します 本日より これらのAPIは非推奨とみなされ 機能アップデートが行われなくなります

    新しいAPIのすべての利点を享受するために 今すぐ移行計画を始めましょう

    移行に必要なのは ほんのわずかなステップです

    verifyReceiptから App Store Server APIに移行するには まずアプリを表すJWTに 署名する必要があります これは私たちのドキュメントに 概説されている簡単なプロセスです App Store Server APIを 呼び出すときは常に このJWTをヘッダーとして 提供することになります これはあなたが要求されたアプリのデータを 所有していることを証明します

    次に ユーザーごとにtransactionIdを 保存する必要があります このtransactionIdは Get Transaction Historyや Get All Subscription Statusesなどの コアエンドポイントを呼び出すたびに パスパラメータとして提供されます どのtransactionIdでも動作します データベースを管理しているのであれば すでに保存されている可能性が高いです そうでなければ 各ユーザーのレシートから 抽出することもできます

    これだけです そしてverifyReceiptから得ていたのと 同じデータ その他多くのデータに アクセスできるようになります

    App Store Server Notifications V1から V2への移行は さらに簡単です まず 新しいV2フォーマットを 解析できるように サーバを準備します すでにApp Store Server APIを 使用している場合は App Store Server Notifications V2は 同じJWSトランザクション形式を 使用しているため このステップは簡単です

    サーバの準備ができたら App Store Connectで 設定をV1通知からV2通知に変更します 実装をテストするには Sandboxのみでバージョン2の通知を 受信することから始めることができます

    設定を切り替えると App StoreサーバはV2形式で 新しい通知の送信を開始します リトライ処理中の V1通知がある場合 最大3日間 受信し続けることができます

    移行に関するより詳細なサポートについては その他のリソースもご用意しています App Store Server APIおよび App Store Server Notifications V2は Sandbox環境で使用できます そのため本番環境に導入する前に 実装をテストできます

    そして今週 App Store Server API を呼び出し App Store Server Notification V2を 解析するための 新しいオープンソースライブラリ App Store Server Libraryをリリースします これでエンドポイントを簡単に呼び出したり 受信した署名済みデータを検証したり さらにはレシートからtransactionIdsを 抽出して移行を容易にしたりできます

    今年のWWDCでの専用セッション 「Meet the App Store Server Library」を ぜひチェックしてみてください また 移行方法のヒントについては WWDC22のセッション 「Explore in-app purchase integration and migration」を 参照してください

    以上でこのセッションのApp Storeサーバの アップデートを終了します 本日発表した素晴らしい新機能を ぜひご活用ください また 私たちがレビューする時間がなかった さらなる機能については ドキュメントをご覧ください

    すべての機能がSandboxと 本番サーバの両方で利用できますので まずSandboxでテストして 準備ができたらいつでも本番サーバーに ロールアウトすることができます

    そして 皆さんからのフィードバックを お待ちしています App Storeサーバへの 機能要望がありましたら Appleのフィードバックアシスタントから お知らせください WWDC23へのご参加 ありがとうございました ♪ ♪

  • 特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。

    クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。

Developer Footer

  • ビデオ
  • WWDC23
  • App Store Server APIの新機能
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン