java - 如何使用 base64 进行应用内计费,我需要吗?
问题描述
几天来,我一直在尝试编写一个工作车间系统,但我发现计费客户端未连接。这里的 Toast 消息是连接到帐单时出错。
错误在哪里?
我需要帮助课程吗?在许多说明中,据说您可以使用帮助类,但不是必须的。
如果购买了 Aktikel,有哪种可能性可以对每篇文章执行另一个代码?
我想提供六种用户可以购买的数字产品。
感谢您的帮助。
这是我的 ShopActivity.class 代码:
public class ShopActivity extends AppCompatActivity implements PurchasesUpdatedListener {
private BillingClient billingClient;
Button loadProdukt;
RecyclerView recyclerProdukt;
// IabHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop);
// String base64EncodedPublicKey = "_BASE64_KEY_";
// mHelper = new IabHelper(this, base64EncodedPublicKey);
// TODO 01.07.2019 IabHelper?
setupBillingClient();
loadProdukt = findViewById(R.id.btn_load_produkt);
recyclerProdukt = findViewById(R.id.recycler_view_paket);
recyclerProdukt.setHasFixedSize(true);
recyclerProdukt.setLayoutManager(new LinearLayoutManager(this));
// event
loadProdukt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(billingClient.isReady()){
SkuDetailsParams params = SkuDetailsParams.newBuilder()
.setSkusList(Arrays.asList("10_coins","20_coins","30_coins","40_coins","80_coins","200_coins"))
.setType(BillingClient.SkuType.INAPP)
.build();
billingClient.querySkuDetailsAsync(params, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BilllingResonse.OK) {
loadProduktToRecyclerView(skuDetailsList);
}else{
Toast.makeText(ShopActivity.this, "Cannot query product", Toast.LENGTH_SHORT).show();
}
}
});
}else{
Toast.makeText(ShopActivity.this, "Billing not ready", Toast.LENGTH_SHORT).show();
}
}
});
}
private void loadProduktToRecyclerView(List<SkuDetails> skuDetailsList) {
ProduktAdapter adapter = new ProduktAdapter(this, skuDetailsList,billingClient);
recyclerProdukt.setAdapter(adapter);
}
private void setupBillingClient() {
// billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
billingClient = BillingClient.newBuilder(this).setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BilllingResonse.OK) {
Toast.makeText(ShopActivity.this, "Success to connect Billing", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(ShopActivity.this, "Error not connect to Billing", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBillingServiceDisconnected() {
Toast.makeText(ShopActivity.this, "You are disconnect.", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
// if user click Buy, we will retrieve data here
Toast.makeText(this, "Purchase item: "+purchases.size(), Toast.LENGTH_SHORT).show();
if (billingResult.getResponseCode() == BillingResponse.OK && purchases != null) {
for ( Purchase purchases : purchases) {
handlePurchase (purchases);
}
}else if (billingResult.getResponseCode() == BillingResponse.USER_CANCELED) {
}else{
}
}
}
解决方案
AIDL已弃用,请使用Google Play 结算库
推荐阅读
- python - 是否可以将 Revit 文件上传到 Web 应用程序并在其上实现 Dynamo 代码?就像在 Revit 之外的 Revit 文件上实现 Dynamo 代码
- flutter - 颤动中的“多个小部件使用相同的 GlobalKey”错误
- python - 如何修复此错误:sqlite3.ProgrammingError: You did not provide a value for binding 5
- vue.js - 在VueJs中,如何获取完整单选按钮组的事件@focusout
- c# - 当记录尚未保存到数据库时,C# EF 计算属性不计算
- elasticsearch - 在 K3s 上运行多节点弹性搜索
- azure - Azure DevOps 构建执行带有 args 的 powershell 脚本需要运行两次才能通过 ps 脚本修改所有必要的文件
- powershell - 如何创建 Greengrass 组(aws iot)
- vim - 如何在vim上映射Mac键盘JIS布局中常见的「英数」或「かな」键?
- java - 冒泡排序对象