Android SDK 参考
Aghanim Android SDK 允许您在 Android 应用中使用 Checkout。
集成
要集成 SDK,请查看其先决条件和详细说明,参见集成 → Android。
方法参考
获取未消费的订单
要了解哪些订单已付款但未发放,请使用 getUnconsumed 或 getUnconsumedAsync 方法。
- Coroutines
- Async callbacks
- Kotlin
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val unconsumedResult = aghanim.orders.getUnconsumed()) {
is ApiResult.Success -> {
// Player has paid but not granted items from orders
val unconsumedOrderIds = unconsumedResult.value
// TODO: Save order IDs for further consuming and granting
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Orders", "Failed to get unconsumed orders: ${unconsumedResult.error}")
// TODO: Handle error
}
}
- Kotlin
import com.aghanim.android.sdk.common.api.callbacks.OrderListCallback
import com.aghanim.android.sdk.common.api.result.ApiError
import android.util.Log
aghanim.orders.getUnconsumedAsync(
callback = object : OrderListCallback {
override fun onSuccess(orderIds: List<String>) {
// Player has paid but not granted items from orders
val unconsumedOrderIds = orderIds
// TODO: Save order IDs for further consuming and granting
}
override fun onError(failure: ApiError) {
// Log debug information for troubleshooting
Log.e("Orders", "Failed to get unconsumed orders: ${failure.debugMessage}")
// TODO: Handle error
}
}
)
| 参数 | 类型 | 必填项 | 描述 |
|---|---|---|---|
onSuccess | Action<string[]> | 如果没有错误,则为是 | 在成功结果时调用的回调。 |
onError | Action<string> | 如果没有成功,则为是 | 在失败结果时调用的回调。 |
消费已支付订单
要让 SDK 确认您已通过订单向玩家授予商品,请使用 consume 或 consumeAsync 方法。
- Coroutines
- Async callbacks
- Kotlin
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val consumeResult = aghanim.orders.consume(orderId)) {
is ApiResult.Success -> {
// Paid orders are marked as consumed
Log.d("Orders", "Order $orderId is successfully consumed")
// TODO: Grant items in order to player
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Orders", "Failed to consume order: ${consumeResult.error}")
// TODO: Handle error
}
}
- Kotlin
import com.aghanim.android.sdk.common.api.callbacks.ConsumeCallback
import com.aghanim.android.sdk.common.api.result.ApiError
import android.util.Log
aghanim.orders.consumeAsync(
orderId = orderId,
callback = object : ConsumeCallback {
override fun onSuccess() {
// Paid orders are marked as consumed
Log.d("Orders", "Order $orderId is successfully consumed")
// TODO: Grant items in order to player
}
override fun onError(failure: ApiError) {
// Log debug information for troubleshooting
Log.e("Orders", "Failed to consume order: ${failure.debugMessage}")
// TODO: Handle error
}
}
)
| 参数 | 类型 | 必填项 | 描述 |
|---|---|---|---|
orderId | string | 是 | 订单的唯一 ID。 |
onSuccess | Action | 如果没有错误,则为是 | 在成功结果时调用的回调。 |
onError | Action<string> | 如果没有成功,则为是 | 在失败结果时调用的回调。 |
设置玩家 ID
要为当前 SDK 实例设置一次玩家 ID,使用 setPlayerId 方法。 SDK 将在所有后续方法调用中使用此 ID。
- Kotlin
aghanim.setPlayerId(playerId)
| 参数 | 类型 | 必填项 | 描述 |
|---|---|---|---|
playerId | string | 是 | 玩家的唯一 ID。 |
获取商品列表
要检索带本地化价格的商品,请使用 items.get 或 items.getAsync 方法。 该方法会返回在 SKU Management → Items 中创建的商品,并根据玩家的地区对价格进行本地化。
- Coroutines
- Async callbacks
- Kotlin
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.items.get(
skus = listOf("your-item-sku"),
)) {
is ApiResult.Success -> {
val items = result.value
items.forEach { item ->
// Use item.name, item.price.display, item.imageUrl to populate your store
Log.d("Items", "${item.name}: ${item.price.display}")
}
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Items", "Failed to get items: ${result.error}")
// TODO: Handle error
}
}
- Kotlin
import com.aghanim.android.sdk.common.api.callbacks.ItemsCallback
import com.aghanim.android.sdk.common.api.models.item.Item
import com.aghanim.android.sdk.common.api.result.ApiError
import android.util.Log
aghanim.items.getAsync(
skus = listOf("your-item-sku"),
locale = null,
callback = object : ItemsCallback {
override fun onSuccess(items: List<Item>) {
items.forEach { item ->
// Use item.name, item.price.display, item.imageUrl to populate your store
Log.d("Items", "${item.name}: ${item.price.display}")
}
}
override fun onError(failure: ApiError) {
// Log debug information for troubleshooting
Log.e("Items", "Failed to get items: ${failure.debugMessage}")
// TODO: Handle error
}
}
)
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
skus | List<String> | 是 | 要检索的商品 SKU 列表(最多 50 个)。 |
locale | 区域设置 | 否 | 用于价格格式化的区域设置。 在 Checkout → Locales 中查找支持的完整区域设置列表。 |
onSuccess | Action<List<Item>> | 无错误则为是 | 在结果成功时调用的回调。 |
onError | Action<ApiError> | 无成功则为是 | 在结果失败时调用的回调。 |
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
skus | List<String> | 是 | 要检索的商品 SKU 列表(最多 50 个)。 |
区域设置 | 区域设置 | 否 | 用于价格格式化的区域设置。 在 Checkout → Locales 中查看支持的区域设置完整列表。 |
创建 Checkout 商品
要创建商品表示,请使用 CheckoutItem 方法。 商品应已在 SKU 管理 → 商品 中创建。
- Kotlin
import com.aghanim.android.sdk.checkout.core.api.models.CheckoutItem
val checkoutItem = CheckoutItem(
sku = "CRS-82500"
)
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
sku | string | 是 | 来自控制台的商品 SKU。 |
name | string | 否 | 来自控制台的商品名称。 |
description | string | 否 | 来自控制台的商品描述。 |
imageUrl | string | 否 | 来自控制台的商品图片 URL。 |
quantity | int | 否 | 商品数量。 |
创建重定向行为
要选择支付成功后重定向玩家的行为,请使用 RedirectSettings 方法。
- Immediate
- Delayed
- No redirect
玩家完成支付后,SDK 会立即重定向到 backToGameUrl 的深链接。
- Kotlin
import com.aghanim.android.sdk.common.api.models.order.RedirectSettings
import com.aghanim.android.sdk.common.api.models.order.RedirectMode
val redirectSettings = RedirectSettings(
mode = RedirectMode.IMMEDIATE
)
玩家完成支付后,SDK 会显示成功支付的屏幕,然后将玩家重定向到 backToGameUrl 的深链接。
- Kotlin
import com.aghanim.android.sdk.common.api.models.order.RedirectSettings
import com.aghanim.android.sdk.common.api.models.order.RedirectMode
val redirectSettings = RedirectSettings(
mode = RedirectMode.DELAYED,
delaySeconds = 5
)
玩家完成支付后,他们停留在成功支付的屏幕上。 若要退出,他们可以手动关闭或导航离开。 之后,你应该亲自将他们重定向到 backToGameUrl 的深链接。
- Kotlin
import com.aghanim.android.sdk.common.api.models.order.RedirectSettings
import com.aghanim.android.sdk.common.api.models.order.RedirectMode
val redirectSettings = RedirectSettings(
mode = RedirectMode.NO_REDIRECT
)
| 参数 | 类型 | 必填项 | 描述 |
|---|---|---|---|
mode | RedirectMode | 是 | 重定向模式。 可能的值:Immediate,Delayed,NoRedirect。 |
delaySeconds | int | 是如果是 Delayed | 以秒为单位的延迟。 对于 Delayed 模式,默认为 5。 |
创建 UI 设置
要设置 Checkout 的外观模式,请使用 UiSettings 方法。
- Auto
- Dark
- Light
SDK 会根据系统设置自动检测并应用相应的外观模式。
- Kotlin
import com.aghanim.android.sdk.checkout.core.api.models.UiSettings
import com.aghanim.android.sdk.checkout.core.api.models.UiMode
val uiSettings = UiSettings(
mode = UiMode.AUTO
)
SDK 会强制 Checkout UI 使用深色模式外观。
- Kotlin
import com.aghanim.android.sdk.checkout.core.api.models.UiSettings
import com.aghanim.android.sdk.checkout.core.api.models.UiMode
val uiSettings = UiSettings(
mode = UiMode.DARK
)
SDK 会强制 Checkout UI 使用浅色模式外观。
- Kotlin
import com.aghanim.android.sdk.checkout.core.api.models.UiSettings
import com.aghanim.android.sdk.checkout.core.api.models.UiMode
val uiSettings = UiSettings(
mode = UiMode.LIGHT
)
| 参数 | 类型 | 必填项 | 描述 |
|---|---|---|---|
mode | UiMode | 是 | UI 模式。 可选值:Auto、Dark、Light。 |
创建 Checkout 参数
要创建 Checkout 参数,玩家在支付表单上看到的表示,请使用 CheckoutParams 方法。
- Native UI
- Others
对于本地 UI 启动模式,创建 Checkout 参数较为简单。 由于 Checkout 不使用浏览器启动,无需传递 backToGameUrl。
- Kotlin
import com.aghanim.android.sdk.checkout.core.api.models.CheckoutParams
import com.aghanim.android.sdk.common.api.models.common.Locale
val checkoutParams = CheckoutParams(
items = listOf(checkoutItem),
customMessage = "Holiday Sale!",
locale = null
)
对于应用内浏览器和默认浏览器启动模式,创建 Checkout 参数略有不同。 由于 Checkout 在浏览器中启动,你应传递 backToGameUrl。
- Kotlin
import com.aghanim.android.sdk.checkout.core.api.models.CheckoutParams
import com.aghanim.android.sdk.common.api.models.common.Locale
val checkoutParams = CheckoutParams(
items = listOf(checkoutItem),
customMessage = "Holiday Sale!",
backToGameUrl = "https://<YOUR_DOMAIN>/checkout-complete",
locale = null
)
| 参数 | 类型 | 必填项 | 描述 |
|---|---|---|---|
items | List<CheckoutItem> | 是 | 商品列表。 |
metadata | Map<string, string> | 否 | 用于追踪目的的“键值对”结构的元数据。 |
priceTemplateId | string | 否 | 用于本地化的价格模板 ID,参见获取价格点。 |
区域设置 | string | 否 | 适用于商品名称和描述本地化的区域设置。 在 Checkout → Locales 中查看支持的区域设置完整列表。 |
customMessage | string | 否 | Checkout 页面消息。 |
backToGameUrl | string | 否 | 返回玩家至应用程序的深层链接 URL。 如未提供则自动生成。 |
redirectSettings | RedirectSettings | 否 | 支付后的重定向行为。 |
uiSettings | UiSettings | 否 | Checkout 外观设置。 |
启动 Checkout
要启动 Checkout 流程,请使用 startCheckout 或 startWebCheckout 方法。 该方法会根据提供的 checkout 参数创建订单并打开 Checkout UI。 返回 ApiResult<String>,其中成功值为订单 ID。
- Native UI
- In-app browser
- Default browser
启动模式使用 Native UI ,它完全控制玩家的体验。
- Kotlin
import com.aghanim.android.sdk.checkout.ui.api.startCheckout
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.startCheckout(
context = context,
checkoutParams = checkoutParams,
)) {
is ApiResult.Success -> {
// Order is created and checkout has launched successfully
val orderId = result.value
// TODO: Save order ID for further granting or tracking
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Checkout", "Failed to launch Checkout: ${result.error}")
// TODO: Show user-friendly error message to player
}
}
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
context | Activity | 是 | 当前活动。 |
checkoutParams | CheckoutParams | 是 | Checkout 配置。 |
启动模式通过自定义标签创建无缝的玩家体验。
- Kotlin
import com.aghanim.android.sdk.checkout.web.api.startWebCheckout
import com.aghanim.android.sdk.checkout.web.api.models.LaunchMode
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.startWebCheckout(
context = context,
checkoutParams = checkoutParams,
launchMode = LaunchMode.InAppBrowser,
)) {
is ApiResult.Success -> {
// Order is created and checkout has launched successfully
val orderId = result.value
// TODO: Save order ID for further granting or tracking
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Checkout", "Failed to launch Checkout: ${result.error}")
// TODO: Show user-friendly error message to player
}
}
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
context | Activity | 是 | 当前活动。 |
checkoutParams | CheckoutParams | 是 | Checkout 配置。 |
launchMode | LaunchMode | 是 | Checkout 的启动模式。 |
启动模式在玩家的默认浏览器中工作。 当你要将玩家重定向到应用程序之外时使用该模式。
- Kotlin
import com.aghanim.android.sdk.checkout.web.api.startWebCheckout
import com.aghanim.android.sdk.checkout.web.api.models.LaunchMode
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.startWebCheckout(
context = context,
checkoutParams = checkoutParams,
launchMode = LaunchMode.DefaultBrowser,
)) {
is ApiResult.Success -> {
// Order is created and checkout has launched successfully
val orderId = result.value
// TODO: Save order ID for further granting or tracking
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Checkout", "Failed to launch Checkout: ${result.error}")
// TODO: Show user-friendly error message to player
}
}
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
context | Activity | 是 | 当前 Activity。 |
checkoutParams | CheckoutParams | 是 | Checkout 配置。 |
launchMode | LaunchMode | 是 | Checkout 的启动模式。 |
展示 Checkout
要为现有订单展示 Checkout UI,请使用 presentCheckout 或 presentWebCheckout 方法。 当你拥有通过服务器到服务器方式创建订单得到的订单 ID,或在恢复之前被放弃的 checkout 时使用此方法。
- Native UI
- In-app browser
- Default browser
该启动模式使用对玩家体验具有完全控制权的 Native UI。
- Kotlin
import com.aghanim.android.sdk.checkout.ui.api.presentCheckout
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.presentCheckout(
context = context,
orderId = orderId,
)) {
is ApiResult.Success -> {
// Checkout has launched successfully for the existing order
val presentedOrderId = result.value
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Checkout", "Failed to present Checkout: ${result.error}")
// TODO: Show user-friendly error message to player
}
}
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
context | Activity | 是 | 当前 Activity。 |
orderId | String | 是 | 要打开的现有订单的 ID。 |
该启动模式通过 Custom Tabs 创建无缝的玩家体验。
- Kotlin
import com.aghanim.android.sdk.checkout.web.api.presentWebCheckout
import com.aghanim.android.sdk.checkout.web.api.models.LaunchMode
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.presentWebCheckout(
context = context,
orderId = orderId,
launchMode = LaunchMode.InAppBrowser,
)) {
is ApiResult.Success -> {
// Checkout has launched successfully for the existing order
val presentedOrderId = result.value
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Checkout", "Failed to present Checkout: ${result.error}")
// TODO: Show user-friendly error message to player
}
}
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
context | Activity | 是 | 当前 Activity。 |
orderId | String | 是 | 要打开的现有订单的 ID。 |
launchMode | LaunchMode | 是 | Checkout 的启动模式。 |
该启动模式在玩家的默认浏览器中运行。 当你希望将玩家重定向到应用外部时使用此模式。
- Kotlin
import com.aghanim.android.sdk.checkout.web.api.presentWebCheckout
import com.aghanim.android.sdk.checkout.web.api.models.LaunchMode
import com.aghanim.android.sdk.common.api.result.ApiResult
import android.util.Log
when (val result = aghanim.presentWebCheckout(
context = context,
orderId = orderId,
launchMode = LaunchMode.DefaultBrowser,
)) {
is ApiResult.Success -> {
// Checkout has launched successfully for the existing order
val presentedOrderId = result.value
}
is ApiResult.Failure -> {
// Log debug information for troubleshooting
Log.e("Checkout", "Failed to present Checkout: ${result.error}")
// TODO: Show user-friendly error message to player
}
}
| 参数 | Type | 必填项 | 描述 |
|---|---|---|---|
context | Activity | 是 | 当前 Activity。 |
orderId | String | 是 | 要打开的现有订单的 ID。 |
launchMode | LaunchMode | 是 | Checkout 的启动模式。 |
需要技术支持?
联系我们的集成技术团队: [email protected]





