已经看过这个链接:
onIabPurchaseFinish从未打过电话。
和......我看了下面的链接,这就是我面临的确切问题:
IabHelper PurchaseFinishedListener
在上面第二个链接中的一个答案中由kevinl表示的问题-是我遇到的问题,即
我在我的活动中编码了'onActivityResult'
控件确实进入了这个方法-但是-它没有进入-onIabPurchaseFinated
我调用购买流如下:
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在我的活动上创建-我启动一个线程(AsyncWG)
2在方法-doIn后台-我初始化这个助手:
mHelper = new IabHelper(ExamHomeActivity.this, base64EncodedPublicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { .... }
3然后,当这个异步任务完成时——我在屏幕上显示一些按钮
4单击任何按钮都会调用上述方法——onClickIap
谢谢
香卡
在初始化mPurchaseFinishedListener之前(在调用launchPurchaseFlow之后发生),您正在传递它。
另外,在onClark中初始化监听器不是一个好主意。每次按下按钮时,您都要这样做。从onClickIap()方法中取出它。
您可以在活动中静态地执行此操作,就像在谷歌的示例应用程序Triple Drive中执行此操作一样:
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase){
Log.d(TAG, "In onIabPurchaseFinished ");
...
...
...
}
};
初始化IabHelper最好在活动的onCreate()中完成:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_subscribe);
mHelper = new IabHelper(this);
}
然后别忘了在onDestory()中处理它:
@Override
protected void onDestroy() {
super.onDestroy();
// very important:
if (mHelper != null) {
mHelper.dispose();
mHelper = null;
}
}
此外,不需要从后台线程设置IAB助手。打电话给mHelper。随时从UI线程启动安装。
我在我的开发分支apk上做了什么: > 添加了清单权限 添加了帐单代码来使用我的sku进行购买 我可能漏掉了什么?提前感谢!
我在测试我的应用内计费时遇到了麻烦。 (使用Google Play应用内计费版本3 API) 问题: 已退款的应用程序内购买仍然存在于购买列表中,该列表由BillingClient.query购买()提供。 当我在一月份尝试退款时,退款的物品从购物清单上消失了。 我所做的: 作为测试人员购买了一些物品。 (我很确定对话框说是测试购买。) 之后在谷歌游戏控制台退款。 等到他们的付款状态变成退款。 清
启动购买流后,onActivityResult方法需要什么? 来自平凡的驱动器示例: msgstr"在这里,您可以对与应用内计费无关的活动结果执行任何处理" 这是否意味着您需要更新用户的清单或显示警报框?如果是这样,我已经在OnConsumeFinishedListener中这样做了。我已经测试了我的代码,留下了上面的onActivityResult方法,看起来没问题。这可能会导致任何问题吗? 或
好吧,在你们都冲我火冒三丈之前,我已经试过了互联网上所有其他的答案,但我仍然得到这个错误。 注意:我使用的是应用程序内的V3 API。 首先,我创建了应用内产品(我已经在控制台中有一个apk草稿文件)。 用SKU测试了我的应用程序,它运行良好,并将SKU改回了应用程序中的原始SKU。 我已经使用Eclipse的导出向导创建了签名apk。 已成功将签名的apk文件上载到我的Android控制台开发人
新的Android Billing v3文档和帮助程序代码在启动购买流时使用。我想从开始一个购买流程(并接收结果)。 例如,文件建议致电 助手代码调用 它调用。 问题是,调用会导致在父上被调用,而不是在调用它的上(驻留的地方)。 我可以在父级中接收,然后手动调用上的,但是,有没有一种方法可以从
当我的应用程序打开时,我想在google play上查看应用程序版本。如果应用程序的版本高于安装的应用程序,我想通知用户更新应用程序。我在这里发现了“android query”jar,在这里我无法动态检查版本,我想设置主要版本、次要版本或修订版本。谁能帮帮我怎么办? 提前谢谢