最近,我发现Crashlytics报告了一些崩溃事件,其中包含以下堆栈跟踪:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'android.os.Bundle com.android.vending.billing.IInAppBillingService.a(int, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at com.android.vending.billing.util.IabHelper.queryPurchases(IabHelper.java:822)
at com.android.vending.billing.util.IabHelper.queryInventory(IabHelper.java:526)
at com.android.vending.billing.util.IabHelper.queryInventory(IabHelper.java:505)
Proguard映射是:
com.android.vending.billing.IInAppBillingService -> com.android.vending.billing.IInAppBillingService:
int isBillingSupported(int,java.lang.String,java.lang.String) -> a
android.os.Bundle getSkuDetails(int,java.lang.String,java.lang.String,android.os.Bundle) -> a
android.os.Bundle getBuyIntent(int,java.lang.String,java.lang.String,java.lang.String,java.lang.String) -> a
android.os.Bundle getPurchases(int,java.lang.String,java.lang.String,java.lang.String) -> a
int consumePurchase(int,java.lang.String,java.lang.String) -> b
所以崩溃是here:
Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(),
itemType, continueToken);
mService是null
。
我已跳转到服务连接,发现IabHelper
does not尝试重新连接到该服务:
@Override
public void onServiceDisconnected(ComponentName name) {
logDebug("Billing service disconnected.");
mService = null;
// should not it try to rebind to the service here?
}
这意味着一旦服务断开连接,所有其他调用都会导致应用程序崩溃,就像崩溃一样!这种行为合理吗?它不应该尝试默认重新绑定到服务吗?我希望在断开连接时重新绑定以继续工作或触发一些回调以禁用用户的应用内计费。有什么想法/更好的想法吗?