Google In App Billing 测试购买
Google InApp Biling test purchase
无法在测试购买模式下购买任何东西。这是代码。当我在 DialogFragment 中单击“是”时,没有任何变化。
但是,如果我尝试在发行版 APK 中购买,一切都可以。有什么问题吗?
public void StupidLogic(){
ITEM_SKU = "android.test.purchased";
mHelper.launchPurchaseFlow(getActivity(), ITEM_SKU, 10001, mPurchaseFinishedListener, "mytoken");
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result,
Purchase purchase)
{
if (result.isFailure()) {
// Handle error
return;
}
else if (purchase.getSku().equals(ITEM_SKU)) {
consumeItem();
}
}
};
public void consumeItem() {
mHelper.queryInventoryAsync(mReceivedInventoryListener);
}
IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (result.isFailure()) {
Log.d("Billing"," Such Failure! WOW!");
} else {
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
mConsumeFinishedListener);
}
}
};
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase,
IabResult result) {
if (result.isSuccess()) {
//Приходящий ответ!!!!!--------------------------------------------------------------------------------------------
//String URL = "http://cybergenesis.ru/egor/add_service?ontime=" + ontimeString + "&offtime=" + offtimeString + "&user_id=" + info_id + "&service=" + Integer.toString(position + 1) + "&balance=" + String.valueOf(balance);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://cybergenesis.ru/egor/")
.addConverterFactory(GsonConverterFactory.create())
.build();
APIService service = retrofit.create(APIService.class);
Call<Post> call = service.addService(ontimeString, offtimeString, info_id, positionStr, Balance);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, retrofit2.Response<Post> response) {
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
}
});
} else {
// handle error
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
}
如果我不在对话框中购买也可以。
如果 IAB 在 apk 的签名发布版本中工作但在调试中不工作,这可能是你的问题:
您应该修改 Security.java 文件以激活调试模式。这允许该方法在未签名的 apk 中工作。这仅供调试,记得在发布前还原它。
public static boolean verifyPurchase(String base64PublicKey,
String signedData, String signature) {
if (TextUtils.isEmpty(signedData) ||
TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
if (BuildConfig.DEBUG) {
return true;
}
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
InApp 只能购买并且只能在生产应用程序中使用,因此您必须获得签名的 apk 并将其上传到游戏控制台上进行 alpha 测试。
这些步骤可以为您提供更多帮助:
无法在测试购买模式下购买任何东西。这是代码。当我在 DialogFragment 中单击“是”时,没有任何变化。 但是,如果我尝试在发行版 APK 中购买,一切都可以。有什么问题吗?
public void StupidLogic(){
ITEM_SKU = "android.test.purchased";
mHelper.launchPurchaseFlow(getActivity(), ITEM_SKU, 10001, mPurchaseFinishedListener, "mytoken");
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
= new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result,
Purchase purchase)
{
if (result.isFailure()) {
// Handle error
return;
}
else if (purchase.getSku().equals(ITEM_SKU)) {
consumeItem();
}
}
};
public void consumeItem() {
mHelper.queryInventoryAsync(mReceivedInventoryListener);
}
IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if (result.isFailure()) {
Log.d("Billing"," Such Failure! WOW!");
} else {
mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
mConsumeFinishedListener);
}
}
};
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase,
IabResult result) {
if (result.isSuccess()) {
//Приходящий ответ!!!!!--------------------------------------------------------------------------------------------
//String URL = "http://cybergenesis.ru/egor/add_service?ontime=" + ontimeString + "&offtime=" + offtimeString + "&user_id=" + info_id + "&service=" + Integer.toString(position + 1) + "&balance=" + String.valueOf(balance);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://cybergenesis.ru/egor/")
.addConverterFactory(GsonConverterFactory.create())
.build();
APIService service = retrofit.create(APIService.class);
Call<Post> call = service.addService(ontimeString, offtimeString, info_id, positionStr, Balance);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, retrofit2.Response<Post> response) {
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
}
});
} else {
// handle error
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
}
如果我不在对话框中购买也可以。
如果 IAB 在 apk 的签名发布版本中工作但在调试中不工作,这可能是你的问题:
您应该修改 Security.java 文件以激活调试模式。这允许该方法在未签名的 apk 中工作。这仅供调试,记得在发布前还原它。
public static boolean verifyPurchase(String base64PublicKey,
String signedData, String signature) {
if (TextUtils.isEmpty(signedData) ||
TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
if (BuildConfig.DEBUG) {
return true;
}
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
InApp 只能购买并且只能在生产应用程序中使用,因此您必须获得签名的 apk 并将其上传到游戏控制台上进行 alpha 测试。
这些步骤可以为您提供更多帮助: