Поэтому я решил реализовать in-app-purchases
с помощью expo-in-app-purchases
, и все отлично заработало.
Теперь я выполнил свою часть работы и хочу, чтобы она работала в производственном режиме.
Когда я пытаюсь купить что-то в своем приложении, оно говорит test Card
. Как мне выйти из этого?
Я выпустил свое приложение на консоли Google Play, и оно находится на рассмотрении. Должен ли я просто подождать, пока часть обзора не будет завершена, а затем автоматически появится тестовый режим?
Вот класс оплаты, который у меня сейчас есть.
import * as InAppPurchases from 'expo-in-app-purchases';
export default class payment {
private static finishTransactionCallback?: (purchase: any) => Promise<void>;
constructor() {
}
public static connectAsync = async () => {
await InAppPurchases.connectAsync();
InAppPurchases.setPurchaseListener(async ({ responseCode, results, errorCode }) => {
// Purchase was successful
if (responseCode === InAppPurchases.IAPResponseCode.OK) {
results.forEach(purchase => {
if (!purchase.acknowledged) {
console.log(`Successfully purchased ${purchase.productId}`);
// Process transaction here and unlock content...
// Then when you're done
payment.finishTransactionAsync(undefined, purchase);
}
});
} else
if (responseCode === InAppPurchases.IAPResponseCode.USER_CANCELED) {
console.log('User canceled the transaction');
} else if (responseCode === InAppPurchases.IAPResponseCode.DEFERRED) {
console.log('User does not have permissions to buy but requested parental approval (iOS only)');
} else {
console.warn(`Something went wrong with the purchase. Received errorCode ${errorCode}`);
}
});
}
public static async disconnectAsync() {
await InAppPurchases.disconnectAsync();
}
public static getPurchaseHistoryAsync = async () => {
var item = await InAppPurchases.getPurchaseHistoryAsync();
if (item && item.results && item.results.length > 0)
return item.results;
else return [] as (InAppPurchases.InAppPurchase | InAppPurchases.IAPItemDetails)[];
}
public static getProducts = async (itemList: string[]) => {
var item = await InAppPurchases.getProductsAsync(itemList);
if (item && item.results && item.results.length > 0)
return item.results;
else return [] as (InAppPurchases.InAppPurchase | InAppPurchases.IAPItemDetails)[];
}
public static finishTransactionAsync = async (callBack?: (purchase: any) => Promise<void>, purchase?: any) => {
try {
if (callBack)
payment.finishTransactionCallback = callBack;
else {
await InAppPurchases.finishTransactionAsync(purchase, false);
purchase.acknowledged = true;
if (payment.finishTransactionCallback)
await payment.finishTransactionCallback(purchase);
}
} catch (error) {
console.log(error);
}
}
public static async requestPayment(productId: string) {
try {
await InAppPurchases.purchaseItemAsync(productId);
return true;
}
catch (error) {
console.log("Something went wrong. with purchase:" + productId);
console.log(error);
}
return false;
}
}
Обновлять
Сейчас приложение запущено в производство и все еще находится в тестовом режиме.
Мое приложение называется NovelManager.