Google Playでサブスクリプション商品を販売する場合、リアルタイム購読状態受信のためのGoogle通知設定を行う必要があります。
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-iap-google:1.9.2'
...
}
Google Playアプリ内決済はAndroid 4.4(APIレベル19)以上で動作します。
Play Billing Library 6.xをR8と一緒に使用する場合、Android 4.4(APIレベル19)で動作しない問題が発生する可能性があります。 この問題を解決し、Android 4.4(APIレベル19)をサポートするには、settings.gradleファイルに以下の設定を追加してください。
buildscript {
repositories {
// Raw R8 releases.
maven {
url("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath("com.android.tools:r8:8.1.46")
}
}
repositories {
mavenCentral()
// ONE store V21
maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
}
dependencies {
// ONE store V17
implementation 'com.nhncloud.android:nhncloud-iap-onestore:1.9.2'
// ONE store V19
implementation files('libs/iap_sdk-v19.01.00.aar')
implementation 'com.nhncloud.android:nhncloud-iap-onestore-v19:1.9.2'
// ONE store V21
implementation 'com.onestorecorp.sdk:sdk-iap:21.00.01'
implementation 'com.onestorecorp.sdk:sdk-configuration-kr:1.0.0'
implementation 'com.nhncloud.android:nhncloud-iap-onestore-v21:1.9.2'
...
}
ONE store V21アプリ内決済はAndroid 6.0(APIレベル23)以上で動作します。
repositories {
mavenCentral()
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-iap-galaxy:1.9.2'
...
}
Galaxy Storeのアプリ内決済はAndroid 4.3(APIレベル18)以上で動作します。
repositories {
mavenCentral()
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-iap-amazon:1.9.2'
...
}
AppGallery Connection構成ファイル(agconnect-service.json)を追加します。
以下のようにルートレベルのbuild.gradleにApp Gallery Connectプラグインを追加します。
buildscript {
repositories {
google()
mavenCentral()
// Configure the Maven repository address for the HMS Core SDK.
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
// Add the AppGallery Connect plugin configuration. You are advised to use the latest plugin version.
classpath 'com.huawei.agconnect:agcp:1.9.0.300'
}
}
apply plugin: 'com.huawei.agconnect'
repositories {
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-iap-huawei:1.9.2'
...
}
Huawei App Galleryアプリ内決済はAndroid 4.4 (APIレベル19)以上で動作します。
repositories {
mavenCentral()
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-iap-mycard:1.9.2'
...
}
ONE storeは全決済画面とポップアップ決済画面をサポートします。 AndroidManifest.xmlにmeta-dataを追加して、全決済画面("full")またはポップアップ決済画面("popup")を選択することができます。 メタデータが設定されていない場合は、デフォルト( "full")が適用されます。
<application
...>
<meta-data android:name="iap:view_option" android:value="popup | full"/>
</application>
決済画面 | 設定値 |
---|---|
全決済画面 | "full" |
ポップアップ決済画面 | "popup" |
詳細については、[ONE store決済画面設定]https://dev.onestore.co.kr/devpoc/reference/view/Tools)を確認してください。
Android 11では、ユーザーが端末にインストールした他のアプリをアプリが照会して、相互作用する方法を変更します。 Android 11以上をターゲットとするアプリでONE store、Galaxy StoreまたはAmazon Appstore決済を使用するには、以下のようにAndroidManifest.xmlに'queries'要素または権限を定義する必要があります。
<queries>
<intent>
<action android:name="com.onestore.ipc.iap.IapService.ACTION" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="onestore" />
</intent>
</queries>
<queries>
<package android:name="com.sec.android.app.samsungapps" />
</queries>
Amazon Appstoreでは'queries'要素の代わりに権限を追加します。
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
「queries」要素はAndroid Gradle Plugin 4.1以上で動作します。 以前のバージョンのAndroid Gradle Pluginを使用するには、Android 11でパッケージ可視性のためにGradleビルド準備を参照してください。
注意!) QUERY_ALL_PACKAGES権限をGoogle Play Storeに適用しないように注意してください。
android:nameを定義していない場合は次のように追加します。
<application
android:name="com.nhncloud.android.iap.mycard.NhnCloudMyCardApplication"
...>
...
</application>
android:nameを定義している場合はApplicationクラスの代わりにNhnCloudMyCardApplicationクラスを継承します。
<application
android:name=".MyApplication"
...>
...
</application>
class MyApplication extends NhnCloudMyCardApplication {
...
}
決済テストを行うには'test_mode'を追加します。'test_mode'を設定していない場合のデフォルト値はfalseです。
<application
...>
<meta-data android:name="iap:test_mode" android:value="true | false"/>
</application>
ストア | コード |
---|---|
Google Play | "GG" |
ONE store | "ONESTORE" |
Galaxy store | "GALAXY" |
Amazon Appstore | "AMAZON" |
Huawei App Gallery | "HUAWEI" |
MyCard | "MYCARD" |
[参考]ストアコードはIapStoreCodeクラスに定義されています。
商品名 | 商品タイプ | 説明 |
---|---|---|
消費性商品 | "CONSUMABLE" | 消費可能な一回性商品。ゲーム内マネー、メディアファイルなどがあります。 |
購読商品 | "AUTO_RENEWABLE" | 指定された間隔および価格で決済が自動的に繰り返される商品。 オンライン雑誌および音楽ストリーミングサービスなどがあります。 |
Consumable Subscription Products | "CONSUMABLE_AUTO_RENEWABLE" | 消費が可能なサブスクリプション商品 定期的にゲーム内通貨、アイテムなどを支給する決済方式です。 |
Note :Subscription products and Consumable subscription products are supported by Google Play Store only.
NhnCloudIapConfiguration configuration =
NhnCloudIapConfiguration.newBuilder(getApplicationContext())
.setAppKey(YOUR_APP_KEY)
.setStoreCode(IapStoreCode.GOOGLE_PLAY_STORE)
.build();
/* NhnCloudIap.java */
public static void initialize(NhnCloudIapConfiguration configuration)
Parameters | |
---|---|
configuration | NhnCloudIapConfiguration:アプリ内決済設定情報 |
[参考]初期化は、必ずApplication#onCreateで進行する必要があります。
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
initializeNhnCloudIap();
}
/**
* NhnCloudIapを初期化します。
*/
private void initializeNhnCloudIap() {
NhnCloudIapConfiguration configuration = NhnCloudIapConfiguration.newBuilder(getApplicationContext())
.setAppKey(YOUR_APP_KEY)
.setStoreCode(IapStoreCode.GOOGLE_PLAY_STORE)
.build();
NhnCloudIap.initialize(configuration);
}
}
// Login.
NhnCloudSdk.setUserId(userId);
// Logout.
NhnCloudSdk.setUserId(null);
[参考]サービスログアウト時に、必ずユーザーIDをnullに設定してください。プロモーションコードが使われたり、決済再処理動作時に誤ったユーザーIDで購入が行われることを防止できます。
[参考]決済アップデートリスナーは、Activity.onCreate()で登録し、Activity.onDestroy()で解除する必要があります。
/* NhnCloudIap.java */
public static void registerPurchasesUpdatedListener(IapService.PurchasesUpdatedListener listener)
public static void unregisterPurchasesUpdatedListener(IapService.PurchasesUpdatedListener listener)
Method | Parameters | Description | |
---|---|---|---|
registerPurchasesUpdatedListener | listener | IapService. PurchasesUpdatedListener: 決済アップデートリスナー |
決済アップデートリスナーを登録します。 |
unregisterPurchasesUpdatedListener | listener | IapService. PurchasesUpdatedListener: 登録解除するリスナー |
決済アップデートリスナー登録を解除します。 |
public class MainActivity extends AppCompatActivity {
/**
* アプリ内で消費性商品、購読、プロモーション商品を購入した時、結果を通知します。
*/
private IapService.PurchasesUpdatedListener mPurchaseUpdatedListener =
new IapService.PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(@NonNull List<IapPurchaseResult> purchaseResults) {
for (IapPurchaseResult purchaseResult : purchaseResults) {
if (purchaseResult.isSuccess()) {
// 成功
IapPurchase purchase = purchaseResult.getPurchase();
} else {
// 失敗
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// onCreateが呼び出された時、Listenerを登録します。
NhnCloudIap.registerPurchasesUpdatedListener(mPurchaseUpdatedListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
// onDestroy()が呼び出された時、必ずListenerを削除します。
NhnCloudIap.unregisterPurchasesUpdatedListener(mPurchaseUpdatedListener);
}
}
[参考]決済の結果がIapService.PurchasesUpdatedListenerで通知される前にActivityが終了すると、決済データが失われる場合があります。 決済を安全に処理するために、決済結果の通知を受け取る前にユーザーがActivityを終了(バックボタンまたは終了ボタンをタップ)できないようにする必要があります。
/* NhnCloudIap.java */
public static void queryProductDetails(Activity activity,
IapService.ProductDetailsResponseListener listener)
Method | Parameters | |
---|---|---|
queryProductDetails | activity | Activity:現在有効になっているActivity |
listener | IapService. ProductDetailsResponseListener: 商品照会結果リスナー |
/**
* 購入可能な商品を照会します。
* <p>
* productDetails :購入可能な商品リスト
* invalidProducts :NHN Cloud IAPコンソールに商品を登録しましたが、ストアに登録されていない商品
*/
void queryProductDetails() {
IapService.ProductDetailsResponseListener responseListener =
new IapService.ProductDetailsResponseListener() {
@Override
public void onProductDetailsResponse(@NonNull IapResult result,
@Nullable List<IapProductDetails> productDetails,
@Nullable List<IapProduct> invalidProducts) {
if (result.isSuccess()) {
// 照会成功
} else {
// 照会失敗
}
}
}
NhnCloudIap.queryProductDetails(MainActivity.this, responseListener);
}
/* NhnCloudIap.java */
public static void launchPurchaseFlow(Activity activity,
IapPurchaseFlowParams params)
Method | Parameters | |
---|---|---|
launchPurchaseFlow | activity | Activity:現在有効になっているActivity |
params | IapPurchaseFlowParams:購入情報パラメータ |
/**
* 商品を購入します。
*/
void launchPurchaseFlow(Activity activity, String productId) {
IapPurchaseFlowParams params = IapPurchaseFlowParams.newBuilder()
.setProductId(productId)
.build();
NhnCloudIap.launchPurchaseFlow(activity, params);
}
``java String userData = "userData" IapPurchase FlowParams params = IapPurchase FlowParams.newBuilder() .setProductId(productId) .setDeveloperPayload(userData) .build() NhnCloudIap. launchPurchase Flow(activity、params) ````
Google Play Storeでプロモーションコードで商品を購入した場合は、ユーザーデータは利用できません。
/* NhnCloudIap.java */
public static void queryConsumablePurchases(Activity activity,
IapQueryPurchasesParams params,
IapService.PurchasesResponseListener listener)
Method | Parameters | |
---|---|---|
queryConsumablePurchases | activity | Activity:現在有効になっているActivity |
params | IapQueryPurchasesParams:未消費購入履歴照会パラメータ | |
listener | IapService.PurchasesResponseListener: 未消費購入履歴照会結果リスナー |
/**
* 未消費決済履歴を照会します。
*/
void queryConsumablePurchases(boolean isQueryAllStores) {
IapQueryPurchasesParams params = IapQueryPurchasesParams.newBuilder()
.setQueryAllStores(isQueryAllStores) // すべてのストア照会: true、現在ストア照会: false
.build();
PurchasesResponseListener responseListenr =
new IapService.PurchasesResponseListener() {
@Override
public void onPurchasesResponse(@NonNull IapResult result,
@Nullable List<IapPurchase> purchases) {
if (result.isSuccess()) {
// 成功
} else {
// 失敗
}
}
};
NhnCloudIap.queryConsumablePurchases(MainActivity.this, params, responseListenr);
}
現在、購読商品はGoogle Play Storeのみサポートします。
/* NhnCloudIap.java */
public static void queryActivatedPurchases(Activity activity,
IapQueryPurchasesParams params,
PurchasesResponseListener listener)
Method | Parameters | |
---|---|---|
queryActivatedPurchases | activity | Activity:現在有効になっているActivity |
params | IapQueryPurchasesParams:有効になっている購読照会パラメータ | |
listener | IapService.PurchasesResponseListener: 有効になっている購読照会結果リスナー |
/**
* 有効になっている購読商品照会
*/
void queryActivatedPurchases(boolean isQueryAllStores) {
IapQueryPurchasesParams params = IapQueryPurchasesParams.newBuilder()
.setQueryAllStores(isQueryAllStores) // すべてのストア照会:true、現在ストア照会:false
.build();
PurchasesResponseListener responseListener =
new IapService.PurchasesResponseListener() {
@Override
public void onPurchasesResponse(@NonNull IapResult result,
@Nullable List<IapPurchase> purchases) {
if (result.isSuccess()) {
// 成功
} else {
// 失敗
}
}
};
NhnCloudIap.queryActivatedPurchases(MainActivity.this, params, responseListener);
}
現在サブスクリプション商品はGoogle Playストアのみサポートします。
/* NhnCloudIap.java */
public static void querySubscriptionsStatus(Activity activity,
boolean includeExpiredSubscriptions,
IapService.SubscriptionsStatusResponseListener listener)
Method | Parameters | |
---|---|---|
querySubscriptionsStatus | activity | Activity:現在有効になっているActivity |
includeExpiredSubscriptions | boolean: サブスクリプション有効期限切れのサブスクリプション商品の状態を含むかどうか |
|
listener | IapService.SubscriptionsStatusResponseListener: サブスクリプション状態照会結果リスナー |
/**
* サブスクリプション状態照会
*/
private void querySubscriptionsStatus() {
SubscriptionsStatusResponseListener listener =
new SubscriptionsStatusResponseListener() {
@Override
public void onSubscriptionsStatusResponse(@NonNull String storeCode,
@Nullable List<IapSubscriptionStatus> subscriptionsStatus) {
if (result.isSuccess()) {
// 成功
} else {
// 失敗
}
}
};
NhnCloudIap.querySubscriptionsStatus(MainActivity.this, false, listener);
}
GooglePlayのサブスクリプション決済の更新および有効期限などのライフサイクルに応じたイベントを処理する方法を説明します。 詳細については定期決済別機能追加を参照してください。
GooglePlay Storeのサブスクリプションは、ライフサイクルの間にさまざまな状態変更を経て、アプリは各状態に応じて対応する必要があります。
状態 | 未消費決済照会 (NhnCloudIap.queryConsumablePurchases) |
有効なサブスクリプション照会 (NhnCloudIap.queryActivatedPurchases) |
有効期限 | 自動更新するかどうか |
---|---|---|---|---|
アクティブ(Active) | Yes | Yes | 未来の時間 | Yes |
キャンセル(Cancelled) | Yes | Yes | 未来の時間 | No |
猶予期間(In grace period) | No | Yes | 未来の時間 | Yes |
アカウント保留(On hold) | No | No | 過去の時間 | Yes |
一時停止(Pause) | No | No | 過去の時間 | Yes |
有効期限(Expired) | No | No | 過去の時間 | No |
猶予期間を使用する設定になっている場合、決済サイクルが終わる時に決済方法に問題があれば定期決済は猶予期間に切り替わります。 猶予期間中、ユーザーは定期決済コンテンツにアクセスできなければいけません。 詳細については、猶予期間を参照してください。
注意!) 猶予期間中に決済方法の修正などで復元されると、自動更新を再開します。NHN Cloud IAPは更新された決済の結果を決済アップデートリスナー(IapService.PurchaseUpdatedListener)を介して通知します。ゲームやアプリは重要な動作中に決済アップデートリスナーにより不要なポップアップがユーザーに表示されないように注意する必要があります。
アカウント保留は、決済方法の問題で更新が失敗した時のユーザーの状態を指します。 決済に失敗した場合、猶予期間中に再試行を行い、猶予期間中にも決済が失敗した場合、定期決済状態は保留状態になります。 アカウント保留状態のユーザーは定期決済コンテンツにアクセスできません。 アカウント保留期間は最大30日です。 アカウント保留期間が終了する前に決済方法を修正しなかった場合、キャンセル処理されます。 詳細については、アカウント保留を参照してください。
注意!) アカウント保留期間中に決済方法の修正などで復元されると、自動更新を再開します。NHN Cloud IAPは更新された決済の結果を決済アップデートリスナー(IapService.PurchaseUpdatedListener)を介して通知します。ゲームやアプリは重要な動作中に決済アップデートリスナーにより不要なポップアップがユーザーに表示されないように注意する必要があります。
一時停止機能を設定すると、ユーザーは定期決済を1週間から3か月の間、一時停止することができます。 定期決済の一時停止は、現在のサブスクリプション期間が終了した後に適用されます。 一時停止期間が終了すると定期決済が自動的に再開されます。 詳細については、一時停止を参照してください。
注意!) 一時停止期間が終了すると自動更新を再開します。NHN Cloud IAPは更新された決済の結果を決済アップデートリスナー(IapService.PurchaseUpdatedListener)を介して通知します。ゲームやアプリは重要な動作中に決済アップデートリスナーにより不要なポップアップがユーザーに表示されないように注意する必要があります。
定期決済再申請機能を設定すると、ユーザーが定期決済の有効期限から12か月以内にキャンセルした定期決済を再申請できます。 定期決済の再申請は、新しい定期決済と購入トークンが作成されます。 定期決済の期限が切れた後、ユーザーはGoogle Play定期決済センターを介して期限が切れた後1年間、同じ商品を再購入することができます。 詳細については、定期決済再申請を参照してください。
注意!) アプリやゲーム内画面で購入が行われないため、ユーザーデータ(IapPurchase.getDeveloperPayload())を使用できません。 注意!) Google Playストアにおいて、定期決済再申請でサブスクリプション商品を購入する場合、NHN Cloud IAPは購入した決済の結果を決済アップデートリスナー(IapService.PurchaseUpdatedListener)を介して通知します。ゲームやアプリは重要な動作中に決済アップデートリスナーにより不要なポップアップがユーザーに表示されないように注意する必要があります。
NHN Cloud IAP初期化メソッドのパラメータに使用されるアプリ内決済設定情報です。
/* NhnCloudIapConfiguration.java */
public String getAppKey();
public String getStoreCode();
Method | Returns | |
---|---|---|
getAppKey | String | IAPサービスアプリキー |
getStoreCode | String | ストアコード情報("GG" or "ONESTORE", "GALAXY", ...) |
IAPサービスアプリキー、ストア種類などを入力し、NhnCloudIapConfigurationオブジェクトを作成します。
/* NhnCloudIapConfiguration.java */
public void setAppKey(String appKey)
public void setStoreCode(String storeCode)
Method | Parameters | Description | |
---|---|---|---|
setAppKey | appKey | String: IAPサービスアプリキー | TOAST IAPコンソールで作成したアプリキーを設定します。 |
setStoreCode | storeCode | String:ストアコード情報 | ストアコードを設定します。 ("GG" or "ONESTORE", "GALAXY", ...) |
/* IapStoreCode.java */
String GOOGLE_PLAY_STORE
String ONE_STORE
String GALAXY_STORE
String AMAZON_APP_STORE
String HUAWEI_APP_GALLERY
String MYCARD
/* IapPurchaseResult.java */
public IapPurchase getPurchase()
public boolean isSuccess()
public boolean isFailure()
public int getCode()
public String getMessage()
public Throwable getCause()
Method | Returns | |
---|---|---|
getPurchase | IapPurchase | 決済情報があるIapPurchaseオブジェクトを返します。 |
getCode | int | 決済結果コードを返します。 |
getMessage | String | 決済結果メッセージを返します。 |
getCause | Throwable | 決済失敗原因を返します。 |
isSuccess | boolean | 決済に成功したかを返します。 |
isFailure | boolean | 決済に失敗したかを返します。 |
/* IapResult.java */
public boolean isSuccess()
public boolean isFailure()
public int getCode()
public String getMessage()
public Throwable getCause()
Method | Returns | |
---|---|---|
getCode | int | 結果コードを返します。 |
getMessage | String | 結果メッセージを返します。 |
getCause | Throwable | 失敗原因を返します。 |
isSuccess | boolean | 成功したかを返します。 |
isFailure | boolean | 失敗したかを返します。 |
/* IapPurchase.java */
public String getPaymentId()
public String getOriginalPaymentId()
public String getPaymentSequence()
public String getProductId()
public String getProductType()
public String getUserId()
public float getPrice()
public String getPriceCurrencyCode()
public String getAccessToken()
public String getPurchaseType()
public String getPurchaseTime()
public String getExpiryTime()
Method | Returns | |
---|---|---|
getPaymentId | String | 決済IDを返します。 |
getOriginalPaymentId | String | 原本決済IDを返します。 |
getPaymentSequence | String | 決済固有番号を返します。 |
getProductId | String | 商品IDを返します。 |
getProductType | String | 商品タイプを返します。 |
getUserId | String | ユーザーIDを返します。 |
getPrice | float | 価格情報を返します。 |
getPriceCurrencyCode | String | 通貨情報を返します。 |
getAccessToken | String | 消費に使用されるトークンを返します。 |
getPurchaseType | String | 商品タイプを返します。 |
getPurchaseTime | long | 商品購入時間を返します。 |
getExpiryTime | long | 購読商品の残り時間を返します。 |
/* IapProductDetails.java */
public String getProductId()
public String getProductSequence()
public float getPrice()
public String getLocalizedPrice()
public String getPriceCurrencyCode()
public long getPriceAmountMicros()
public String getFreeTrialPeriod()
public String getSubscriptionPeriod()
public String getProductType()
public String getProductTitle()
public String getProductDescription()
public boolean isActivated()
Method | Returns | |
---|---|---|
getProductId | String | 商品のID |
getProductSequence | String | 商品固有番号 |
getPrice | float | 価格 |
getLocalizedPrice | String | 現地価格 |
getPriceCurrencyCode | String | 通貨 |
getPriceAmountMicros | long | 1,000,000単位価格 |
getFreeTrialPeriod | String | 無料使用期間 |
getSubscriptionPeriod | String | 購読期間 |
getProductType | String | 商品タイプ |
getProductTitle | String | 商品タイトル(title) |
getProductDescription | String | 商品説明 |
isActivated | boolean | 商品が有効になっているか |
/* IapProduct.java */
public String getProductId()
public String getProductSequence()
public String getProductType()
public String getProductTitle()
public String getProductDescription()
public boolean isActivated()
Method | Returns | |
---|---|---|
getProductId | String | 商品のID |
getProductSequence | String | 商品固有番号 |
getProductType | String | 商品タイプ |
getProductTitle | String | 商品タイトル(title) |
getProductDescription | String | 商品説明 |
isActivated | boolean | 商品が有効になっているか |
/* IapPurchaseFlowParams.java */
public String getProductId()
Method | Returns | |
---|---|---|
getProductId | String | 商品ID |
/* IapPurchaseFlowParams.java */
public void setProductId(String productId)
Method | Parameters | Description | |
---|---|---|---|
setProductId | productId | String:商品ID | 商品IDを設定します。 |
/* IapQueryPurchasesParams.java */
public String isQueryAllStores()
Method | Returns | |
---|---|---|
isQueryAllStores | boolean | すべてのストア照会 |
/* IapQueryPurchasesParams.java */
public void setQueryAllStores(boolean isQueryAllStores)
Method | Parameters | Description | |
---|---|---|---|
setQueryAllStores | isQueryAllStores | boolean:すべてのストア照会 | 照会範囲を設定します。 |
/* IapSubscriptionStatus.java */
public String getStoreCode()
public String getPaymentId()
public String getOriginalPaymentId()
public String getPaymentSequence()
public String getProductId()
public String getProductType()
public String getProductSequence()
public String getUserId()
public float getPrice()
public String getPriceCurrencyCode()
public String getAccessToken()
public String getPurchaseType()
public String getPurchaseTime()
public String getExpiryTime()
public String getDeveloperPayload()
public int getStatusCode()
public String getStatusDescription()
Method | Returns | |
---|---|---|
getStoreCode | String | ストアコードを返します。 |
getPaymentId | String | 決済IDを返します。 |
getOriginalPaymentId | String | 元の決済IDを返します。 |
getPaymentSequence | String | 決済固有番号を返します。 |
getProductId | String | 商品IDを返します。 |
getProductType | String | 商品タイプを返します。 |
getProductSeq | String | 商品固有番号を返します。 |
getUserId | String | ユーザーIDを返します。 |
getPrice | float | 価格情報を返します。 |
getPriceCurrencyCode | String | 通貨情報を返します。 |
getAccessToken | String | 消費に使用されるトークンを返します。 |
getPurchaseType | String | 決済タイプを返します。 "Test" or "Promo" or null |
getPurchaseTime | long | 商品購入時間を返します。 |
getExpiryTime | long | サブスクリプション商品の残り時間を返します。 |
getDeveloperPayload | String | ユーザーデータを返します。 |
getStatusCode | int | サブスクリプションのステータスコードを返します。 |
getStatusDescription | String | サブスクリプションのステータスコードの説明を返します。 |
/* IapSubscriptionStatus.java */
int ACTIVE
int CANCELED
int ON_HOLD
int IN_GRACE_PERIOD
int PAUSED
int REVOKED
int EXPIRED
int UNKNOWN
Name | Code | Status | Description |
---|---|---|---|
ACTIVE | 0 | アクティブ | サブスクリプションがアクティブ状態です。 |
CANCELED | 3 | キャンセル | サブスクリプションがキャンセルされました。 |
ON_HOLD | 5 | アカウント保留 | 定期決済がアカウント保留状態になりました(使用する設定になっている場合)。 |
IN_GRACE_PERIOD | 6 | 猶予期間 | 定期決済が猶予期間状態になりました(使用する設定になっている場合)。 |
PAUSED | 10 | 一時停止 | サブスクリプションが一時停止しました。 |
REVOKED | 12 | 解約 | 定期決済が有効期限前にユーザーによってキャンセルされました。 |
EXPIRED | 13 | 有効期限切れ | 定期決済の期限が切れました。 |
UNKNOWN | 9999 | 未定義 | 定義されていない状態です。 |
void onPurchasesUpdated(List<IapPurchaseResult> purchaseResults)
void onPurchasesResponse(IapResult result,
List<IapPurchase> purchaseList)
void onSubscriptionsStatusResponse(IapResult result,
List<IapSubscriptionStatus> subscriptionsStatus);
RESULT | CODE | DESC |
---|---|---|
FEATURE_NOT_SUPPORTED | -2 | 要請した機能はサポートしません。 Requested feature is not supported. |
SERVICE_DISCONNECTED | -1 | ストアサービスに接続できませんでした。 Store service is not connected. |
OK | 0 | 成功。 Success. |
USER_CANCELED | 1 | ユーザーキャンセル。 User canceled. |
SERVICE_UNAVAILABLE | 2 | ネットワークが接続されませんでした。 Network connection is down. |
BILLING_UNAVAILABLE | 3 | 要請されたタイプに対して、API Versionがサポートされていません。 API version is not supported for the type requested. |
PRODUCT_UNAVAILABLE | 4 | 要請した商品を使用できません。 Requested product is not available. |
DEVELOPER_ERROR | 5 | 無効な引数がAPIに提供されました。開発段階で発生するエラーです。 Developer error. |
ERROR | 6 | API作業中に深刻なエラーが発生しました。 Fatal error during the API action. |
PRODUCT_ALREADY_OWNED | 7 | すでに所持している商品のため、購入できませんでした。 Failure to purchase since item is already owned. |
PRODUCT_NOT_OWNED | 8 | 所持していない商品のため、消費できません。 Failure to consume since item is not owned. |
USER_ID_NOT_REGISTERED | 9 | ユーザーIDが登録されていません。 User ID Is not registered. |
NETWORK_ERROR | 12 | ネットワークエラーが発生しました。 A network error occurred during the operation. |
UNDEFINED_ERROR | 9999 | 定義されていないエラー Undefined error. |
RESULT | CODE | DESC |
---|---|---|
INACTIVATED_APP | 101 | 有効になっていないアプリです。 App is not active. |
VERIFY_PURCHASE_FAILED | 103 | 決済の検証に失敗しました。 Failure to verify purchase. |
PURCHASE_ALREADY_CONSUMED | 104 | すでに消費した購入です。 Purchase already consumed. |
PURCHASE_ALREADY_REFUNDED | 105 | 返金された購入です。 Purchase already refunded. |
PURCHASE_LIMIT_EXCEEDED | 106 | 購入限度を超過しました。 Purchase limit exceeded. |
RESULT | CODE | DESC |
---|---|---|
ONESTORE_NEED_LOGIN | 301 | ONE storeサービスにログインしていません。 ONE store service is not logged in. |
ONESTORE_NEED_UPDATE | 302 | ONE storeサービスがアップデートまたはインストールされませんでした。 ONE store service is not updated or installed. |
ONESTORE_SECURITY_ERROR | 303 | 正常ではないアプリで決済を要請しました。 Abnormal purchase request. |
ONESTORE_PURCHASE_FAILED | 304 | 決済要請に失敗しました。 Purchase request failed. |
RESULT | CODE | DESC |
---|---|---|
GALAXY_NOT_LOGGED_IN | 501 | Galaxy storeサービスにログインしていません。 Galaxy service is not logged in. |
GALAXY_NOT_UPDATED | 502 | Galaxy storeサービスがアップデートまたはインストールされませんでした。 Galaxy service is not updated or installed. |
GALAXY_PURCHASE_FAILED | 503 | 正常ではないアプリで決済を要請しました。 Galaxy purchase failed. |
GALAXY_SERVICE_DENIED | 504 | 決済要請に失敗しました。 PurGalaxy service denied. |