编辑:问题出在Java这边。购买完成的监听器没有被调用。这篇文章非常有帮助:IabHelper PurchaseFinishedListener
我的Cocos2dx游戏在Android和iOS上运行得很好,唯一困扰我的是Android应用内购买。
我使用JNI从C++调用Java。Java代码与Google Play计费系统来回传递,并最终回调C++代码,指示要给用户多少宝藏(成功购买的数量)。
从Java返回到C++的调用非常奇怪。运行的C++代码应该更新两个东西的显示。然而,它只更新了一个,而且不一致。此外,Java对C++的多次调用导致CCNodes忽略触摸并做其他奇怪的事情。
阅读类似问题的文章后,我意识到可能是Java到C++的调用不在主/UI线程上。因此,我试图通过以下方式进行修复:
我使用JNI从C++调用Java。Java代码与Google Play计费系统来回传递,并最终回调C++代码,指示要给用户多少宝藏(成功购买的数量)。
从Java返回到C++的调用非常奇怪。运行的C++代码应该更新两个东西的显示。然而,它只更新了一个,而且不一致。此外,Java对C++的多次调用导致CCNodes忽略触摸并做其他奇怪的事情。
阅读类似问题的文章后,我意识到可能是Java到C++的调用不在主/UI线程上。因此,我试图通过以下方式进行修复:
// Java code
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
String sku = purchase.getSku();
if (sku.equals(IAB_ID_ABC)) {
me.runOnUiThread(new Runnable() {
public void run() {
callCppMethodFromJava_giveUserABC();
}
});
}
}
};
在这里,我试图在主/UI线程上调用giveUserABC。虽然giveUserABC被调用了,但它表现出了如上所述的奇怪行为。
我尝试的另一件事是通过CCNotificationCenter在giveUserABC中发布通知。这是一个瞎猜,但我读到有人说它在某个地方起作用了。
不幸的是,这些都没有解决奇怪的行为。非常感谢任何帮助理解和解决这种情况!
void Java_org_cocos2dx_lib_Cocos2dxActivity_MyAwesomeFunction
之类的名称。在Java代码中,你可以这样写:public static native void MyAwesomeFunction();
- SundayMonday