标签: android-inapp-purchase

恢复订阅的丢失购买令牌

我现在遇到一个重大问题,我们的服务器是取消订阅用户的应用程序(不是Google Play),并删除我们在成功购买后从Google Play收到的购买代币.我们已经注意到它们不再被删除,但我需要处理我们已经丢失的那些.

所以我的问题是,有没有办法恢复购买令牌?(主要在V2 API中)

java android google-play google-play-developer-api android-inapp-purchase

7
推荐指数
1
解决办法
1280
查看次数

Google Play In-app Billing API version is less than 3

I just started beta testing the 2.0 update to the billing library for the Play Store and a lot of my users are getting this error Google Play In-app Billing API version is less than 3.

这只是更新之前的时间问题,还是某些设备卡在旧版本上还是什么?

android android-billing android-inapp-purchase

7
推荐指数
3
解决办法
918
查看次数

响应码项目已购买,但购买清单为空

我正在我的应用程序中实现IAP。一种是删除广告,另一种是添加更多的谜题。我正在我的设备上进行测试,但是遇到了一个问题。购买物品后,我得到的响应代码为“物品已拥有”,但未显示在购买清单中。

我正在这样设置我的计费客户,

private void setUpBillingClient(){
        mBillingClient = BillingClient.newBuilder(this).setListener(this).build();
        mBillingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
                if (billingResponseCode == BillingClient.BillingResponse.OK) {
                    List skuList = new ArrayList<>();
                    skuList.add(ITEM_SKU_MORE_PUZZLE);
                    skuList.add(ITEM_SKU_REMOVE_AD);
                    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
                    mBillingClient.querySkuDetailsAsync(params.build(),
                            new SkuDetailsResponseListener() {
                                @Override
                                public void onSkuDetailsResponse(int responseCode, List skuDetailsList) {
                                    // Process the result.
                                    if (responseCode == BillingClient.BillingResponse.OK
                                            && skuDetailsList != null) {
                                        for (Object skuDetailsObject : skuDetailsList) {
                                            SkuDetails skuDetails = (SkuDetails) skuDetailsObject;
                                            String sku = skuDetails.getSku();
                                            String price = skuDetails.getPrice();
                                            if …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase android-inapp-purchase

7
推荐指数
1
解决办法
111
查看次数

Google 应用内购买始终会退款

我在使用 Google 应用内购买时遇到一些问题。所有收到的付款将在 72 小时后退还。我的付款代码有错误吗?我自己付了钱,没有要求退款,但即使是72小时后也退款了。

\n\n

播放控制台屏幕截图

\n\n
private void setupBilling() {\n    mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(this).enablePendingPurchases().build();\n    mBillingClient.startConnection(new BillingClientStateListener() {\n        @Override\n        public void onBillingSetupFinished(BillingResult billingResult) {\n            if (billingResult.getResponseCode() ==  BillingClient.BillingResponseCode.OK) {\n                final List<String> skuList = new ArrayList<> ();\n                skuList.add("remove_ads");\n                final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();\n                params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);\n\n                mBillingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {\n                    @Override\n                    public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> list) {\n                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && list != null) {\n                            BillingFlowParams flowParams = BillingFlowParams.newBuilder()\n                                    .setSkuDetails(list.get(0))\n                                    .build();\n                            mBillingClient.launchBillingFlow(MainActivity.this, flowParams);\n                        }\n                    }\n                });\n\n            }else{\n                Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();\n            }\n …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase in-app-billing android-inapp-purchase google-play-console

7
推荐指数
1
解决办法
2539
查看次数

如何在Kotlin的应用购买中实现Android?

我想为我的android应用的应用内购买(使用kotlin编写)实施Google Play结算。我正在关注本教程

这是我的代码:

private lateinit var billingClient: BillingClient
    private lateinit var productsAdapter: ProductsAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupBillingClient()
    }

    private fun setupBillingClient() {
        billingClient = BillingClient
            .newBuilder(this)
            .setListener(this)
            .build()

        billingClient.startConnection(object : BillingClientStateListener {
            override fun onBillingSetupFinished(@BillingClient.BillingResponse billingResponseCode: Int) {
                if (billingResponseCode == BillingClient.BillingResponse.OK) {
                    println("BILLING | startConnection | RESULT OK")
                } else {
                    println("BILLING | startConnection | RESULT: $billingResponseCode")
                }
            }

            override fun onBillingServiceDisconnected() {
                println("BILLING | onBillingServiceDisconnected | DISCONNECTED")
            }
        })
    }

    fun onLoadProductsClicked(view: …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-inapp-purchase play-billing-library

6
推荐指数
1
解决办法
892
查看次数

是否有必要从“Google Play Billing with AIDL”迁移到“Google Play Billing Library”?

我知道“Google Play Billing with AIDL”已弃用,但我正在使用的应用程序非常复杂,我不想更改应用程序的核心部分。

在游戏控制台上,我收到以下消息:-

“我们检测到您的应用使用的是旧版 Google Play Developer API。从 2019 年 12 月 1 日起,此 API 的版本 1 和 2 将不再可用。请在此日期之前更新到版本 3。”

我检查了“Google Play Billing Library”内部也使用相同的“Google Play Billing with AIDL”,所以我有点困惑,如果问题只能在更新库后才能解决。

在我的代码中,我已经在使用计费 API 的 API 版本 3。

private IInAppBillingService billingService;

Bundle buyIntentBundle = billingService.getBuyIntent(3, packageName, sku, type, developerPayload);
billingService.getSkuDetails(3, application.getPackageName(),
                                    ITEM_TYPE_INAPP, bundle);
billingService.consumePurchase(3, application.getPackageName(), iabOrder.purchaseToken);
billingService.getPurchases(3, application.getPackageName(), ITEM_TYPE_INAPP, null);
billingService.isBillingSupported(3, application.getPackageName(),
                    ITEM_TYPE_INAPP);
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我找出为什么我收到这条使用第三版 Google Play Developer API 的特殊消息的主要原因。

in-app-purchase in-app-billing android-billing in-app-subscription android-inapp-purchase

6
推荐指数
1
解决办法
2282
查看次数

在 Google Play 上启用 Android 订阅免费试用

我在获取应用内订阅的免费试用时遇到问题。订阅正在运行,但每次我测试时(即使使用新设备/谷歌帐户),它都会显示为“从今天开始”(见下图,文本为瑞典语)。

\n

我假设您不需要任何代码,并且所有内容都可以在 Google Play Console 中设置。

\n

我的结构如下“我的应用程序”>“产品”>“订阅”:

\n
- Base subscription (Per month, renewed automatically)\n   - Offer - Every month (renews automatically)\n     Phases:\n     - Free trial (duration = 1 month)\n
Run Code Online (Sandbox Code Playgroud)\n

优惠页面如下所示:

\n

在此输入图像描述

\n

并且阶段仅包含一项:

\n

在此输入图像描述

\n

在全新设备上测试时的图像:\n在此输入图像描述

\n

将“Fr\xc3\xa5n och med idag”=>“从今天开始”翻译成英语。

\n

我究竟做错了什么?查看 Stackoverflow 帖子,所有帖子都与如何以编程方式获取免费试用可用性状态相关,我对此不感兴趣。我假设本机 Google 对话框直接从 Google Play 服务器获取此信息。

\n

android in-app-purchase android-inapp-purchase google-play-console

6
推荐指数
1
解决办法
5196
查看次数

尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

使用 Java Google Play Developer API(版本 3)并请求有效购买令牌的购买信息时,出现以下异常。API 调用返回 400 Bad Request 响应以及以下消息。

{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid Value",
    "reason" : "invalid"
  } ],
  "message" : "Invalid Value"
}
Run Code Online (Sandbox Code Playgroud)

遗憾的是没有进一步的信息。我不知道什么值是无效的。

首先,我们已就此事联系了 Google 支持人员。不幸的是,我们与 Google 支持人员来回沟通了近 2 个月,但他们仍然没有表明他们正确理解了我们的问题所在。每次他们回复时,他们都会给我们提供与 Google Play Developer API 实际上无关的建议,即使在多次彻底解释问题之后也是如此。这是我 20 年来最令人沮丧的支持经历。谷歌的支持显然不会有任何帮助。

其次,我们已经成功链接了 Google Play 帐户和后端。所有必要的配置均已完成并且可以正常工作。在我们的后端,每当进行 Android 应用内购买时,我们都会收到来自 Google Play 的通知,这些通知包含购买令牌。这需要付出一些巨大的努力,但我相信现在一切都是正确的,我们的服务帐户配置正确,并且所有权限等都很好。

我能够成功调用返回可用应用内购买产品列表的 API。我获得了我们在 Google Play 中配置的产品的完整且正确的列表,供用户在我们的应用程序中购买。为了进行此调用,我们必须提供凭据,并且我假设当我们进行此调用时服务器正在验证这些凭据。由于我可以成功拨打此电话,因此我假设“无效值”与我们的凭据无关。我们正在使用为特定服务帐户创建的 Google 生成的 JSON 文件(不使用 p12 文件)。

我搜索了 StackOverflow 以及互联网的其余部分来寻找有关此问题的信息。我发现许多页面都指出了相同或类似的问题,但使用的是旧版本的 Google Play Developer API,这显然会导致不同的情况。提供的解决方案似乎不适用于 v3 …

java android in-app-purchase google-play-developer-api android-inapp-purchase

5
推荐指数
1
解决办法
1616
查看次数

如何在 Google Play 结算中获取我所有应用内商品的 SKU 详细信息

在旧版本的应用内计费中,我使用以下代码获取 IAP 商品价格。

我无法在新版本中找到解决此问题的方法。请协助我在“Google Play 结算”中获取所有应用内商品的 SKU 详细信息

    ArrayList<String> skuList = new ArrayList<String>();
    Collections.addAll(skuList, SKU_GEM);
    Collections.addAll(skuList, SKU_COMBO);
    Collections.addAll(skuList, SKU_SALE);

    for(String s : skuList){ 
       Log.d("IabHelper", "skuList from list : " + s);
    }

    String[][] itemPrice = new String[3][]; 

    itemPrice[0]=new String[SKU_GEM.length]; 
    itemPrice[1]=new String[SKU_COMBO.length];
    itemPrice[2]=new String[SKU_SALE.length];

    Bundle querySkus = new Bundle();
    querySkus.putStringArrayList("ITEM_ID_LIST", skuList);

    Bundle skuDetails = mService.getSkuDetails(3,packageName, "inapp", querySkus); 

     if (response == 0) {
        ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");
        Log.d("IabHelper", "responseList  : " + responseList);
        for (String thisResponse : responseList) {
            JSONObject object = …
Run Code Online (Sandbox Code Playgroud)

android in-app-billing android-studio in-app-subscription android-inapp-purchase

5
推荐指数
1
解决办法
5052
查看次数

使用 Google Play 计费库以不同语言显示应用内产品详细信息

我正在使用Google Play 结算库版本 3 来获取可用的应用内产品。

querySkuDetailsAsync调用该对象后BillingClient,我正确获取了每个产品的SkuDetails 。

在 Google Play 管理中心中,我将产品详细信息翻译成多种语言。但是,我仅获得主要语言的详细信息。

如何获取不同语言的应用内商品详细信息?

android android-inapp-purchase google-play-console

5
推荐指数
1
解决办法
595
查看次数