首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓谷歌付费-回应4: ITEM_UNAVAILABLE

安卓谷歌付费-回应4: ITEM_UNAVAILABLE
EN

Stack Overflow用户
提问于 2020-06-11 09:10:12
回答 1查看 3.9K关注 0票数 4

我正在尝试整合谷歌游戏计费。

这是我的onCreate:

代码语言:javascript
运行
复制
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() ;
    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(BillingResult billingResult) {
            Log.i(TAG, "onBillingSetupFinished ; billing response code == " + billingResult.getResponseCode());
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                Purchase.PurchasesResult queryPurchase = billingClient.queryPurchases(SUBS);
                List<Purchase> queryPurchases = queryPurchase.getPurchasesList();
                if (queryPurchases != null && queryPurchases.size() > 0) {
                    handlePurchases(queryPurchases);
                } else {
                    saveSubscribeValueToPref(false);
                }
            } else {
                Log.e(TAG, "ELSE : " + billingResult.getDebugMessage()) ;
            }
        }

        @Override
        public void onBillingServiceDisconnected() {
            Toast.makeText(getApplicationContext(), "Service disconnected",
                    Toast.LENGTH_SHORT).show() ;
        }
    });

    if (getSubscribeValueFromPref()) {
        purchaseButton.setVisibility(View.GONE);
        premiumContent.setVisibility(View.VISIBLE);
        subscriptionStatus.setText("Subscription Status : Subscribed");
    } else {
        premiumContent.setVisibility(View.GONE);
        purchaseButton.setVisibility(View.VISIBLE);
        subscriptionStatus.setText("Subscription Status : Not Subscribed");
    }

    purchaseButton.setText("Load products");
    purchaseButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            subscribe();
        }
    });
}

当我单击purchaseButton时,我调用subscribe函数。

基本上,如果initiatePurchase返回true,它只调用函数true,而在另一种情况下则初始化billingClient

下面是我的initiatePurchase函数:

代码语言:javascript
运行
复制
private void        initiatePurchase() {
    List<String>                    skuList = new ArrayList<>() ;
    SkuDetailsParams.Builder        params = SkuDetailsParams.newBuilder() ;

    skuList.add(ITEM_SKU_SUBSCRIBE);
    params.setSkusList(skuList).setType(SUBS);
    BillingResult   billingResult = billingClient.isFeatureSupported(BillingClient.FeatureType.SUBSCRIPTIONS) ;
    Log.i(TAG, "Billing response code == " + billingResult.getResponseCode()) ;
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
        Log.i(TAG, "Billing response code is OK");
        billingClient.querySkuDetailsAsync(params.build(),
                new SkuDetailsResponseListener() {
                    @Override
                    public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
                        Log.i(TAG, "onSkuDetailsResponse ; billing result response code == " + billingResult.getResponseCode());
                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                            Log.i(TAG, "Billing response code OK") ;
                            if (skuDetailsList != null) {
                                for (int i = 0 ; i < skuDetailsList.size() ; i++) {
                                    Log.i(TAG, "Loop INDEX " + i + " ; SkuDetails == " + skuDetailsList.get(i).getTitle()) ;
                                }
                            }
                            if (skuDetailsList != null && skuDetailsList.size() > 0) {
                                Log.i(TAG, "skuDetailsList is not null or empty");
                                BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                                        .setSkuDetails(skuDetailsList.get(0))
                                        .build();
                                Log.i(TAG, "Flow Params = " + flowParams.getAccountId() + " | " + flowParams.getSku());
                                BillingResult billingFlowResult = billingClient
                                        .launchBillingFlow(MainActivity.this, flowParams);
                                Log.i(TAG, "billingFlowResult == " + billingFlowResult.getResponseCode() + " | " + billingFlowResult.getDebugMessage()) ;
                            } else {
                                Toast.makeText(getApplicationContext(),
                                        "Item not found", Toast.LENGTH_SHORT).show();
                            }
                        } else {
                            Toast.makeText(getApplicationContext(),
                                    "Error - " + billingResult.getDebugMessage(),
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    } else {
        Toast.makeText(getApplicationContext(),
                "Sorry, subscription not supported. Please update Play Store",
                Toast.LENGTH_SHORT).show();
    }
}

它似乎到了onSkuDetailsResponse,有一个帐单响应代码OK。

我在skuDetailsList中循环并得到sub_example,这是我的ITEM_SKU_SUBSCRIBE (以及我的Play Store控制台上的ITEM_SKU_SUBSCRIBE);因此,我的skuDetailsList不是空的或空的。

但是,下面是我的日志输出:

代码语言:javascript
运行
复制
I/MainActivity: Billing response code == 0
    Billing response code is OK
I/MainActivity: onSkuDetailsResponse ; billing result response code == 0
    Billing response code OK
    Loop INDEX 0 ; SkuDetails == Monthly sub (Test Billing)
    skuDetailsList is not null or empty
I/MainActivity: Flow Params = null | sub_example
I/MainActivity: billingFlowResult == 0 | null
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@cb159f0

当我单击"OK“按钮时,会出现有趣的日志:

代码语言:javascript
运行
复制
W/ProxyBillingActivity: Activity finished with resultCode 0 and billing's responseCode: 4
W/BillingHelper: Couldn't find purchase lists, trying to find single data.
W/BillingHelper: Received a bad purchase data.
    Couldn't find single purchase data as well.

我在BillingClient.class上查了一下,发现int ITEM_UNAVAILABLE = 4;interface BillingResponseCode

我正在编译和发布这个应用程序的签名版本configuration

  • An,该应用程序的旧版本是在Google上以alpha格式发布的(但使用相同的版本代码和版本名称)
  • 我的google帐户在测试列表中,它是我今天为此创建的@gmail地址(我的另一个google帐户没有使用@gmail地址-嗯,我昨天在Google Play Console
  • 上创建了这个订阅,我的应用程序从昨天起就在alpha中发布了(而不是在回顾中)。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 07:32:40

看来唯一要做的就是等着..。

今天早上起作用了。

计算2天内的付款,你的应用程序上可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62320895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档