2014/08/24

Android:Google Play In-App Subscriptions

Introduction

AndroidではGoogle Playサービスを利用してアプリ内課金を比較的容易に導入できます.
本稿ではビジネス戦略の1つ”アプリ内課金”にフォーカスしたAndroid Developers | Google Play In-App Subscriptionsを翻訳し, サブスクリプションについて学びます.

Google Play In-App Subscriptions

Subscriptions let you sell content, services, or features in your app with automated, recurring billing. You can easily adapt an existing In-app Billing implementation to sell subscriptions.

サブスクリプションはコンテンツ, サービス, 機能を定期的に自動で購入させるサービスであり, 簡単にアプリへ組み込める.

This document is focused on highlighting implementation details that are specific to subscriptions, along with some strategies for the associated billing and business models.

本稿では, サブスクリプションの詳細と課金戦略, ビジネスモデルにフォーカスする.

Overview of Subscriptions

A subscription is a product type offered in In-app Billing that lets you sell content, services, or features to users from inside your app with recurring monthly or annual billing. You can sell subscriptions to almost any type of digital content, from any type of app or game.

サブスクリプションはアプリ内課金商品の一種で, コンテンツ, サービス, 機能を毎月, 毎年といった単位で定期的に自動購入させるサービスである.
サブスクリプションはほとんどの商品に適用できる.

As with other in-app products, you configure and publish subscriptions using the Developer Console and then sell them from inside apps installed on Android devices. In the Developer console, you create subscription products and add them to a product list, then set a price and optional trial period for each, choose a billing interval (monthly or annual), and then publish. For more information about using the Developer Console, see Configuring Subscription Items.

他の商品と同じようにサブスクリプションもDeveloper Consoleで設定し, Androidにインストールされたアプリ内で販売される.
Developer Consoleでサブスクリプションを作成し, プロダクトリストに追加し, 価格を決めて, オプションでお試し期間を設定し, 自動課金される期間(毎月 or 毎年)を設定して公開する.
Developer Consoleについてのより詳細な情報はConfiguring Subscription Itemsを参照.

When users purchase subscriptions in your apps, Google Play handles all checkout details so your apps never have to directly process any financial transactions. Google Play processes all payments for subscriptions through Google Wallet, just as it does for standard in-app products and app purchases. This ensures a consistent and familiar purchase flow for your users.

ユーザによるサブスクリプションの購入にあたってはGoogle Playが勘定に関する処理を行うため, アプリがこれに関与する必要がない.
Google Playはサブスクリプションの支払い処理を通常の商品と同じくGoogle Walletを使用して行う.
購入のフローはアプリや, 他の商品購入時と一貫したものになる.

enter image description here

After users have purchase subscriptions, they can view the subscriptions and cancel them from the My Apps screen in the Play Store app or from the app’s product details page in the Play Store app. For more information about handling user cancellations, see Subscription Cancellation.

購入したサブスクリプションはGoogle Playのアプリ詳細画面か, マイストアから購読を停止することができる.
購読のキャンセルについてより詳細な情報はSubscription Cancellationを参照.

In adddition to client-side API calls, you can use the server-side API for In-app Billing to provide subscription purchasers with extended access to content (for example, from your web site or another service). The server-side API lets you validate the status of a subscription when users sign into your other services. For more information about the API, see Purchase Status API.

アプリ内課金のサブスクリプションについては, クライアントサイドAPIに加えてサーバサイドAPIも提供されている.
サーバサイドAPIはAndroid以外の独自サービスからも使用でき, サブスクリプションのステータスを取得することができる.

You can also build on your existing external subscriber base from inside your Android apps.

  • If you sell subscriptions on a web site, for example, you can add your own business logic to your Android app to determine whether the user has already purchased a subscription elsewhere, then allow access to your content if so or offer a subscription purchase from Google Play if not.
  • You can implement your own solution for sharing subscriptions across as many different apps or products as you want. For example, you could sell a subscription that gives a subscriber access to an entire collection of apps, games, or other content for a monthly or annual fee. To implement this solution, you could add your own business logic to your app to determine whether the user has already purchased a given subscription and if so, allow access to your content.

外部サービスで提供しているサブスクリプションを購入済みなユーザへの配慮.

  • Webサイトで独自のサブスクリプションを販売しているような場合, 独自のビジネスロジックをアプリに追加しユーザが既にサブスクリプションを購入済みであるかどうかを確認する. 購入済みであるなら独自コンテンツを提供するし, そうでないならGoogle Playから購入させる.
  • 異なるアプリや商品を跨いでサブスクリプションを共有するために独自のソリューションを実装できる.
    例えば, 月額or年額の手数料を払えばアプリやゲームのコレクションを自由に遊べるサブスクリプションを売りたいとする.
    これを実現するためには, アプリにユーザが既にサブスクリプションを購入済みかどうかを判断するビジネスロジックを組み込み, その上でコンテンツにアクセスさせる.

In general the same basic policies and terms apply to subscriptions as to standard in-app products, however there are some differences. For complete information about the current policies and terms, please read the policies document.

To learn about the minimum system requirements for subscriptions, see the Version Notes.

サブスクリプションについての基本的なポリシーや条件は, 標準のアプリ内商品にも同じことが言える.
細部では異なる部分もあるので, 詳細はpolicies documentを参照.

サブスクリプションについての最小要件についてはVersion Notesを参照.

Configuring Subscription Items

To create and manage subscriptions, use the Developer Console to set up a product list for the app then configure these attributes for each subscription product:

  • Purchase Type: always set to Subscription
  • Subscription ID: An identifier for the subscription
  • Publishing State: Unpublished/Published
  • Language: The default language for displaying the subscription
  • Title: The title of the subscription product
  • Description: Details that tell the user about the subscription
  • Price: USD price of subscription per recurrence
  • Recurrence: monthly or yearly
  • Additional currency pricing (can be auto-filled)

For details on how to add and configure products in the Developer Console, see Administering In-app Billing.

サブスクリプションの作成と管理について, アプリで使用できるようにDeveloper Consoleを使って商品リストをセットアップする.
作成, 管理にあたりサブスクリプションの設定項目には次がある:

  • 購入種別: 常にSubscriptionを設定する
  • サブスクリプションID: サブスクリプションの識別子
  • 公開状態: 公開/非公開
  • 言語: サブスクリプションを表示する際のデフォルト言語設定
  • タイトル: サブスクリプションのタイトル
  • 説明: サブスクリプションについての説明文
  • デフォルト価格: USD価格(毎月or毎年単位で支払う額)
  • 支払い間隔: 月単位 or 年単位
  • 追加の価格(USDから価格オートフィルされます)

Developer Consoleでの商品設定について詳細な情報はAdministering In-app Billingを参照.

Subscription pricing

When you create a subscription in the Developer Console, you can set a price for it in any available currencies. Each subscription must have a non-zero price. You can price multiple subscriptions for the same content differently — for example you could offer a discount on an annual subscription relative to the monthly equivalent.

Important: To change the price of a subscription, you can publish a new subscription product ID at a new price, then offer it in your app instead of the original product. Users who have already purchased will continue to be charged at the original price, but new users will be charged at the new price.

Developer Consoleでサブスクリプションを作成するときに(その時有効な通貨で)価格を設定できるが, どのサブスクリプションも有料である必要がある.
1つのサブスクリプションに対して異なる価格を設定できる. 例えば, 購読期間に応じて, 月毎に課金額を割引くようなサービスで使える.

Important: サブスクリプションの価格を変更すると, 新しい価格設定のサブスクリプションIDが払い出され, オリジナルの商品と置き換えられる.
価格変更前にこれを購入していたユーザはオリジナル価格が引き継がれ, 価格変更後にこれを購入したユーザは変更後の価格が反映される.

User billing

In the Developer Console, you can configure subscription products with automated recurring billing at either of two intervals:

  • Monthly — Google Play bills the customer’s Google Wallet account at the time of purchase and monthly subsequent to the purchase date (exact billing intervals can vary slightly over time)
  • Annually — Google Play bills the customer’s Google Wallet account at the time of purchase and again on the same date in subsequent years.

Developer Consoleでサブスクリプションの支払い間隔として次の2つが設定できる.

  • 毎月 — Google Playは商品を購読しているユーザのGoogle Walletアカウントに対して毎月請求する.
    (厳密にいうと, 請求される間隔は正確に一ヶ月とはならないかもしれない)
  • 毎年 — Google Playは商品を購読しているユーザのGoogle Walletアカウントに対して毎年請求する.
    (翌年の同月日となる)

Billing continues indefinitely at the interval and price specified for the subscription. At each subscription renewal, Google Play charges the user account automatically, then notifies the user of the charges afterward by email. Billing cycles will always match subscription cycles, based on the purchase date.

Over the life of a subscription, the form of payment billed remains the same — Google Play always bills the same form of payment (such as credit card or by Direct Carrier Billing) that was originally used to purchase the subscription.

サブスクリプションの支払い間隔と価格設定は無期限で反映される. サブスクリプションが更新されたり, 自動請求されるとユーザにemailで通知される. サブスクリプションを購入した日付を基準に, 請求される

購読中の支払い方法(クレジットカードや直接支払など)は変わらない. Google Playはサブスクリプション購入時と同じ請求を常に行う.

When the subscription payment is approved by Google Wallet, Google Play provides a purchase token back to the purchasing app through the In-app Billing API. Your apps can store the token locally or pass it to your backend servers, which can then use it to validate or cancel the subscription remotely using the Purchase Status API.

Google Walletによりサブスクリプションの支払いが承認された時, In-app Billing APIを介してGoogle Playから購入Tokenが返される.
購入Tokenはローカルに保存するかバックエンドサーバに送信し, 外部からPurchase Status APIを使用してサブスクリプションを有効にしたり停止したりすることができる.

If a recurring payment fails (for example, because the customer’s credit card has become invalid), the subscription does not renew. How your app is notified depends on the In-app Billing API version that you are using:

  • With In-app Billing Version 3, the failed or expired subscription is no longer returned when you call getPurchases.
  • With In-app Billing Version 2, Google Play notifies your app at the end of the active cycle that the purchase state of the subscription is now “Expired”.

クレジットカードが失効される等して定期支払が失敗するとサブスクリプションは更新されなくなる.
これがどうやってアプリに通知されるかは使用しているIn-app Billing APIのバージョンに依存する.

  • Ver.3を使用している場合, 期限切れや失敗した場合はgetPurchasesは商品を返さない.
  • Ver.2を使用している場合, Google Playは購入状態が”Expired”になった時にアプリへ通知される.

Recommendation: Include business logic in your app to notify your backend servers of subscription purchases, tokens, and any billing errors that may occur. Your backend servers can use the server-side API to query and update your records and follow up with customers directly, if needed.

Recommendation: バックエンドサーバを使っているならサブスクリプションの購入, Token, 発生する可能性のあるエラーを通知するようビジネスロジックを組み込んでおく.
バックエンドサーバはサーバサイドAPIを使用して直接ユーザに問い合わせたり, 情報更新したり, 追跡することができる.

Free trials

In the Developer Console, you can set up a free trial period that lets users try your subscription content before buying it. The trial period runs for the period of time that you set and then automatically converts to a full subscription managed according to the subscription’s billing interval and price.

To take advantage of a free trial, a user must “purchase” the full subscription through the standard In-app Billing flow, providing a valid form of payment to use for billing and completing the normal purchase transaction. However, the user is not charged any money, since the initial period corresponds to the free trial. Instead, Google Play records a transaction of $0.00 and the subscription is marked as purchased for the duration of the trial period or until cancellation. When the transaction is complete, Google Play notifies users by email that they have purchased a subscription that includes a free trial period and that the initial charge was $0.00.

Developer Consoleではコンテンツ購入前に無料のお試し期間を設定できる. お試し期間が満了すると, 自動で有料のサブスクリプションに移行される.

お試し期間を利用するには, フルサブスクリプションを通常の購入フローを通して”購入”しなければならない.
ただし, 試用期間内であれば料金を請求されずGoogle Playは0ドルの取引を記録して試用期間であることをマークする.
取引が完了するとGoogle Playはユーザに購入済みのサブスリクプションがある旨とそれが無料期間中であり取引0ドルであることを通知する.

When the trial period ends, Google Play automatically initiates billing against the credit card that the user provided during the initial purchase, at the amount set for the full subscription, and continuing at the subscription interval. If necessary, the user can cancel the subscription at any time during the trial period. In this case, Google Play marks the subscription as expired immediately, rather than waiting until the end of the trial period. The user has not paid for the trial period and so is not entitled to continued access after cancellation.

お試し期間が終わるとフルサブスクリプションが購入されたとして改めて自動で請求を行う.
必要であればお試し期間をキャンセルすることができるが, キャンセルするとお試し期間は満了となる.
お試し期間にキャンセルすると, それ以降アクセスさせなくする.

You can set up a trial period for a subscription in the Developer Console, without needing to modify or update your APK. Just locate and edit the subscription in your product list, set a valid number of days for the trial (must be 7 days or longer), and publish. You can change the period any time, although note that Google Play does not apply the change to users who have already “purchased” a trial period for the subscription. Only new subscription purchases will use the updated trial period. You can create one free trial period per subscription product.

お試し期間はAPKを更新することなくDeveloper Consoleで設定できる.
商品リストから対象のサブスクリプションを見つけ出し, お試し期間となる日数(期間は7日かそれ以上とすること)を入力し公開する. お試し期間はいつでも変更できる. ただし, すでに購入されているものに対しては変更が適用されない.

Subscription publishing

When you have finished configuring your subscription product details in the Developer Console, you can publish the subscription in the app product list.

Developer Consoleでサブスクリプションの設定が完了したら商品リストに公開できる.

In the product list, you can add subscriptions, in-app products, or both. You can add multiple subscriptions that give access to different content or services, or you can add multiple subscriptions that give access to the same content but for different intervals or different prices, such as for a promotion. For example, a news outlet might decide to offer both monthly and annual subscriptions to the same content, with annual having a discount. You can also offer in-app purchase equivalents for subscription products, to ensure that your content is available to users of older devices that do not support subscriptions.

プロダクトリストにはサブスクリプションかアプリ内商品, または両方を追加できる. 異なるコンテンツまたはサービスとして複数のサブスクリプションを追加するもよし, 同じコンテンツでも異なる価格と支払い間隔を持たせるもよし.
たとえばプロモーションのために, 月額制と年額制の2本を用意して年額の方が割引率を高くするような場合に使える.
また, サブスクリプションをサポートしない古い端末向けにアプリ内課金を使って通常商品を代用することもある.

After you add a subscription or in-app product to the product list, you must publish the product before Google Play can make it available for purchase. Note that you must also publish the app itself before Google Play will make the products available for purchase inside the app.

Important: You can remove the subscription product from the product list offered in your app to prevent users from seeing or purchasing it.

サブスクリプションかアプリ内商品を商品リストに追加した後, Google Playで購入できるようになる前にそれを公開する必要がある.
ただ, アプリ内商品を作成するには事前にアプリを登録しておく必要がある.

Important: サブスクリプションを見えなくしたり購入できなくしたりするために, プロダクトリストからサブスクリプションを削除することができる.

Subscription Cancellation

Users can view the status of all of their subscriptions and cancel them if necessary from the My Apps screen in the Play Store app. Currently, the In-app Billing API does not provide support for programatically canceling subscriptions from inside the purchasing app.

ユーザはPley Storeにあるマイアプリ画面からすべてのサブスクリプションを閲覧, キャンセルできる.
現在, In-app Billing APIはアプリからプログラマブルにサブスクリプションを解除する手段を備えていない.

When the user cancels a subscription, Google Play does not offer a refund for the current billing cycle. Instead, it allows the user to have access to the cancelled subscription until the end of the current billing cycle, at which time it terminates the subscription. For example, if a user purchases a monthly subscription and cancels it on the 15th day of the cycle, Google Play will consider the subscription valid until the end of the 30th day (or other day, depending on the month).

ユーザがサブスクリプションを解除しても, Google Playは払い戻し請求をサポートしていない. 代わりに, 支払ったサブスクリプション期間が満了するまでキャンセル後でもコンテンツにアクセスできる.
(たとえば15日に購読停止しても30日まではアクセスできる)

In some cases, the user may contact you directly to request cancellation of a subscription. In this and similar cases, you can use the server-side API to query and directly cancel the user’s subscription from your servers.

他には販売者に購読停止のリクエストを直接連絡する方法やサーバサイドAPIを使用してサーバから直接購読停止させることもできる

Important: In all cases, you must continue to offer the content that your subscribers have purchased through their subscriptions, for as long any users are able to access it. That is, you must not remove any subscriber’s content while any user still has an active subscription to it, even if that subscription will terminate at the end of the current billing cycle. Removing content that a subscriber is entitled to access will result in penalties. Please see the policies document for more information.

Important: 全てのケースにおいて, サブスクリプションを購入したユーザがアクセスし得る限りコンテンツを提供し続けること.
コンテンツの削除はアクセス権をもったユーザへペナルティを科すことになる. より多くの情報はpolicies documentを参照.

App uninstallation

When the user uninstalls an app that includes purchased subscriptions, the Play Store app will notify the user that there are active subscriptions. If the user chooses to continue with the uninstallation, the app is removed and the subscriptions remain active and recurring billing continues. The user can return to cancel the associated subscriptions at any time in the My Apps screen of the Play Store app. If the user chooses to cancel the uninstallation, the app and subscriptions remain as they were.

購入済みのサブスクリプションを含んだアプリをアンインストールした場合は, Play Store アプリはユーザに有効なサブスクリプションの存在を伝える. それでもユーザがアンインストールを継続した場合, アプリは削除されサブスクリプションはアクティブなまま残り, 定期支払も継続される.
この後, サブスクリプションを停止したい場合はPlay Storeの”マイアプリ”から行う. アンインストールをキャンセルした場合はアプリもサブスクリプションもそのままの状態で残る.

Refunds

With subscriptions, Google Play does not provide a refund window, so users will need to contact you directly to request a refund.

If you receive requests for refunds, you can use the server-side API to cancel the subscription or verify that it is already cancelled. However, keep in mind that Google Play considers cancelled subscriptions valid until the end of their current billing cycles, so even if you grant a refund and cancel the subscription, the user will still have access to the content.

Important: Partial refunds for canceled subscriptions are not available at this time.

Google Playは払い戻し機能と画面を提供していないので, 必要であれば直接販売者に連絡する必要がある.

払い戻しのリクエストを受けた場合は, サーバサイドAPIを使ってサブスクリプションを停止することができる.
しかし, Google Playは購読停止しても一定期間はユーザにアクセスを許していることに留意すること.

Important サブスクリプションの部分的な払い戻しは現時点でサポートされない.

Payment Processing and Policies

In general, the terms of Google Play allow you to sell in-app subscriptions only through the standard payment processor, Google Wallet. For purchases of any subscription products, the transaction fee is the same as the transaction fee for application purchases (30%).

サブスクリプションはGoogle Walletを通して販売することができる. サブスクリプション購入の手数料はアプリ販売と同じ30%となる.

Apps published on Google Play that are selling subscriptions must use In-app Billing to handle the transaction and may not provide links to a purchase flow outside of the app and Google Play (such as to a web site).

For complete details about terms and policies, see the policies document.

Google Playでアプリを公開してサブスクリプションを販売したならば, In-app Billingを使用すること.
Google Playの外で購入させることはできない.

Subscription order numbers

To help you track transactions relating to a given subscription, Google Wallet provides a base Merchant Order Number for all recurrences of the subscription and denotes each recurring transaction by appending an integer as follows:
12999556515565155651.5565135565155651 (base order number)
12999556515565155651.5565135565155651..0 (initial purchase orderID)
12999556515565155651.5565135565155651..1 (first recurrence orderID)
12999556515565155651.5565135565155651..2 (second recurrence orderID)

Google Walletは全てのサブスクリプションに販売者オーダ番号にインクリメンタルIDを付与して取引の追跡を助けます.
12999556515565155651.5565135565155651 (base order number)
12999556515565155651.5565135565155651..0 (initial purchase orderID)
12999556515565155651.5565135565155651..1 (first recurrence orderID)
12999556515565155651.5565135565155651..2 (second recurrence orderID)

Google Play provides the order number as the value of the orderId field of the INAPP_PURCHASE_DATA JSON field (in V3) or the PURCHASE_STATE_CHANGED intent (in V2).

Google Playが提供するオーダ番号をJSONのIN_APP_PURCHASE_DATAにあるorderIdフィールドから取得できる(Ver.3), Ver.2の場合はIntentのPURCHASE_STATE_CHANGEDとなる.

Purchase Verification Strategies

In a typical scenario, your app verifies the order status for new purchases to ensure that they are valid before granting access to the purchased content.

To verify a purchase, the app passes the purchase token and other details up to your backend servers, which verifies them directly with Google Play using the Purchase Status API. If the backend server determines that the purchase is valid, it notifies the app and grants access to the content.

Keep in mind that users will want the ability to use your app at any time, including when there may be no network connection available. Make sure that your approach to purchase verification accounts for the offline use-case.

通常, コンテンツへのアクセス権を付与する前に, 購入商品の注文内容を検証する.

注文を検証するために, 購入Tokenとその他の詳細な情報をバックエンドサーバに送り, Purchase Status APIを使ってGoogle Playへ直接アクセスする.

忘れてはいけないことに, ユーザはネットワーク接続できない場合がある.
ネットワーク接続ができない状態でもコンテンツが利用できるよう配慮すること.
オフラインでのユースケースを確認すること.

Google Play Android Developer API

Google Play offers an HTTP-based API that lets you remotely query the validity of a specific subscription at any time or cancel a subscription. The API is designed to be used from your backend servers as a way of securely managing subscriptions, as well as extending and integrating subscriptions with other services.

For complete information, see Purchase Status API.

Google Playはサブスクリプションをいつでも検証あるいはキャンセルできるようHTTP-baseのAPIを提供している.
APIはバックエンドサーバから使用されることを想定して安全に設計されている.

より詳しい情報はPurchase Status APIを参照.


License:
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.