我对应用内计费的工作方式感到非常困惑。我已经阅读了文档,但我一定错过了一些东西,因为我不明白我需要在我的应用程序中实现以使其工作的最后一步。应用内计费非常有效,但是,如果用户卸载我的应用并在未来再次安装它,我的应用程序不知道如何确定应用内购买是否以前进行过。这是我的主要课程的一个片段,我试图处理所有这些:
@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
work) 上没有。onCreate()
我在我的第一个活动中调用它。不知道getPurchaseInformation(...)
一旦它被调用后该怎么办。它没有返回值,所以我不确定我是否可以解析JSON
或我应该做的任何事情......
另外,这两行给了我这个:
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