Articles of in app billing

“你已经拥有这个项目”,但getPurchases是空的

我昨天购买了一个订阅 (不是Managed Product或非Unmanaged Product )来testing,我退还了自己,然后取消了订阅。 退款和取消后,当我打电话给: m_billingService.getPurchases(3, m_context.getPackageName(), ITEM_TYPE_SUBS, null) 它会返回购买状态为0 (有效/正常)。 今天当我调用同样的方法时,它什么也不返回。 然而,当我尝试购买该项目,谷歌播放商店响应,我已经拥有该项目。 我已经重新启动了Android设备,清除了谷歌播放服务caching,并确保只有testing帐户在我的手机上激活(即,我删除了我的谷歌开发者帐户)。 问题之前已经被问过,但总是在产品而不是订阅的情况下。 这些post的答案似乎是“消费”产品; 订阅不被消耗。

android应用内结算 – restoreTransactionInformation

我试图使用应用内结算function将免费应用升级到“付费”版本。 我使用本教程中的代码来处理计费,因为官方开发人员网站上的代码太复杂,太麻烦,无法像我的简单stream程那样执行。 我的代码来做升级工作正常。 当我尝试添加一些东西来检查用户是否已经购买了,但是通过重新安装或者通过清除数据(我不在乎哪个)丢失了购买数据时,问题就出现了。 在应用程序启动时,我检查第一次运行后设置的标志。 如果该标志不存在,则向用户显示一个对话框,警告他们该应用程序将检查以前的购买,并且当他们单击确定时,调用restoreTransactionInformation方法。 这会导致应用程序强制closures。 由于应用内结算在debugging或仿真器上不起作用,因此每次我想要尝试代码时,都必须发布已签名的应用程序版本。 我无法知道为什么应用程序退出,当我尝试进行restoreTransactionInformation请求。 有没有人有一个线索如何诊断,或者是什么可能导致我的应用程序死亡? 或者如何使用restoreTransactionInformation方法的工作示例? 编辑:所以它看起来像RESTORE_TRANSACTIONS请求得到正确的答复,并返回我的testing购买的细节。 不幸的是,在它可以做任何事情之前,应用程序被迫closures。 下面是一个logcat(没有模糊代码),在市场响应RESTORE_TRANSACTIONS请求之后发生的事情: I/BillingService( 6484): confirmTransaction() D/Finsky ( 1884): [7] MarketBillingService.getPreferredAccount: com.hippypkg: Account from first account. I/BillingService( 6484): current request is:********** I/BillingService( 6484): RESTORE_TRANSACTIONS Sync Response code: RESULT_OK D/WindowManagerImpl( 6484): finishRemoveViewLocked, mViews[0]: com.android.internal.policy.impl.PhoneWindow$DecorView@********** W/InputManagerService( 1381): [unbindCurrentClientLocked] Disable input method client. W/InputManagerService( 1381): [startInputLocked] Enable […]

在应用程序结算v3 NullPointerException

要在Android的应用程序结算v3中进行testing,我实现了一个添加单个项目适配器的对话框。 我已经添加了testingSkus,“android.test.purchased”,“android.test.canceled”,“android.test.refunded”,“android.test.item_unavailable”。 当我使用对话框启动采购stream程时,一切都很好,我可以购买这个商品,而且这个商品是绝对购买的。 但是,当我的应用程序尝试刷新UI时,我得到一个nullpointerexception。 我知道刷新工程。 这是我的logcat: 12-16 01:06:06.706: I/Running inventory query with(20846): android.test.purchased 12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"} 12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"} 12-16 01:06:06.706: I/Running inventory query with(20846): android.test.canceled 12-16 01:06:06.706: I/Running details query with(20846): null 12-16 01:06:06.706: I/Running details […]

Android InApp购买空指针exception

我已经在我的应用程序中实施了inApp购买,但是有时它给了我NPE,下面是堆栈跟踪。 如果有兴趣的话,我也可以发布代码。 java.lang.RuntimeException: Unable to start service com.market.BillingService@48400380 with null: java.lang.NullPointerException at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063) at android.app.ActivityThread.access$3600(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.market.BillingService.handleCommand(BillingService.java:369) at com.market.BillingService.onStart(BillingService.java:359) at android.app.Service.onStartCommand(Service.java:420) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053) … 10 more java.lang.NullPointerException at com.market.BillingService.handleCommand(BillingService.java:369) at com.market.BillingService.onStart(BillingService.java:359) at […]

Android inapp账单responseList是空的

我在应用程序中定义了一些应用程序产品。 我已经将APK上传到Google Play,并在Google play上添加了inapp购买产品。 我有我的ServiceConnection定义如下: ServiceConnection mServiceConn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { mService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = IInAppBillingService.Stub.asInterface(service); connect(); } }; onServiceConnected函数被调用, bindService返回true。 接下来是connectfunction。 public void connect() { new Thread(new Runnable() { public void run() { try { // Purchase type […]

InApp在Android中购买

public static boolean verify(PublicKey publicKey, String signedData, String signature) { Log.i(TAG, "signature: " + signature); Signature sig; try { sig = Signature.getInstance(SIGNATURE_ALGORITHM); sig.initVerify(publicKey); sig.update(signedData.getBytes()); if (!sig.verify(Base64.decode(signature))) { Log.e(TAG, "Signature verification failed."); return false; } return true; } catch (NoSuchAlgorithmException e) { Log.e(TAG, "NoSuchAlgorithmException."); } catch (InvalidKeyException e) { Log.e(TAG, "Invalid key specification."); } catch (SignatureException […]

IabHelper Android的错误(NullPointerException)launchPurchaseFlow?

我正在使用来自Google的应用内结算的最新版本文件。 今天,当我下载应用程序时,我的手机中出现错误(我试图重复这些步骤,但是错误不再出现)。 比方说,在我的MainActivity中,我有一个button,可以让用户购买一些应用内产品。 我的活动调用这个构造函数: public void launchPurchaseFlow(Activity act, String sku, int requestCode, OnIabPurchaseFinishedListener listener) { launchPurchaseFlow(act, sku, requestCode, listener, ""); } 通过这种方式: mHelper.launchPurchaseFlow(MainActivity.this, SKU_UNLOCKED, RC_REQUEST, mPurchaseFinishedListener, ""); 今天我得到了这个NullPointerException错误: java.lang.NullPointerException at xxx.xxx.xxxxx.util.IabHelper.launchPurchaseFlow(IabHelper:386) at xxx.xxx.xxxxx.util.IabHelper.launchPurchaseFlow(IabHelper:338) at xxx.xxx.xxxxx.MainActivity$6.onClick(MainActivity:422) MainActivity的第422行是mHelper.launch … IabHelper的第338行是构造函数。 然后在里面启动购买stream程: 386行: Bundle buyIntentBundle = mService.getBuyIntent(3, mContext.getPackageName(), sku, itemType, extraData); 这是在这个try-catch块内: try { logDebug("Constructing buy intent for […]

Android在应用程序结算v3响应不包括orderId

我花了将近两天的时间来处理Android的应用内结算。 一切工作正常,但最终我没有得到JSON响应orderId ,这是吓我的脑海。 我不知道我错过了什么。 任何帮助表示赞赏。 这是我在purchaseFinishListener获得的JSON响应: jsonPurchaseInfo: {"packageName":"com.app.mikedevice","productId":"monthly","purchaseTime":1429697010648,"purchaseState":0,"purchaseToken":"adbidjaciiidgknlglflebfb.AO-J1OxdrgGs2kFS-xf6Qo7j3eKabw4-Rto9xli4XqpPua_WtJVLNJSIpd3Oxwq7s_Uja4bVywEFf-iUP1g1dByizN984WHYi12ekQZ8T7X6oiitr5uiX2c","autoRenewing":true}

使用In App Billing将付费的Android应用程序更改为免费 – 对现有客户进行访问

我今天在Google Play上有一个付费应用程序,我想换成3个应用程序内购买的免费应用程序。 问题的原因是如何“给”应用程序内购买给已经支付给应用程序的现有客户。 我只是有一个思想 – 可以执照吗? 现有的付费应用程序使用Google许可,但是当所有function都以应用程序内购买的方式购买时,应用程序就不再需要了 – 对吧? 所有现有客户都有许可证,而所有新客户都不需要。 是否有可能检查许可证,如果发现授予用户访问相同的function,3个应用内购买将允许访问?

从活动中解耦应用内帐单

我可以在Android In-App-Billing V3中find的所有教程都假定您有一个单独的活动来处理与计费相关的所有事宜。 在我的情况下,有多个活动需要访问帐单。 我将如何处理这样一个最优雅的东西? 我偶然发现的一个示例问题:在使用Google结算助手类时,您总是将当前活动作为参数进行交付。 稍后的callback(例如onActivityResult)在该活动上被调用。 但是,如果主动活动一直改变呢? 我是否必须始终closures并重新初始化结算?