IabHelper的应用内结算问题

时间:2013-01-14 00:32:09

标签: android in-app-billing

我正在使用应用内结算教程来开始实施。

  • 我下载了示例应用
  • 从开发者控制台获取我的密钥
  • 在我的清单中添加适当的权限
  • 将aidl文件和所有util java文件放入我的项目中,并将以下代码实现到我的onCreate事件中......

    if (GooglePlayVersion)
    {
        try
        {   
        mHelper = new IabHelper(this, base64EncodedPublicKey);
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
               public void onIabSetupFinished(IabResult result) {
                  if (!result.isSuccess())
                     // Oh noes, there was a problem.
                     debugLog("Problem setting up In-app Billing: " + result, 0);          
                  debugLog("IAB got bound", 0); 
               }
            });
        }
        catch (Exception e){
            debugLog("iab exception " + e.getMessage(), 1);
        }
    }
    

我的应用程序在mHelper.startsetup行上爆炸。没有例外。当我单步执行时,一旦我离开该行,调试就永远不会进入下一行。我的应用程序永远不会启动当然,如果我将GooglePlayVersion设置为false,则一切正常。

编辑:自昨天发布以来,我发现mHelper.startSetup行确实抛出了异常。 Stored Exception Found Binder invocation to an incorrect interface [Ljava.lang.StackTraceElement;@405a8478

我发现其他人发布了此例外情况,并且有人建议我的aidl文件可能与帐单内的界面不匹配。我从下载的trivialdrivessample程序中获取了aidl文件,仅更改了包行。

3 个答案:

答案 0 :(得分:7)

您不应更改aidl文件的包名称。将aidl文件放在 com.android.vending.billing 包下的src目录中。

答案 1 :(得分:3)

虽然我按照Google Android网站的说明一步一步地解决了同样的问题。他们没有清楚正确地提到更改包名称的位置。所以为了修复它,如果你将.aidl文件移动到com.myawesome.app.main,那么你不仅要在所有文件的头文件中更改包声明,还要在labHelper中的这一行中更改.java文件:

Intent serviceIntent = new Intent("com.myawesome.app.main.InAppBillingService.BIND");

您不需要的默认值是:

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");

这为我解决了这个问题,希望它能为你解决这个问题。

答案 2 :(得分:2)

Gary,您似乎在使用In-App结算时遇到了启动问题。这不是一个新问题。应用内结算是一种真正的工作痛苦。许多人都很难让它发挥作用。我建议你先让它独立工作。然后将项目的工作部分集成到您的代码中。我推荐this

在stackoverflow上可以找到其他链接,我此时不会进行搜索。