Android 在现有应用中实施谷歌应用内计费

Android 在现有应用中实施谷歌应用内计费,android,installation,in-app-billing,Android,Installation,In App Billing,从一年开始,我就开始开发android应用程序。我认为现在是时候做下一步并实施计费系统了。在我在我的主应用程序中实现这个新功能之前,我认为最好对它进行测试 上周,我开发了一个测试应用程序,该应用程序与我的主应用程序(没有v3计费系统)相同(有v3计费系统)。我发布了它,并通过谷歌Play安装在我的三星笔记本上。我可以购买和订阅。而且效果很好。 因此,我停用了测试应用程序,在我的主应用程序中复制了整个计费方法,更改了Base64编码的RSA公钥并发布了它 安装并启动后,应用程序每次都会崩溃。原因只

从一年开始,我就开始开发android应用程序。我认为现在是时候做下一步并实施计费系统了。在我在我的主应用程序中实现这个新功能之前,我认为最好对它进行测试

上周,我开发了一个测试应用程序,该应用程序与我的主应用程序(没有v3计费系统)相同(有v3计费系统)。我发布了它,并通过谷歌Play安装在我的三星笔记本上。我可以购买和订阅。而且效果很好。 因此,我停用了测试应用程序,在我的主应用程序中复制了整个计费方法,更改了Base64编码的RSA公钥并发布了它

安装并启动后,应用程序每次都会崩溃。原因只是计费系统,因为最新版本在没有计费系统的情况下运行良好。当然,我可以用一个与我的主应用程序相同的新应用程序替换我的主应用程序,但我会丢失所有的用户、统计数据和评论,直到现在。 您知道为什么我的应用程序无法使用RSA密钥安装计费系统吗? 这种情况还有哪些其他原因

onCreate中发生了什么:

    mHelper = new IabHelper(this, base64EncodedPublicKey);

    // enable debug logging (for a production application, you should set this to false).
    mHelper.enableDebugLogging(false);

    // Start setup. This is asynchronous and the specified listener
    // will be called once setup completes.
    Log.d(TAG, "Starting setup.");
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            Log.d(TAG, "Setup finished.");

            if (!result.isSuccess()) {
                // Oh noes, there was a problem.
                complain("Problem setting up in-app billing: " + result);
                return;
            }

            // Hooray, IAB is fully set up. Now, let's get an inventory of stuff we own.
            Log.d(TAG, "Setup successful. Querying inventory.");
            mHelper.queryInventoryAsync(mGotInventoryListener);
        }
    });
第960行发生了什么:

    public IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
        Log.d(TAG, "Query inventory finished .");
        if (result.isFailure()) {
            complain("Failed to query inventory: " + result);
            return;
        }

        Log.d(TAG, "Query inventory was successful.");

        // Purchase premium monthly
        Purchase purchase = inventory.getPurchase(Constants.PREMIUM);
        if(purchase.getPurchaseState() == Purchase.PURCHASED_SUCCESSFULLY && verifyDeveloperPayload(purchase)){
            isPremium = true;
        }else{
            isPremium = false;
            updatePremium(purchase.getPurchaseState());
        }
        Log.d(TAG, "User " + (isPremium ? "HAS" : "DOES NOT HAVE") + " premium surebets for 32 days.");

        Log.d(TAG, "Initial inventory query finished; enabling main UI.");
    }
};

java.lang.NullPointerException at package.Surebets$1.onQueryInventoryFinished(Surebets.java:960)at package.billing.IabHelper$2$1.run(IabHelper.java:607)at android.os.Handler.handleCallback(Handler.java:587)。。。启动时:错误检查账单v3 supportnull异常在Surebets.java:960行,你能发布这个部分吗现在,我自己解决了。如果我调用getPurchase(…),而客户不购买应用内项目,则返回null。在下一行中,我调用purchase.getPurchaseState(),当然它会抛出一个NPE。我添加了空检查,所以它被解决了。