【发布时间】:2014-12-29 16:25:48
【问题描述】:
看过这个链接:
onIabPurchaseFinished never called.
和 ....
我已经查看了以下链接 - 这正是我面临的问题:
IabHelper PurchaseFinishedListener
“kevinl”在上述第二个链接的答案之一中陈述的问题 - 是我遇到的问题,即
我在我的活动中编码了“onActivityResult”
控件确实进入了这个方法 - 但是 - 它确实不转到 - onIabPurchaseFinished
我正在调用采购流程如下:
public void onClickIap(View v) {
if(isAlreadyPurchased){
Log.d(TAG, "In onClickIap >>> The app is purchased ");
}else{
Log.d(TAG, "In onClickIap >>> The app is NOT purchased: ");
/** we need to check if this item was purchased from google store details **/
/** makes synchronous call -return control to callback method in listener **/
/** this is the heart of in app - where all the activity starts **/
mHelper.launchPurchaseFlow(this, ITEM_SKU_TEST_4, 10001,mPurchaseFinishedListener, "mypurchasetoken");
mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase){
Log.d(TAG, "In onIabPurchaseFinished ");
if (result.isFailure()) {
Log.d(TAG, "In onIabPurchaseFinished >>> purchase error ");
return;
}else if (purchase.getSku().equals(ITEM_SKU_TEST_4)) {
Log.d(TAG, "In onIabPurchaseFinished purchase success ");
/**TODO update the db **/
DbClass dbDbClass = new DbClass(getApplicationContext());
dbHelper.updatePurchasedQuiz(2);
/** set the flag **/
isAlreadyPurchased = true;
Log.d(TAG, "The app after all the shebang: ");
Intent intent = new Intent(getApplicationContext(),ExamActivity.class);
intent.putExtra("quizId", "2");
startActivity(intent);
}else{
Log.d(TAG, " ");
Log.d(TAG, "In onIabPurchaseFinished in a weird condition ");
}
}
};
}
}
我的 onActivityResult 实现(我可以在其中看到调试日志)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, " ");
Log.d(TAG, "<<<<<< in IAP ONACTIVITYRESULT >>>>>>");
Log.d(TAG, "onActivityResult " + requestCode + "," + resultCode + "," + data);
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
不知道这是否是原因,但我调用/初始化 mHelper 的方式是:
1 在我的活动 onCreate - 我启动一个线程 (AsyncTask)
2 在方法中 - doInBackground - 我正在初始化这个助手:
mHelper = new IabHelper(ExamHomeActivity.this, base64EncodedPublicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { .... }
3 然后当这个异步任务完成时 - 我在屏幕上显示一些按钮
4 单击任何按钮都会调用上述方法 - onClickIap
谢谢
香卡
【问题讨论】: