我即将为正在开发的应用程序中的高级升级功能实现应用程序内购买(IAP),并且已经阅读了官方开发人员指南。在那里,他们提到
您可以使用Play Billing Library简化您的开发流程,使您可以将精力集中于实现针对您的应用程序的逻辑,例如显示应用程序内产品和购买商品。
并参考TrivialDrive_v2示例应用程序,以获取有关如何实现应用程序内计费的完整培训课程。
查看示例,特别是com.example.billingmodule.billing包,短语“简化开发过程”并不是想到的第一件事。
这真的是我们应该如何实施应用内购买进行高级升级的方式吗?似乎比应该的要复杂得多,所以我想也许是我在此过程中误解了一些东西,并且有一种更简单的方法来实现此非常常见的功能?
android in-app-purchase in-app-billing android-billing play-billing-library
我正在过渡到 Google Play Billing library v2.0.0,有两个主要的流程差异。一个是购买确认https://developer.android.com/google/play/billing/billing_library_overview#acknowledge另一个是处理未决交易https://developer.android.com/google/play/billing/billing_library_overview#pending。
对于待处理的交易,文档指出
除了两张测试信用卡外,许可证测试人员还可以使用两种测试工具来延迟付款,几分钟后自动完成或取消
...但我只能使用两张普通的测试卡,没有延迟的。
还有:
对于许可证测试人员进行的购买,确认窗口较短。如果在五分钟内未得到确认,购买将被退还和撤销,而不是三天。
但是我仍然可以按月订阅 6 次 5 分钟的长续订,所以这是一种常规行为,而不是新行为。
当然,我调用enablePendingPurchases()
了 init。
显然,我没有启用新流程,但这是为什么呢?
我有一个带有应用内购买的应用程序,我用谷歌提供的测试卡方法来测试它,如下所示Google Play Billing Test
然而,当我在 Google Play 上发布我的应用程序后,我仍然获得测试卡选项。我无法使用真实卡进行付款,如下所示:
我没有使用我的开发者帐户进行付款,并且我的 google play 电子邮件未在许可测试人员中列出。
有人可以帮忙解决这个问题吗?
我想了解用户是否从 MainActivity 主动订阅了 Basic/Premium 内容。有一个BillingClientLifecycle
类启动订阅过程。据我了解,queryPurchses
应该显示用户是否有活动订阅。但显然它显示(通过我放在那里显示订阅状态的 Toasts)用户被订阅,即使用户实际上没有订阅。
public void queryPurchases() {
if (!billingClient.isReady()) {
Log.e(TAG, "queryPurchases: BillingClient is not ready");
}
Log.d(TAG, "queryPurchases: SUBS");
Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.SUBS);
if (result == null) {
Log.i(TAG, "queryPurchases: null purchase result");
processPurchases(null);
///
Toast.makeText(applicationContext,"queryPurchases: null purchase result", Toast.LENGTH_SHORT).show();
} else {
if (result.getPurchasesList() == null) {
Log.i(TAG, "queryPurchases: null purchase list");
processPurchases(null);
///
Toast.makeText(applicationContext,"queryPurchases: null purchase list", Toast.LENGTH_SHORT).show();
} else {
processPurchases(result.getPurchasesList());
///
Toast.makeText(applicationContext,"user has subscription!", Toast.LENGTH_SHORT).show();
}
}
} …
Run Code Online (Sandbox Code Playgroud) android android-studio in-app-subscription google-play-developer-api play-billing-library
我将 Android Studio 中的 Google Play Billing Library 从 3.0.3(工作正常)迁移到 4.0.0。我检查了我的 Google Play 结算信息,一切似乎都正常,并且 SKU 状态为“活动”(没有危险信号)。我已尽力遵循迁移说明@ https://developer.android.com/google/play/billing/integrate#assessment_a_connection_to_google_play
到目前为止,我所能做到的就是与 Google Play Billing 的连接正常,也就是说,在 onBillingSetupFinished() 方法之后,BillingClient.BillingResponseCode.OK 响应良好,没有错误消息。
我的问题始于对 querySkuDetailsAsync() 的调用:这里没有响应,甚至没有错误通知。谷歌网站非常强调这次通话,所以我觉得这就是乐趣的开始。
我已经提供了存在问题的示例代码。我已经使用了 Stack Overflow 上的很多修复程序,但现在我真的陷入困境,真的需要它才能工作。
我的问题代码如下:
'''
/*
//Using the following library in build.graddle for app module
dependencies {
def billing_version = "4.0.0"
implementation "com.android.billingclient:billing:$billing_version"
}
*/
StringBuilder builder4SKUInfo;
private void get_Subscribe2_Characters() {
Subscribe2_Characters_Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//I Toggle Visibility of Views Here
billingClient.startConnection(new BillingClientStateListener() {
//Android Studio …
Run Code Online (Sandbox Code Playgroud) android in-app-billing android-billing play-billing-library google-play-billing
我对 Android 计费库的新版本(5)感到困惑。我的应用程序中有一些订阅,每个订阅都有每月一次的周期和 2 周的免费试用期。现在我想向用户显示我的订阅的定价详细信息。
当我获得每个订阅的产品详细信息时,它总是相同的。我在列表中得到 2 个项目,subscriptionOfferDetails
其中第一个项目有两个PricingPhase
项目,一个为 0 价格(免费试用),另一个为有效订阅价格。然后第二个SubscriptionOfferDetails
项目有一个PricingPhase
具有有效订阅价格的项目。
那么这是怎么回事呢?为什么 Google 以这种奇怪的结构返回我的订阅详细信息?为什么我收到 2SubscriptionOfferDetails
件而不是 1 件?
我应该使用哪个项目来显示正确的订阅价格?另外,当用户想要购买时,我应该使用哪一个来启动付款流程?优惠代币不同。
注意:我对某些国家/地区有不同的价格。这会在这里发挥作用吗?
只是为了澄清
奇怪的是,全价选项在两种不同的SubscriptionOfferDetails
商品中出现了两次。图片中第三个突出显示的项目是没有意义的,因为该选项已经存在于前一个SubscriptionOfferDetails
项目中,但具有不同的offerToken
.
android in-app-billing in-app-subscription play-billing-library
如何查询 google play billing 5 中的产品列表?
从https://developer.android.com/google/play/billing/integrate#java中,我们通过将产品名称传递给 来查询单个产品的详细信息setProductId
,
QueryProductDetailsParams queryProductDetailsParams =
QueryProductDetailsParams.newBuilder()
.setProductList(
ImmutableList.of(
Product.newBuilder()
.setProductId("product_id_example")
.setProductType(ProductType.SUBS)
.build()))
.build();
billingClient.queryProductDetailsAsync(
queryProductDetailsParams,
new ProductDetailsResponseListener() {
public void onProductDetailsResponse(BillingResult billingResult,
List<ProductDetails> productDetailsList) {
// check billingResult
// process returned productDetailsList
}
}
)
Run Code Online (Sandbox Code Playgroud)
但这只能得到一个产品,因此当您尝试打印时,List<ProductDetails> productDetailsList
只有一个产品。那么如何传入多个产品呢?
据我所知,.setProductId("product_id_example")
只需要一个字符串而不是一个列表。
IabHelper的QueryInventoryFinishedListener尚未返回过期的订阅项.
另一方面,Google Play结算图书馆的PurchaseHistoryResponseListener似乎会收到所有购买的商品,其中包括过期商品.
在Google Play结算库中,我们必须检查PurchaseHistoryResponseListener的购买日期和商品的每个到期日期?
我的 Google Play 计费有问题。我有一个 Android 应用程序,其中包含应用程序内购买。我维护 SharedPreference 来购买应用程序状态。如果谷歌将购买状态视为成功,那么我将在购买应用程序时保持布尔值。
\n问题场景:我是 XYZ 应用程序的新用户,我已付费购买高级版本。支付成功后,应用程序将切换到高级版本。同时我去谷歌播放帐户并取消订单。开发者可以得到0价格的退款,而作为新用户我可以得到高级版本而无需付费。
\xe2\x80\xa8 Q. 如何处理 Google Play Billing 的 SKU 购买状态?
\n我正在尝试集成 Google Play 结算。
这是我的 onCreate :
private final static String TAG = "MainActivity" ;
private final static String ITEM_SKU_SUBSCRIBE = "sub_example" ;
private final static String PREF_FILE = "shared_prefs" ;
private final static String SUBSCRIBE_KEY = "subscribe" ;
private BillingClient billingClient ;
private TextView premiumContent ;
private TextView subscriptionStatus ;
private Button purchaseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
premiumContent = findViewById(R.id.premium_content) ;
subscriptionStatus = findViewById(R.id.subscription_status) ;
purchaseButton = findViewById(R.id.button) ;
billingClient = BillingClient.newBuilder(this)
.enablePendingPurchases()
.setListener(this)
.build() …
Run Code Online (Sandbox Code Playgroud) java android in-app-billing android-billing play-billing-library