Я очень смущен тем, как работает биллинг в приложении. Я прочитал документацию и, должно быть, что-то упустил, потому что я не понимаю последний шаг, который мне нужно реализовать в моем приложении, чтобы это заработало. Выставление счетов в приложении работает отлично, однако, если пользователь удалит мое приложение и установит его снова в будущем, мое приложение не знает, как определить, была ли ранее совершена покупка в приложении. Вот фрагмент из моего основного класса, где я пытаюсь справиться со всем этим:
@Override
public void onCreate(Bundle savedInstanceState)
{
mContext = this;
startService(new Intent(mContext, BillingService.class));
BillingHelper.setCompletedHandler(mTransactionHandler);
}
Я использую примеры классов из проекта примера подземелий. Чего я не понимаю, так это того, как приведенный ниже код работает во время покупки, но его повторный запуск не работает, чтобы проверить, было ли что-то уже куплено. Я застрял в этой части уже около месяца, и я очень расстроился из-за этого.
public Handler mTransactionHandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
Log.i(TAG, "Transaction complete");
Log.i(TAG, "Transaction status: "
+ BillingHelper.latestPurchase.purchaseState);
Log.i(TAG, "Item purchased is: "
+ BillingHelper.latestPurchase.productId);
if (BillingHelper.latestPurchase.isPurchased())
{
new Message("Thank you!", getApplicationContext());
PAY_VERSION = true;
SharedPreferences purchasePreferences = getSharedPreferences(PURCHASE_PREFERENCES, Activity.MODE_PRIVATE);
Editor purchaseEditor = purchasePreferences.edit();
purchaseEditor.putBoolean("purchased", PAY_VERSION);
purchaseEditor.commit();
Intent intent = getIntent();
finish();
startActivity(intent);
}
};
Что мне нужно, так это какой-то способ запросить сервер, чтобы узнать, был ли куплен этот предмет или нет. Я понимаю, что где-то там есть PURCHASE_STATE_CHANGED
, однако я понятия не имею, как что-то сделать, когда он определяет, что состояние изменилось, или как инициировать его для проверки. Я заблудился, и все, что мне нужно, это хороший толчок в правильном направлении, потому что пока что я просто полностью заблудился.
РЕДАКТИРОВАТЬ:
Я также слышал, что вам нужно анализировать JSON, но я понятия не имею, как даже начать это делать.
РЕДАКТИРОВАТЬ 2:
Мне что, звонить сюда, чтобы проверить?
BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());
BillingHelper.getPurchaseInformation(new String[] {"myItem"});
Ранее этот код давал сбой на телефоне моей сестры (SGS3
, ICS
), но не на моем (работают GN
, ICS
и JB
). Я вызывал его в onCreate()
моей первой активности. Не совсем уверен, что делать с getPurchaseInformation(...)
после того, как его вызвали. У него нет возвращаемого значения, поэтому я не уверен, смогу ли я разобрать JSON
или что-то еще, что я должен делать...
Кроме того, эти 2 строки дают мне следующее:
08-27 11:54:04.271: E/BillingService(17702): BillingHelper not fully instantiated
08-27 11:54:04.271: E/BillingService(17702): BillingHelper not fully instantiated