Android 应用内计费响应列表为空

Posted

技术标签:

【中文标题】Android 应用内计费响应列表为空【英文标题】:Android inapp billing responseList is empty 【发布时间】:2014-09-10 04:37:06 【问题描述】:

我在我的应用中定义了一些应用内产品。我已将 apk 上传到 Google Play,并在 Google Play 上添加了应用内购买产品。

我的ServiceConnection 定义如下:

ServiceConnection mServiceConn = new ServiceConnection() 
        @Override
        public void onServiceDisconnected(ComponentName name) 
            mService = null;
        

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) 
            mService = IInAppBillingService.Stub.asInterface(service);
            connect();
        
    ;

onServiceConnected 函数被调用,bindService 返回 true。

接下来是connect 函数。

public void connect() 
        new Thread(new Runnable() 
            public void run() 
                try 

                    // Purchase type is "inapp", as required by  API v3
                    Bundle skuDetails = mService.getSkuDetails(3, PACKET, "inapp", querySkus);

                    

                    int response = skuDetails.getInt("RESPONSE_CODE");

                    Log.e("IAP connect", response + "");


                    if (response == 0) 
                        ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");
                        Log.e("size list", responseList.size()+"");
                        ...
                      
                    
             catch (RemoteException e) 
                e.printStackTrace();
             catch (JSONException e) 
                e.printStackTrace();
            
        
    ).start();

此处的 PACKET 设置为 getPackageName()。 响应代码为 0,但日志显示列表的大小为 0。我不知道为什么列表为空,因为我在 Google Play 中总共输入了 5 个项目,并且每个项目都处于活动状态。我已经等了 2 天了,用三台设备进行了测试,但仍然没有通过。

我几乎尝试了我能想到的一切,欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,解决方法是将我的订阅状态设置为“活动”。 几分钟后,它终于奏效了。

【讨论】:

【参考方案2】:

我在旧设备上遇到了问题。删除 Play 服务应用数据解决了这个问题。

所以我们只需要为糟糕的评论做好准备......

【讨论】:

这对我来说是一个很好的解决方案。我得到了特定产品的空 skuDetail。【参考方案3】:

您需要将您的应用程序发布到 Beta/Alpha 以访问应用内计费功能。 它最近发生了变化,但他们没有宣布:)

http://developer.android.com/google/play/billing/billing_testing.html#draft_apps

值得一提的是,您不必上传每个新版本即可对其进行测试。只要使用相同的versionCode和versionName,应用发布就可以了。

【讨论】:

这很奇怪。在另一个运行几乎完全相同代码的项目中,尤其是也运行版本 3,它很好地使用了非托管产品。 它确实显示“如果您使用的是应用内结算 v3 而不是应用内结算 v2,非托管产品的行为会有所不同。如果您使用的是应用内结算 v3,非托管产品将被视为托管产品并且需要明确消费。了解更多”但是,我还没有购买任何东西,我确实运行了一个(冗余)循环来消费购买。 妈的,我现在才读到它……在我删除了我的产品之后。嗯,这对我来说是一个艰难的教训。谢谢你的帮助!我可以在 22 小时内提供赏金,所以你必须等待它:) developer.android.com/google/play/billing/test 说“许可证测试人员可以绕过此检查,这意味着您可以旁加载应用程序进行测试,即使对于使用带有调试签名的调试版本的应用程序,也无需上传到您的应用程序的新版本。 "有人说您不需要发布应用程序即可在应用程序购买中进行测试。让 Google 审查您未完成的应用只是为了测试应用内购买有什么意义? 您必须发布您的应用程序 - 因为我发布的应用程序开始返回 skydetailslist。这是一个真正的美。您需要在 GooglePLay 中填写 App Store 信息并通过 Google 的审核才能测试应用内购买,在我看来,截至 2020 年 9 月 9 日,这是一个糟糕的设计,但事实就是如此。【参考方案4】:

您的代码看起来不错。

确保查询正确的 SKU。 querySkus 中的单个项目必须与应用内产品的 id 完全匹配。

其次确保查询正确的类型if items。如果您在开发者控制台中将“应用内产品”配置为要购买的汽车,请照常使用“应用内产品”。如果您有订阅,请使用“订阅”作为针对 Google Play 的查询类型。

希望这会有所帮助。

【讨论】:

是的,我已经在 querySkus 列表和 Google Play 中仔细检查了 sku 的 ID。它们是非托管产品,并且都显示为活动产品。 你拯救了我的一天。魔导师哈尔德里安。非常感谢。 我不能投票一百次,但我会的!关于“subs”与“inapp”的那一点非常感谢!

以上是关于Android 应用内计费响应列表为空的主要内容,如果未能解决你的问题,请参考以下文章

android:Inapp计费:错误响应:7:项目已拥有

如何在 Android 应用程序中实现应用内计费?

如何存储 Android 应用内计费的订阅数据?

适用于 android、ios 和 blackberry 的 Codenameone 应用内计费

Android 应用内计费如何以及在何处指定付费功能费用

Android/Ios 应用内计费。唯一身份