开发时需要调试Google内购,需要先往Google商店传一个白包上去。确定包名,然后进行内购产品创建。
1.创建一个空项目,填写正式名称和正式包名。
如果你只是为一个测试开发账号打白包,然后进行内购测试,这时包名随便写肯定不能填正式包名。包名一旦随着包传到Google Play Console后,就会被这个账号占用。
选择Kotlin DSL
2.在应用级build.gradle.kts中添加com.android.billingclient:billing依赖然后同步
dependencies {
...
// 以前的写法
// implementation 'com.android.billingclient:billing:6.1.0'
// 现在写法
implementation(libs.billingclient.billing)
}
com.android.billingclient:billing 是一个Google提供的Android库,用于在Android应用中实现应用内购买(In-App Purchases,简称IAP)功能。这个库是Google Play Billing Library的一部分,它提供了一个简单的API来帮助开发者轻松地集成IAP服务。
通过使用Google Play Billing Library,开发者可以实现以下功能:
-
查询可售商品:可以查询Google Play上定义的商品,包括一次性商品(如游戏中的虚拟货币)和订阅(如内容服务的月度或年度订阅)。
-
进行购买:可以启动购买流程以供用户购买商品,并处理购买交易。
-
确认购买:在商品被购买后,可以确认交易,以确保用户的购买得到处理,并且商品被正确地交付。
-
检查购买历史记录:可以检查用户过去的购买记录,以确定用户是否已购买特定商品,特别是对于恢复购买或实现非消耗品的逻辑非常有用。
-
管理订阅:可以为用户提供订阅管理的接口,包括订阅升级、降级和取消。
使用Google Play Billing Library的一个重要好处是它处理了很多复杂的底层交互和安全性问题,例如验证购买和加密通信,这样开发者就可以专注于创建更好的用户体验而不必担心底层的交易安全问题。
3.报错Unresolved reference: billingclient
在 Kotlin 项目中,如果你想使用 implementation(libs.billingclient.billing) 这种格式来添加依赖项,通常意味着你的项目配置了版本目录(Version Catalogs)特性。这是在 Gradle 7.0 中引入的一种新的依赖管理方式,允许在一个单独的文件中集中管理所有的依赖项和它们的版本。
如果你遇到了 Unresolved reference: billingclient 的错误,这通常表明在你的版本目录配置中没有名为 billingclient.billing 的条目。为了解决这个问题,你需要在版本目录文件中添加正确的条目。
版本目录通常在 gradle/libs.versions.toml 文件中定义,但也可能是在其他位置,取决于你的项目配置。
gradle/libs.versions.toml格式如下:
[versions]
agp = "8.3.0"
billingVersion = "6.1.0"
kotlin = "1.9.0"
coreKtx = "1.10.1"
junit = "4.13.2"
junitVersion = "1.1.5"
espressoCore = "3.5.1"
lifecycleRuntimeKtx = "2.6.1"
activityCompose = "1.7.0"
composeBom = "2023.08.00"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
billingclient-billing = { module = "com.android.billingclient:billing", version.ref = "billingVersion" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
可以看到,已经有了正确的条目来表示 Google Play Billing Library,它是用以下方式定义的:
billingclient-billing = { module = "com.android.billingclient:billing", version.ref = "billingVersion" }
这个条目引用了版本键 billingVersion,它被定义为 "6.1.0"。
所以在 build.gradle.kts 或 build.gradle 配置文件中,注意不要输入错误,应该使用 libs.billingclient.billing 来添加依赖项,如下所示:
dependencies {
implementation(libs.billingclient.billing)
// ... 其他依赖项
}
4.前往Build > Generate Signed Bundle / APK打包aab或apk
官方文档:https://developer.android.com/studio/publish/app-signing
创建秘钥后保存好,下次更新时直接选择这次创建的秘钥。
在Android应用打包过程中,如果选择了“Export encrypted key for enrolling published apps in Google Play App Signing”,这将导出一个名为 private_key.pepk
的文件。此文件包含用于Google Play App Signing的加密后的私钥。
Google Play App Signing是一项在Google Play Console中提供的服务,它允许Google帮助你管理你的应用签名密钥。使用这项服务的优势包括:
- 安全性增强:你的签名密钥存储在Google的安全服务器上,降低了密钥被泄露或丢失的风险。
- 键管理灵活性:如果你的签名密钥丢失或被盗,Google Play App Signing可以帮助你更换新的密钥。
- 大小优化:Google可以为不同的设备生成优化过的APK,减少应用的下载体积。
- 未来证明:如果将来需要使用新的签名算法,Google可以帮助转换到新的签名方案。
当你第一次上传你的应用到Google Play时,如果你选择了Google Play App Signing,你需要提供你的应用签名密钥。这就是为什么你需要导出 private_key.pepk
文件。你需要在Google Play Console的“应用签名”部分上传这个文件,以便Google可以使用你的私钥(现在由Google安全地管理)来签署你的APK或App Bundle。
操作步骤如下:
- 在Android Studio中生成签名的APK或者Android App Bundle时选择导出和上传PEPK文件。
- 在生成的向导中,勾选“Export encrypted key for enrolling published apps in Google Play App Signing”。
- 按照指示完成导出流程,你会得到一个
private_key.pepk
文件。 - 登录到Google Play Console,并找到你的应用。
- 在"Release"管理或类似的区域找到"App Signing"部分。
- 按照Google Play Console的指示上传
private_key.pepk
文件。
一旦你上传了这个文件,Google Play App Signing服务就会接管你的应用的签名过程。在这之后,每次你上传一个新的APK或者App Bundle到Google Play时,Google将会使用存储在它们服务器上的签名密钥来签署你的应用。