>

사용자가 구독을 구매할 수 있도록하는 Android 애플리케이션에 대한 인앱 결제를 만들려고합니다. 나는 그것을 관리하고 구독을 구입할 수 있지만 내가 얻지 못하는 것은 구독하지 않은 사람들에게 앱의 일부 기능을 어떻게 제한 할 수 있습니까?

그에 대한 튜토리얼을 찾지 못하는 것 같습니다. 내가 원하는 것은 사용자가 인앱 결제 창을 프롬프트하지 않은 경우 버튼을 누르는 것입니다. 이 코드로 달성 할 수 있습니다.

public void launchBillingFLow(@SkuType String skuType, String productId) {
    Runnable launchBillingRequest = () -> {
        BillingFlowParams mBillingFlowParams;
        mBillingFlowParams = BillingFlowParams.newBuilder()
                .setSku(productId)
                .setType(skuType)
                .build();
        mBillingClient.launchBillingFlow((Activity) context, mBillingFlowParams);
    };
    executeServiceRequest(launchBillingRequest);
}

그러나 사용자가 이미 가입 한 경우 어떻게됩니까? 따라서 질문은 사용자가 가입되어 있는지 확인하고 버튼 누름을 실행하고 청구 창을 표시하지 않으면 어떻게 할 수 있습니까? 사용자가 인터넷에 연결된 경우에만 해당 정보를 얻을 수 있습니까? 장치에 해당 정보를 저장해야합니까?

  • 답변 # 1

    구독 세부 정보를 얻으려면이 구독 방법을 사용하십시오-

    <올>

    구독이 이미 구매되었는지 확인하려면 (responseCode == 7)

    purchasesResult.getPurchasesList ()를 사용하여 모든 구매 목록 가져 오기

    onPurchasesUpdated 메소드를 사용하여 구독을 성공적으로 파싱 한 직후 응답 받기

    BillingFlowParams.Builder를 사용하여 인앱 결제 흐름 표시

       mBillingClient.startConnection(new BillingClientStateListener() {
                @Override
                public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
                    if (billingResponseCode == BillingClient.BillingResponse.OK) {
                        // The billing client is ready. You can query purchases here.
                        final Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.SUBS);
                        for (Purchase sourcePurchase : purchasesResult.getPurchasesList()) {
                            if (sourcePurchase != null) {
                                ConsumeResponseListener listener = new ConsumeResponseListener() {
                                    @Override
                                    public void onConsumeResponse(final int responseCode, final String purchaseToken) {
                                        // Log.d("anupam2", responseCode + "  <------->  "+ purchasesResult.getPurchasesList() + "  <------->  " + purchaseToken);
                                    }
                                };
                                mBillingClient.consumeAsync(sourcePurchase.getPurchaseToken(), listener);
                            } else {
                            }
                        }
                        if (purchasesResult.getPurchasesList().size() > 0) {
                            //  Log.d("anupam3", purchasesResult.getPurchasesList().size() + "");
                        } else {
                            //  Log.d("anupam4", purchasesResult.getPurchasesList().size() + "");
                            BillingFlowParams.Builder builder = BillingFlowParams.newBuilder().setSku("234r23446").setType(BillingClient.SkuType.SUBS);
                            int responseCode = mBillingClient.launchBillingFlow(SplashActivity.this, builder.build());
                            if (responseCode == 7) {
                                //Item already purchased
                            }
                        }
                    }
                }
                @Override
                public void onBillingServiceDisconnected() {
                    // Try to restart the connection on the next request to
                    // Google Play by calling the startConnection() method.
                    Toast.makeText(SplashActivity.this, "Failed", Toast.LENGTH_LONG).show();
                }
            });
    mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() {
                @Override
                public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
                    //  Log.d("anupam", responseCode + "");
                    if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
                        for (Purchase purchase : purchases) {
                        //List of purchases
                        }
                    } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
                        Toast.makeText(SplashActivity.this, "Sorry, you have canceled purchase Subscription.", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(SplashActivity.this, "Sorry, some error occurred.", Toast.LENGTH_SHORT).show();
                    }
                }
            }).build();
    
    

    이제 당신이 할 수있는 일은 스플래시 화면에서 이것을 호출하고 응답 코드를 기반으로 앱에서 sharedpreference 또는 전역 변수를 사용하여 값을 저장하는 것입니다. 구독 ID에 대한 응답 코드가 7인지 확인하십시오. 응답 된 경우 (responseCode == 7의 경우 값을 설명 된대로 저장) 프리미엄 기능을 표시하지 마십시오.

    도움이 되길 바랍니다!

  • 이전 ios - Objective C 함수의 주소를 C 함수로 전달하는 방법은 무엇입니까?
  • 다음 apache - Htaccess 다시 쓰기를 사용하여 URL에서 쉼표로 구분 된 16 진수 값을 캡처하고 쉼표를 대시로 바꾸는 방법