2

我正在使用应用内计费教程开始实施。

  • 我下载了示例应用程序
  • 从开发者控制台获取我的密钥
  • 在我的清单中放置适当的权限
  • 将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 文件,仅更改了包行。

4

3 回答 3

7

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

于 2013-02-01T05:54:37.603 回答
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");

这为我修复了它,希望它也能为你修复它。

于 2013-11-09T17:46:09.470 回答
2

Gary,您似乎在应用内计费方面遇到了启动挑战。这不是一个新问题。应用内计费是一个真正的痛苦开始工作。很多人都很难让它工作。我建议你先让它独立工作。然后将项目的工作部分集成到您的代码中。我推荐这个

其他链接可以在stackoverflow上找到,我暂时不去搜索。

于 2013-01-14T17:59:33.680 回答