【Google Play(从IInAppBillingService更新价格)】著论准过秦,作赋拟子虚。这篇文章主要讲述Google Play:从IInAppBillingService更新价格相关的知识,希望能为你提供帮助。
我创建了一个用于在商店中处理订阅的类。一开始,我从服务器收到订阅列表,其中包含价格代码正在运行,在大多数设备上都没有问题。但有些用户没有收回价格。这就像服务器没有响应。我已经研究了Google文档中的实现示例,但我无法理解代码中可能出现问题的位置。我的部分代码:
public class BillingActivity extends AppCompatActivity {RelativeLayout imageLayout;
View payButton;
// WebView payWebView;
// TextView useCodeButton;
ProgressBar progress1;
ProgressBar progress2;
ProgressBar progress3;
IInAppBillingService inAppBillingService;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_billing_subscription);
price_1monthTextView = (TextView) findViewById(R.id.price_1monthTextView);
relative_1month = (RelativeLayout) findViewById(R.id.relative_1month);
relative_1month.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (MainActivity.myAccount == null) return;
if (MainActivity.myAccount.getUniqid() == null) return;
if (subscription1m != null) {
try {
Log.d("my", "purchase..." + subscription1m.storeName);
purchaseProduct(subscription1m);
} catch (Exception e) {
e.printStackTrace();
Log.d("my", "purchase error = " + e.toString());
}
}
}
});
progress1 = (ProgressBar) findViewById(R.id.progress1);
startGoogleBilling();
}private void startGoogleBilling() {
if (serviceConnection != null) {
unbindService(serviceConnection);
}progress1.setVisibility(View.VISIBLE);
serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
inAppBillingService = IInAppBillingService.Stub.asInterface(service);
getSubscribtionsList();
}@Override
public void onServiceDisconnected(ComponentName name) {
inAppBillingService = null;
}
};
Intent serviceIntent =
new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}private static final int PR_CNT = 3;
List<
InAppProduct>
subscriptions = null;
InAppProduct subscription1m = null;
InAppProduct subscription3m = null;
InAppProduct subscription1y = null;
String[] productIds = {"eq.subscription.1m", "eq.subscription.3m.2", "eq.subscription.1y"};
private void getSubscribtionsList() {
mSwipeRefreshLayout.setRefreshing(false);
progress1.setVisibility(View.GONE);
try {subscriptions =
getInAppPurchases("subs", productIds[0], productIds[1], productIds[2]);
if (subscriptions.size() == PR_CNT) {
for (InAppProduct inAppProduct : subscriptions) {
String productId = inAppProduct.productId;
Log.d("my", "productId= " + productId);
if (productId.contains(productIds[0])) subscription1m = inAppProduct;
if (productId.contains(productIds[1])) subscription3m = inAppProduct;
if (productId.contains(productIds[2])) subscription1y = inAppProduct;
}
Log.d("my", "1m= " + subscription1m.storeName + " pr=" + subscription1m.price + "\n\r" +
"3m= " + subscription3m.storeName + " pr=" + subscription3m.price + "\n\r" +
"1y= " + subscription1y.storeName + " pr=" + subscription1y.price + "\n\r");
///----------------------!!!!
// purchaseProduct(inAppProduct);
}updatePrices();
} catch (Exception e) {
Log.d("my", "exc= " + e.toString());
if (e.toString().contains("Attempt to invoke interface method 'android.os.Bundle com.android.vending.billing.IInAppBillingService.getSkuDetails")) {
if (attempt <
4) {
//getSubscribtionsList();
// startGoogleBilling();
} else {
}}
//Toast.makeText(this, "Google inApp connection error", Toast.LENGTH_SHORT).show();
//refreshButton.setVisibility(View.VISIBLE);
startGoogleBilling();
}
}private int attempt = 0;
@Override
public void onDestroy() {
super.onDestroy();
if (serviceConnection != null) {
unbindService(serviceConnection);
}
}class InAppProduct {public String productId;
public String storeName;
public String storeDescription;
public String price;
public boolean isSubscription;
public int priceAmountMicros;
public String currencyIsoCode;
public String getSku() {
return productId;
}String getType() {
return isSubscription ? "subs" : "inapp";
}
}List<
InAppProduct>
getInAppPurchases(String type, String... productIds) throws Exception {
ArrayList<
String>
skuList = new ArrayList<
>
(Arrays.asList(productIds));
Bundle query = new Bundle();
query.putStringArrayList("ITEM_ID_LIST", skuList);
Bundle skuDetails = inAppBillingService.getSkuDetails(
3, getPackageName(), type, query);
ArrayList<
String>
responseList = skuDetails.getStringArrayList("DETAILS_LIST");
List<
InAppProduct>
result = new ArrayList<
>
();
for (String responseItem : responseList) {
JSONObject jsonObject = new JSONObject(responseItem);
InAppProduct product = new InAppProduct();
// "com.example.myapp_testing_inapp1"
product.productId = jsonObject.getString("productId");
// Покупка
product.storeName = jsonObject.getString("title");
// Детали покупки
product.storeDescription = jsonObject.getString("description");
// "0.99USD"
product.price = jsonObject.getString("price");
// "true/false"
product.isSubscription = jsonObject.getString("type").equals("subs");
// "990000" = цена x 1000000
product.priceAmountMicros =
Integer.parseInt(jsonObject.getString("price_amount_micros"));
// USD
product.currencyIsoCode = jsonObject.getString("price_currency_code");
result.add(product);
}
return result;
}private void updatePrices() {
if (subscriptions.size() == PR_CNT) {price_1monthTextView.setText(subscription1m.price);
price_3monthTextView.setText(subscription3m.price);
price_1yearTextView.setText(subscription1y.price);
}}}
答案我的问题是X变量priceAmountMicros的位深度
来自playmarket的价格乘以1000000,而哈萨克坚戈的汇率= 1美元= 331,3 KZT。如果我有18 000 KTZ和* 1000 000的价格。对于价格变量我必须使用长型
推荐阅读
- 处理Android SDK版本和定位
- Android(如何在Google Play开发者控制台中获取有关已捕获例外的信息())
- 使用上传密钥签署旧版Android应用
- Android应用程序图标是主屏幕上的默认图标
- 不同的SHA1键(Android)
- 如何在UWP App中创建信息丰富的Toast通知
- 本机C ++中的CreatePushNotificationChannelForApplicationAsync
- 在开发Windows Phone 8.1应用程序时,我在哪里可以找到保存在ApplicationData.Current.LocalFolder中的文件()
- Metro / Windows Store App(相对图像源绑定不起作用())