Каковы точные шаги по правильной настройке и тестированию покупок в приложении (IAP) в Google Play для приложения FlutteAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Каковы точные шаги по правильной настройке и тестированию покупок в приложении (IAP) в Google Play для приложения Flutte

Сообщение Anonymous »

Я создаю приложение Flutter, которое использует пакет in_app_purchase для реализации встроенных покупок в Google Play.
Я уже:
  • Создал свое приложение в консоли Google Play
  • Загрузил сборку (.aab)
  • Определил три расходных продукта (бронза, серебро, золото)
Но мне не удалось провести успешную проверку платежа. Я протестировал покупку на:
  • на разных эмуляторах с использованием flutter run
  • двух разных физических устройствах Android с использованием flutter run
  • загрузил приложение из Google Play на разных устройствах
И все мои тесты завершились неудачно, даже без сообщения об ошибке или отладочного вывода.
В приложении я добавил отладочные сообщения, указывающие на инициирование Оплата и результат. Появляются первоначальные сообщения журнала, но затем ничего не происходит и ответа не приходит. (Конечно, после добавления тайм-аута к queryProducts он терпит неудачу по истечении тайм-аута; но без тайм-аута он ждет вечность).
При работе на физических устройствах я вижу такие записи в журнале с помощью Logcat:
getSkuDetails() не удалось выполнить queryProductDetailsAsync. Код ответа: 12
Это код, который я запускаю, когда пользователь пытается приобрести продукт:
Future purchaseProduct(
Map plan,
BuildContext context,
) async {
//check availability
print('Checking purchase availability');
final bool available = await InAppPurchase.instance.isAvailable();
if (!available) {
print('Purchase is not available');
eventBus.fire(
PurchaseFailed(
message: 'Failed to connect to store.',
),
);
return 'Failed';
}

//making product ids set
print('making product ids set');
Set productIds = {plan['play_product_id']};
print(productIds);

//checking products
try {
print('Getting product data');
final ProductDetailsResponse response = await InAppPurchase.instance
.queryProductDetails(productIds)
.timeout(const Duration(seconds: 30));

if (response.error != null) {
print(response.error);
eventBus.fire(
PurchaseFailed(
message: response.error.toString(),
),
);
return 'Failed';
} else if (response.notFoundIDs.isNotEmpty) {
print('Product not found');
eventBus.fire(
PurchaseFailed(
message: 'Product not found.',
),
);
return 'Failed';
}

final List products = response.productDetails;
final PurchaseParam purchaseParam = PurchaseParam(
productDetails: products[0],
);
print('Trying to start purchase with:');
print(purchaseParam);
InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);
print('Started');
return 'pending';
} on TimeoutException {
print('Failed to retrieve product data in a timely manner.');
eventBus.fire(
PurchaseFailed(
message: 'Failed to retrieve product data in a timely manner.',
),
);
return 'Failed';
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ses-iap-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»