【发布时间】:2019-04-18 05:32:43
【问题描述】:
在我的 Android 应用中,我想在一个按钮上显示本地化价格,用于应用内购买。
我已经尝试按照指南设置应用内计费 (https://medium.com/@patpatchpatrick/adding-the-google-play-billing-library-to-your-application-fbeb9ec03151) 来设置计费本身,它似乎适用于测试帐户。
虽然现在不推荐使用 .setSku 和 .setType ,并且现在要使用 .setSkuDetails ,但文档中的内容非常好,因为有很多选项。
但是我似乎无法访问 SkuDetails 类..
几周以来,我一直在尝试实施应用内结算,并查看了各种文章和指南,但似乎无法找到解决方法。我觉得我已经尝试了所有方法,但不知道下一步该去哪里。
public class InAppBilling extends AppCompatActivity implements
PurchasesUpdatedListener {
private static final String TAG = "InAppBilling";
//In APP Produkter
static final String ITEM_SKU_ADREMOVAL = "remove_ads_salary1";
private Button mButton;
private Button back_Button;
private String mAdRemovalPrice;
private SharedPreferences mSharedPreferences;
private BillingClient mBillingClient;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inappbilling);
mBillingClient = BillingClient.newBuilder(InAppBilling.this).setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(int responseCode) {
if (responseCode == BillingClient.BillingResponse.OK){
List skuList = new ArrayList<>();
skuList.add(ITEM_SKU_ADREMOVAL);
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<SkuDetails> skuDetailsList) {
//Processing the response if the code = OK, and skuDetailsList isn't = null(empty)
if (responseCode == BillingClient.BillingResponse.OK && skuDetailsList != null){
for (SkuDetails skuDetails : skuDetailsList){
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
if (ITEM_SKU_ADREMOVAL.equals(sku)){
mAdRemovalPrice = price;
}
}
}
}
});
}
}
@Override
public void onBillingServiceDisconnected() {
// IMPLEMENT RETRY POLICY - TRY TO RESTART ON NEXT REQUEST BY CALLING startConnection()
}
});
mButton = findViewById(R.id.buy_button);
mButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
//THIS skuDetails gives the error 'Cannot resolve symbol
.setSkuDetails(skuDetails)
// .setSku(ITEM_SKU_ADREMOVAL)
// .setType(BillingClient.SkuType.INAPP)
.build();
int responseCode = mBillingClient.launchBillingFlow(InAppBilling.this, flowParams);
}
});
back_Button = findViewById(R.id.back_button);
back_Button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//Returnere til det fragment man kom fra
InAppBilling.super.onBackPressed();
}
});
}
好吧,我很想通过 SkuDetails 获得访问权限,因此我可以使用它的 getPrice() 方法来显示我的应用内的本地化价格。
现在,我不能使用 getPrice()。
【问题讨论】:
-
您能解释一下为什么不能使用 getPrice() 吗?你的意思是你得到一个空字符串?您的代码表明您得到了它: String price = skuDetails.getPrice();
-
@PerracoLabs 是的,我的错。我实际上可以使用它,在那一行中,问题是,在 OnSkuDetailsResponse 方法之外,我无法访问它。我想写一行 mButton.setText() = SkuDetails.getPrice();但它不允许我