我有一年开发Android应用程序。我认为现在是时候进行下一步并实施计费系统了。在我的主应用程序中实现这个新功能之前,我认为最好对其进行测试。
上周我开发了一个测试应用程序与我的主应用程序(没有v3计费系统)相同的应用程序(使用v3计费系统)。我发布了它并通过Google Play安装在我的Samsung Note上。我能够购买和订阅。它运作良好。 所以我停用了测试应用程序,在我的主应用程序中复制了整个计费方法,更改了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.");
}
};