|
| 1 | +/* |
| 2 | + * Copyright (C) 2012 The Android Open Source Project |
| 3 | + * |
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | + * you may not use this file except in compliance with the License. |
| 6 | + * You may obtain a copy of the License at |
| 7 | + * |
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | + * |
| 10 | + * Unless required by applicable law or agreed to in writing, software |
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | + * See the License for the specific language governing permissions and |
| 14 | + * limitations under the License. |
| 15 | + */ |
| 16 | + |
| 17 | +package com.android.vending.billing; |
| 18 | + |
| 19 | +import android.os.Bundle; |
| 20 | + |
| 21 | +/** |
| 22 | + * InAppBillingService is the service that provides in-app billing version 3 and beyond. |
| 23 | + * This service provides the following features: |
| 24 | + * 1. Provides a new API to get details of in-app items published for the app including |
| 25 | + * price, type, title and description. |
| 26 | + * 2. The purchase flow is synchronous and purchase information is available immediately |
| 27 | + * after it completes. |
| 28 | + * 3. Purchase information of in-app purchases is maintained within the Google Play system |
| 29 | + * till the purchase is consumed. |
| 30 | + * 4. An API to consume a purchase of an inapp item. All purchases of one-time |
| 31 | + * in-app items are consumable and thereafter can be purchased again. |
| 32 | + * 5. An API to get current purchases of the user immediately. This will not contain any |
| 33 | + * consumed purchases. |
| 34 | + * |
| 35 | + * All calls will give a response code with the following possible values |
| 36 | + * RESULT_OK = 0 - success |
| 37 | + * RESULT_USER_CANCELED = 1 - user pressed back or canceled a dialog |
| 38 | + * RESULT_BILLING_UNAVAILABLE = 3 - this billing API version is not supported for the type requested |
| 39 | + * RESULT_ITEM_UNAVAILABLE = 4 - requested SKU is not available for purchase |
| 40 | + * RESULT_DEVELOPER_ERROR = 5 - invalid arguments provided to the API |
| 41 | + * RESULT_ERROR = 6 - Fatal error during the API action |
| 42 | + * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned |
| 43 | + * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned |
| 44 | + */ |
| 45 | +interface IInAppBillingService { |
| 46 | + /** |
| 47 | + * Checks support for the requested billing API version, package and in-app type. |
| 48 | + * Minimum API version supported by this interface is 3. |
| 49 | + * @param apiVersion the billing version which the app is using |
| 50 | + * @param packageName the package name of the calling app |
| 51 | + * @param type type of the in-app item being purchased "inapp" for one-time purchases |
| 52 | + * and "subs" for subscription. |
| 53 | + * @return RESULT_OK(0) on success, corresponding result code on failures |
| 54 | + */ |
| 55 | + int isBillingSupported(int apiVersion, String packageName, String type); |
| 56 | + |
| 57 | + /** |
| 58 | + * Provides details of a list of SKUs |
| 59 | + * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle |
| 60 | + * with a list JSON strings containing the productId, price, title and description. |
| 61 | + * This API can be called with a maximum of 20 SKUs. |
| 62 | + * @param apiVersion billing API version that the Third-party is using |
| 63 | + * @param packageName the package name of the calling app |
| 64 | + * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST" |
| 65 | + * @return Bundle containing the following key-value pairs |
| 66 | + * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on |
| 67 | + * failure as listed above. |
| 68 | + * "DETAILS_LIST" with a StringArrayList containing purchase information |
| 69 | + * in JSON format similar to: |
| 70 | + * '{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00", |
| 71 | + * "title : "Example Title", "description" : "This is an example description" }' |
| 72 | + */ |
| 73 | + Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle); |
| 74 | + |
| 75 | + /** |
| 76 | + * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU, |
| 77 | + * the type, a unique purchase token and an optional developer payload. |
| 78 | + * @param apiVersion billing API version that the app is using |
| 79 | + * @param packageName package name of the calling app |
| 80 | + * @param sku the SKU of the in-app item as published in the developer console |
| 81 | + * @param type the type of the in-app item ("inapp" for one-time purchases |
| 82 | + * and "subs" for subscription). |
| 83 | + * @param developerPayload optional argument to be sent back with the purchase information |
| 84 | + * @return Bundle containing the following key-value pairs |
| 85 | + * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on |
| 86 | + * failure as listed above. |
| 87 | + * "BUY_INTENT" - PendingIntent to start the purchase flow |
| 88 | + * |
| 89 | + * The Pending intent should be launched with startIntentSenderForResult. When purchase flow |
| 90 | + * has completed, the onActivityResult() will give a resultCode of OK or CANCELED. |
| 91 | + * If the purchase is successful, the result data will contain the following key-value pairs |
| 92 | + * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on |
| 93 | + * failure as listed above. |
| 94 | + * "INAPP_PURCHASE_DATA" - String in JSON format similar to |
| 95 | + * '{"orderId":"12999763169054705758.1371079406387615", |
| 96 | + * "packageName":"com.example.app", |
| 97 | + * "productId":"exampleSku", |
| 98 | + * "purchaseTime":1345678900000, |
| 99 | + * "purchaseToken" : "122333444455555", |
| 100 | + * "developerPayload":"example developer payload" }' |
| 101 | + * "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that |
| 102 | + * was signed with the private key of the developer |
| 103 | + * TODO: change this to app-specific keys. |
| 104 | + */ |
| 105 | + Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type, |
| 106 | + String developerPayload); |
| 107 | + |
| 108 | + /** |
| 109 | + * Returns the current SKUs owned by the user of the type and package name specified along with |
| 110 | + * purchase information and a signature of the data to be validated. |
| 111 | + * This will return all SKUs that have been purchased in V3 and managed items purchased using |
| 112 | + * V1 and V2 that have not been consumed. |
| 113 | + * @param apiVersion billing API version that the app is using |
| 114 | + * @param packageName package name of the calling app |
| 115 | + * @param type the type of the in-app items being requested |
| 116 | + * ("inapp" for one-time purchases and "subs" for subscription). |
| 117 | + * @param continuationToken to be set as null for the first call, if the number of owned |
| 118 | + * skus are too many, a continuationToken is returned in the response bundle. |
| 119 | + * This method can be called again with the continuation token to get the next set of |
| 120 | + * owned skus. |
| 121 | + * @return Bundle containing the following key-value pairs |
| 122 | + * "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on |
| 123 | + * failure as listed above. |
| 124 | + * "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs |
| 125 | + * "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information |
| 126 | + * "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures |
| 127 | + * of the purchase information |
| 128 | + * "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the |
| 129 | + * next set of in-app purchases. Only set if the |
| 130 | + * user has more owned skus than the current list. |
| 131 | + */ |
| 132 | + Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken); |
| 133 | + |
| 134 | + /** |
| 135 | + * Consume the last purchase of the given SKU. This will result in this item being removed |
| 136 | + * from all subsequent responses to getPurchases() and allow re-purchase of this item. |
| 137 | + * @param apiVersion billing API version that the app is using |
| 138 | + * @param packageName package name of the calling app |
| 139 | + * @param purchaseToken token in the purchase information JSON that identifies the purchase |
| 140 | + * to be consumed |
| 141 | + * @return 0 if consumption succeeded. Appropriate error values for failures. |
| 142 | + */ |
| 143 | + int consumePurchase(int apiVersion, String packageName, String purchaseToken); |
| 144 | +} |
0 commit comments