В службе биллинга приложений время от времени убивается

Привет, мы выпустили это приложение на рынке с помощью inApp Billing, и наши журналы показывают, что BillingService (возможно, само приложение) продолжает получать убийства очень случайным образом на определенных клиентских устройствах. Из-за этого иногда я не могу получить уведомление, если покупка была успешной или нет. Некоторым клиентам часто приходится покупать дважды, чтобы совершить успешную покупку. Хотя это случается с небольшим процентом клиентов, но это очень тревожно. Любая идея, почему это может произойти или что можно сделать для решения этой проблемы.

Я не уверен, поможет ли это, но я бы рекомендовал сделать ваш предварительный сервис BillingService: http://developer.android.com/guide/components/services.html#Foreground

Вот фрагмент документации «API», чтобы поставить службу в состояние переднего плана, где система считает, что это то, что пользователь активно осознает и, следовательно, не является кандидатом на убийство при низком уровне памяти ».

Может быть, небольшой процент вашего пользователя имеет низкое состояние памяти, и он начинает убивать службы / приложения (включая ваши).

Можете ли вы использовать код, используемый для вашего биллинга в приложении? Возможно, что биллинг приложений не поддерживается их устройствами или даже если они теряют интернет-соединение при попытке получить доступ к уведомлению на Android Market. То, что я использовал в моем приложении, в основном таково:

@Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if( BillingHelper.isBillingSupported()){ switch (arg2) { case 0: Log.d("Appname", "30 coins"); BillingHelper.requestPurchase(context, "com.paid.smallcoinbundle"); break; case 1: Log.d("Appname", "85 coins"); BillingHelper.requestPurchase(context, "com.paid.medcoinbundle"); break; case 2: Log.d("Appname", "175 coins"); BillingHelper.requestPurchase(context, "com.paid.midcoinbundle"); break; case 3: Log.d("Appname", "500 coins"); BillingHelper.requestPurchase(context, "com.paid.maxcoinbundle"); break; default: Log.d("Appname", "Something broke"); break; } // BillingHelper.requestPurchase(mContext, "android.test.purchased"); // android.test.purchased or android.test.canceled or android.test.refunded or com.blundell.item.passport } else { LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.toast_layout,(ViewGroup) findViewById(R.id.toast_layout_root)); TextView text = (TextView) layout.findViewById(R.id.text); text.setText("In App Billing isnt supported by your device"); Toast toast = new Toast(getBaseContext()); toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); toast.setDuration(Toast.LENGTH_LONG); toast.setView(layout); toast.show(); return; } } 

Затем :

 public Handler mTransactionHandler = new Handler(){ public void handleMessage(android.os.Message msg) { Log.d("Appname", "Transaction complete"); Log.d("Appname", "Transaction status: "+BillingHelper.latestPurchase.purchaseState); Log.d("Appname", "Item purchased is: "+BillingHelper.latestPurchase.productId); if(BillingHelper.latestPurchase.isPurchased()){ Log.d("Appname", "Ispurchased : " + BillingHelper.latestPurchase.productId); if(BillingHelper.latestPurchase.productId.equals("com.paid.smallcoinbundle")){ ConnectToServer.UpdateCoins(context,id,"add","30"); } if(BillingHelper.latestPurchase.productId.equals("com.paid.medcoinbundle")){ ConnectToServer.UpdateCoins(context,id,"add","85"); } if(BillingHelper.latestPurchase.productId.equals("com..paid.midcoinbundle")){ ConnectToServer.UpdateCoins(context,id,"add","175"); } if(BillingHelper.latestPurchase.productId.equals("com.paid.maxcoinbundle")){ ConnectToServer.UpdateCoins(context,id,"add","500"); } finish(); } }; 

};

Поскольку вы сказали, что в биллинге приложений работает, хотя иногда им приходится приобретать товар дважды, я предполагаю, что имена ваших пакетов верны.

Пожалуйста, дайте мне знать, если вы решите его исправить и в чем проблема. Это очень интересная тема.

Intereting Posts