React-native-iap: RNIap не работает на Android, но работает в iOS с тем же кодом

Созданный на 7 июл. 2020  ·  33Комментарии  ·  Источник: dooboolab/react-native-iap

Версия react-native-iap
4.4.7

Версия react-native
0,60,6

Платформы, на которых вы столкнулись с ошибкой (IOS или Android или оба?)
Android

Ожидаемое поведение

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }

Ожидаемое поведение - это список продуктов, извлеченных из игровой консоли с помощью .getProducts (), напечатанный в терминале.

Фактическое поведение
Обещание не возвращается. Ошибка "Биллинг недоступен"

Протестированная среда (Эмулятор? Настоящее устройство?)
Настоящее устройство (приложение в настоящее время находится в разработке)

Шаги по воспроизведению поведения
const itemSkus = Platform.select({ ios: [ 'com.example.1' ], android: [ 'com.example.1' ] });

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }
    this.purchaseUpdateSubscription = purchaseUpdatedListener(async (purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase) => {
        console.log('purchaseUpdatedListener', purchase);
        const receipt = purchase.transactionReceipt;
        if (receipt) {
            try {
                // if (Platform.OS === 'ios') {
                //   finishTransactionIOS(purchase.transactionId);
                // } else if (Platform.OS === 'android') {
                //   // If consumable (can be purchased again)
                //   consumePurchaseAndroid(purchase.purchaseToken);
                //   // If not consumable
                //   acknowledgePurchaseAndroid(purchase.purchaseToken);
                // }
                const ackResult = await finishTransaction(purchase);
            } catch (ackErr) {
                console.warn('ackErr', ackErr);
            }

            this.setState({ receipt }, () => this.goNext());
        }
    },
    );

    this.purchaseErrorSubscription = purchaseErrorListener(
        (error: PurchaseError) => {
            console.log('purchaseErrorListener', error);
        },
    );
}
componentWillUnmount() {
    if (this.purchaseUpdateSubscription) {
        this.purchaseUpdateSubscription.remove();
        this.purchaseUpdateSubscription = null;
    }
    if (this.purchaseErrorSubscription) {
        this.purchaseErrorSubscription.remove();
        this.purchaseErrorSubscription = null;
    }
}

Кажется, я не могу понять, почему это так. Я использую этот точный код для iOS, и он отлично работает. Я настроил все продукты в игровой консоли, добавил разрешение на выставление счетов в файл манифеста и связал пакет IAP (я использую AndroidX, поэтому пакет автоматически связан). Я вошел в магазин воспроизведения, и у меня есть последняя версия магазина воспроизведения, но initConnection () все еще не работает. Я не знаю, что еще делать. Любая помощь приветствуется! Спасибо за чтение.

🙏 help wanted 🤖 android

Все 33 Комментарий

Помогло бы это ?

Помогло бы это ?

К сожалению, это не помогло :(. Связано ли это с миграцией AndroidX? По какой-то причине initConnection () не работает, и я не знаю, почему.

@damialajogun Вы узнали, что случилось? У меня такая же ошибка, и я не понимаю, откуда она ... initConnection () не определена.

@hyochan У тебя есть идея?

@damialajogun Вы узнали, что случилось? У меня такая же ошибка, и я не понимаю, откуда она ... initConnection () не определена.

Эй, нет, я еще не разобрался :(

Вы добавили <uses-permission android:name="com.android.vending.BILLING" /> в свой файл AndroidManifest.xml?

@hakkikonu Да, у меня есть

В моем журнале ошибок я вижу, что та же ошибка возникает у небольшой части моих пользователей в нескольких странах, таких как США и Новая Зеландия. Хотя это кажется очень противоречивым. Есть идеи, чем это может быть вызвано?

@ joris1995 У меня также есть эта проблема, небольшая часть пользователей не может совершать покупки в приложении, ошибка: «Артикул не найден. Сначала загрузите продукты, вызвав getItems», но артикул присутствует, потому что во всплывающем окне покупки я показать цену объекта, взятого из getProducts, getItems нет даже в API

у вас последняя версия приложения Google Play Store? Эта проблема возникает только на вашем телефоне или у всех пользователей.

также можете попробовать войти в Google Play Store с другой учетной записью Gmail.

Обязательно очистите свои сервисы Google Play и файлы кеша приложений магазина Google Play из настроек / приложений / Google Play на своем устройстве.

Все пользователи / аккаунты / телефоны ...

Для меня это только часть моих пользователей. Кажется, что нет какого-либо постоянного фактора, такого как страна, версия ОС или производитель устройства. В BugSnag отображается ошибка «Биллинг недоступен. Это может быть проблема с вашим устройством или Play Store не работает ». Чем это может быть вызвано?

Вам необходимо отправить бета-версию, прежде чем вы сможете загружать покупки в приложении, и вы можете отлаживать ее только с помощью сборки выпуска.

бета-версия не обязательна. также закрытая альфа в порядке

У меня такая же проблема, я даже отправил бета-версию и был одобрен 4 дня назад

Если я понимаю, о чем вы говорите, это то, что initConnection () работает не в тестовом режиме, а в бета-версии?

@Kamsou Да, хотя в основном "getProducts ()" не работает в отладочной сборке.

Дополнительная информация: https://medium.com/bleeding-edge/testing-in-app-purchases-on-android-a6de74f78878

Что со мной происходит, так это то, что когда я хочу узнать, была ли сделана покупка, я делаю:
RNIap.getPurchaseHistory ()
На iOs все работает нормально.
Но на Android у меня одна ошибка: «Ошибка: E_IAP_NOT_AVAILABLE»
_Я использую свой локальный эмулятор_

`` ` const initilizeIAPConnection = async () => { await initConnection() .then(async (connection) => { consumeAllItemsAndroid(); await getItems(); console.log('IAP result', connection); }) .catch((error) => { console.warn( IAP ERROR $ {error.code}`, error.message);
});
};

const getItems = async () => {
пытаться {
const subscriptions = ждать getSubscriptions (itemSkus);
console.log («Продукты», подписки);
setSubscriptions (подписки);
} catch (err) {
console.warn (код ошибки, сообщение об ошибке);
}
};
useEffect (() => {
initilizeIAPConnection ();
}, []);

`` ` I just removed await for consumerAllItemsAndroid (); `и он начал работать

@rizshivalli Рад слышать, что это работает на вас. К сожалению, у меня все еще не работает, когда я удаляю ожидание для consumeAllItemsAndroid() . Моя проблема в том, что initConnection() не работает. Как вы можете заставить эту часть работать?

@damialajogun Я удалил try catch и добавил .then и .catch

@rizshivalli Пробовал это, но у меня все еще не работает :(. Извините за все вопросы, но можете ли вы действительно увидеть "продукты" снизу, напечатанные в терминале? Я думаю, проблема с моей в том, что он не тянет все мои настроенные продукты в игровой консоли, даже если я настроил их, и они активны.
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

@damialajogun Да, это работает. Я также могу тестировать платежи на Android. Вы выпустили альфа- или бета-версию сборки на Android?

@rizshivalli Не альфа и не бета, но я выпустил его в производство, поэтому он

Привет, @rizshivalli, быстрый вопрос - ваше приложение указано как бесплатное или платное в Google Play? Моя бесплатная, но с покупками в приложении (пользователи могут скачать приложение бесплатно и выбрать покупку не расходных материалов в приложении), но теперь мне интересно, должно ли оно быть указано как платное, чтобы IAP работал?

@damialajogun он указан как бесплатный, потому что пользователям не нужно платить за установку приложения.

Всем доброе утро,
У кого-нибудь из вас есть приложение для Android, которое хорошо работает с оплатой?
Потому что со мной initConnection не работает.

Я делаю, используя последнюю версию. Я не думаю, что initConnection на самом деле что-то делает, он просто запускает соединение, а затем вам нужно получить продукты

Любое решение для этого?
У меня андроид вылетает перед запуском приложения. Но иос работает как положено.
Пожалуйста помоги

Я столкнулся (вероятно) с той же проблемой.

Я добавил в свое приложение еще две подписки, но работает только старая.
Когда я пытаюсь дождаться RNIap.getSubscriptions (), я получаю "Google указывает, что у нас есть проблема с подключением к платежу"

Когда я пытаюсь выполнить RNIap.requestSubscription (subId, true), я получаю «Артикул не найден».

Скусы зарегистрированы в Google Play и идентификаторы верны, дважды это проверено. Протестировано на эмуляторе и реальном устройстве с использованием режимов отладки и выпуска.

Любая идея?

Привет, похоже, в последнее время не было никакой активности по этой проблеме. Проблема устранена или все еще требует внимания сообщества? Эта проблема может быть закрыта, если больше не будет никаких действий. Вы также можете пометить этот вопрос как «Для обсуждения» или «Хороший первый выпуск», и я оставлю его открытым. Спасибо за ваш вклад.

Привет, похоже, в последнее время не было никакой активности по этой проблеме. Проблема устранена или все еще требует внимания сообщества? Эта проблема может быть закрыта, если больше не будет никаких действий. Вы также можете пометить этот вопрос как «Для обсуждения» или «Хороший первый выпуск», и я оставлю его открытым. Спасибо за ваш вклад.

все еще требует внимания

Мы можем закрыть!

Le sam. 19 дек. 2020 в 11:03, damialajogun [email protected] а
écrit:

Привет, похоже, по этой проблеме не было никаких действий
в последнее время. Была ли проблема устранена или все еще требуется
внимание сообщества? Эта проблема может быть закрыта, если больше не будет никаких действий.
происходит. Вы также можете пометить эту проблему как «Для обсуждения» или «Сначала хорошо.
выпуск "и оставлю его открытым. Спасибо за ваш вклад.

все еще требует внимания

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922 ,
или отказаться от подписки
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ
.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги