2.2.2
(поскольку любая более новая версия не работает на iOS из-за # 279)
iOS
Ошибки не должно быть. Покупка прошла успешно (вживую и в производстве)
E_UNKNOWN
ошибка возвращается из Promise
Наш сервис отслеживания ошибок Sentry.io сообщает следующее:
{"framesToPop":1,"code":"E_UNKNOWN","nativeStackIOS":["0 LuCoaching 0x000000010062f6fc LuCoaching + 1996540","1 LuCoaching 0x000000010060aa98 LuCoaching + 1845912","2 LuCoaching 0x00000001007cad98 __cxa_throw + 438380","3 LuCoaching 0x00000001007cc62c __cxa_throw + 444672","4 libdispatch.dylib 0x000000019d078484 <redacted> + 16","5 libdispatch.dylib 0x000000019d025610 <redacted> + 56","6 LuCoaching 0x00000001007cc46c __cxa_throw + 444224","7 libdispatch.dylib 0x000000019d0776c8 <redacted> + 24","8 libdispatch.dylib 0x000000019d078484 <redacted> + 16","9 libdispatch.dylib 0x000000019d0249ec <redacted> + 1068","10 CoreFoundation 0x000000019d5ce1bc <redacted> + 12","11 CoreFoundation 0x000000019d5c9084 <redacted> + 1964","12 CoreFoundation 0x000000019d5c85b8 CFRunLoopRunSpecific + 436","13 GraphicsServices 0x000000019f83c584 GSEventRunModal + 100","14 UIKitCore 0x00000001ca444bc8 UIApplicationMain + 212","15 LuCoaching 0x000000010044d110 LuCoaching + 20752","16 libdyld.dylib 0x000000019d088b94 <redacted> + 4"],"userInfo":{"NSLocalizedDescription":"Verbindung mit iTunes Store nicht möglich"},"domain":"SKErrorDomain","line":26,"column":1877,"sourceURL":"/var/containers/Bundle/Application/818C8439-E250-42E8-AD57-EC4FB5FE5547/LuCoaching.app/main.jsbundle"}
Настоящее устройство. Живые клиенты. Не получается очень согласованность
При тестировании процедуры с пользователями Sandbox ошибка не может быть воспроизведена.
@ Gaia-Nutrition Не могли бы вы проверить этот старый выпуск? Это могло быть по той же причине.
https://github.com/dooboolab/react-native-iap/issues/201
@JJMoon в # 201 ошибка была E_DEVELOPER_ERROR
и была вызвана невыполнением списка validProducts
с помощью getSubscriptions()
.
Однако я вызываю эту функцию перед попыткой выполнить проверку и получаю другую ошибку.
Но теперь, когда я думаю об этом. Может случиться так, что между вызовом getSubscriptions()
и buySubscription()
есть довольно большая задержка, вызванная тем, что пользователь пересмотрел свое решение о том, хочет ли он / она совершить покупку. Может ли это быть проблемой? Тем временем приложение могло быть отключено.
РЕДАКТИРОВАТЬ: Но опять же покупка выполняется успешно, поэтому проблема должна быть в том, где обрабатывается ответ магазина приложений.
Здравствуйте,
Такое же поведение проблемы с "buyProductWithoutFinishTransaction" или "buyProduct".
Версия 2.2.1
сохраненный возврат
{
"framesToPop": 1,
"code": "E_UNKNOWN",
"nativeStackIOS": [...],
"userInfo": {
"NSLocalizedDescription": "Connexion à l’iTunes Store impossible"
},
"domain": "SKErrorDomain",
"line": 16,
"column": 1599,
"sourceURL": "..."
}
Мы обновили модуль, потому что мы воспроизводим эту ошибку при производстве с предыдущими версиями.
Интересно то, что покупка восстановления также не выполняется для моих пользователей, когда это происходит. Это случается только с 1% наших пользователей iOS.
@fierysolid. То же самое, около 5% покупок на iOS
Всем привет. Я надеюсь, что это будет исправлено в нашей новой версии сегодня, которая составляет 2.3.15
. Я заметил, что использование NSDictionary
в iOS небезопасно и может вызвать неожиданное поведение. Я исправил это и надеюсь, что теперь он работает нормально на всех устройствах. Пожалуйста, проверьте это.
Пожалуйста, откройте снова, если проблема не исчезнет.
@dooboolab
У меня все еще возникает эта проблема при использовании buySubscription()
с пользователем тестера песочницы с iPhone 6S.
{"userInfo":{"NSLocalizedDescription":"Cannot connect to iTunes Store"}}
@danrevah Итак, вы попробовали нашу новую версию - 2.3.15
? @JJMoon Не могли бы вы проверить это еще раз?
@dooboolab да, я использую эту версию.
@danrevah Пожалуйста, попробуйте 2.3.16
.
@dooboolab однажды это сработало, но пока я пытался снова, я продолжал получать эти ошибки. (используется v 2.3.17)
@JJMoon У вас есть какие-нибудь подсказки по этому
Я повторно открыл проблему. cc @JJMoon
Если за этот вопрос проголосует больше людей, мы постараемся еще больше разобраться в этом вопросе.
@danrevah Надеюсь, вы
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267 -CH7-SW6
Чтобы протестировать подписку в режиме песочницы, вам необходимо через некоторое время повторно приобрести подписку.
И вам может потребоваться отменить его, чтобы купить снова.
И сервер песочницы Apple выдает странные реакции, что усложняет тест.
Если проблема в случае @danrevah
@JJMoon Я столкнулся с той же проблемой. любое решение? buySubscription вызывает исключение, но оплата удерживается. Мне нужны данные результатов для их хранения и проверки.
@hyochans
+1 у меня такая же проблема
Попробуйте также использовать addAdditionalSuccessPurchaseListenerIOS в buySubscription
. Это та же проблема, что и в №307.
Попробуйте также использовать addAdditionalSuccessPurchaseListenerIOS в
buySubscription
. Это та же проблема, что и в №307.
Кто-то уже использует в производстве?
@hyochan , я пытался, но безуспешно.
if (subscription && subscription.success) {
this.props.subscribe(subscription.result);
} else {
if (Platform.OS === 'ios') {
const sub = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
this.props.subscribe(purchase); // -> This code is never fired
sub.remove();
});
}
}
@cbfranca Пожалуйста, следуйте актуальному коду. Вы даже не используете promises
. Вы должны послушать addAdditionalSuccessPurchaseListenerIOS
после отклонения обещания.
Также вам не нужны лишние Platform.OS === 'ios'
.
@hyochan
Извините за мое незнание, но не думаю, что я правильно понял. Я следовал тем же основам примера, что соответствовало моему сценарию. Я создал абстракцию, которая обрабатывает это обещание с помощью async / await. Этот объект подписки возвращается моей абстракцией.
static purchaseSubscription(newSubscriptionID, currentSubscriptionID) {
if (Platform.OS === 'ios') {
const purchaseResult = KinvoBilling.purchaseSubscriptionIOS(newSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.purchaseSubscriptionANDROID(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionANDROID = async (newSubscriptionID, currentSubscriptionID) => {
const hasCurrentSubscription = currentSubscriptionID !== null;
if (hasCurrentSubscription) {
const purchaseResult = KinvoBilling.updateSubscription(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.buySubscription(newSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionIOS = async (subscriptionID) => {
await KinvoBilling.getSubscriptions();
const purchaseResult = await KinvoBilling.buySubscription(subscriptionID);
return purchaseResult;
}
@cbfranca
``
статическая покупкаSubscriptionIOS = async (subscriptionID) => {
ждать KinvoBilling.getSubscriptions ();
пытаться {
const PurchaseResult = ждать KinvoBilling.buySubscription (subscriptionID);
} catch (err) {
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS (async (покупка) => {
// dooboolab => здесь проверяем вызов.
this.setState ({квитанция: Purchase.transactionReceipt}, () => this.goToNext ());
subscription.remove ();
}
}
вернуть PurchaseResult;
}
`` ''
Проверьте код выше. Я думаю, вам нужно реорганизовать свой код, чтобы он соответствовал его жизненному циклу.
@hyochan У меня не работает.
Мой тестовый сценарий:
Еще одно сомнение: нужно ли мне также использовать finishTransaction () в подписках?
Я тоже вижу эту ошибку. И я думаю, что знаю один способ воспроизвести это.
^ 2.4.1
https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz
iOS при тестировании в TestFlight на реальном устройстве.
Я заметил, что когда в моем приложении вызывались какие-либо функции RNIap, iOS просила меня ввести пароль для предыдущего пользователя iTunes / App Store (с тех пор я вышел из системы и заменил его в настройках iOS). Я где-то читал в Интернете, что это проблема, которая время от времени преследует пользователей iPhone: иногда приложение покупается с одной учетной записью iTunes, затем телефон переключается на новую учетную запись iTunes, но приложение продолжает запрашивать пароль для старая учетная запись iTunes.
Я попытался удалить свое приложение (и TestFlight) и переустановить с новым пользователем App Store, но безуспешно. Единственный способ избавиться от этого поведения - стереть данные с устройства. Как только я это сделал, я больше не мог воспроизводить эту ошибку.
{
code: E_UNKNOWN,
column: 1565,
domain: NSURLErrorDomain,
framesToPop: 1,
line: 20,
nativeStackIOS: [...],
sourceURL: ...,
userInfo: {
_kCFStreamErrorCodeKey: -4,
_kCFStreamErrorDomainKey: 4,
NSErrorFailingURLKey: None,
NSErrorFailingURLStringKey: https://p100-sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppBuy,
NSLocalizedDescription: Cannot connect to iTunes Store,
NSUnderlyingError: {
code: "-1005",
domain: "kCFErrorDomainCFNetwork",
message: "underlying error",
nativeStackIOS: [...],
userInfo:{"NSErrorPeerAddressKey":null,"_kCFStreamErrorCodeKey":-4,"_kCFStreamErrorDomainKey":4}
}
}
}
Надеюсь, это кому-то поможет!
@hyochan
После многих попыток я все еще сталкиваюсь с той же проблемой и даже больше. В приведенном ниже коде RNIap.buySubscription (sku) возвращает значение undefined. Пожалуйста, кто-нибудь решил?
``
статическая покупкаSubscriptionIOS = async (subscriptionID) => {
ждать KinvoBilling.getSubscriptions ();
try {
const purchaseResult = await RNIap.buySubscription(subscriptionID);
return createResponse(true, purchaseResult);
} catch (error) {
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
// dooboolab => check the call here.
console.tron.log('--- ERROR ----');
console.tron.log(error);
console.tron.log('--- PURCHASE ----');
console.tron.log(purchase);
const result = purchase;
subscription.remove();
console.tron.log(result);
if (result) {
return createResponse(true, result);
}
return createResponse(false, result);
});
}
};
``
: +1: У нас эта проблема была хорошо. Похоже, что сейчас это происходит примерно с 10% наших пользователей. Мы собираемся попробовать добавить этого слушателя, но я не думаю, что в конечном итоге это отличное решение. @hyochan Есть ли способ получить более подробную информацию в тех случаях, когда это вызывает ошибку, или это стандартный ответ от API StoreKit? В каждом случае ошибки появляется сообщение «Не удается подключиться к iTunes Store», даже если покупка прошла успешно.
У нас очень похожая проблема с 3.4.6: первая попытка покупки не удалась с E_UNKOWN
, повторная попытка завершилась успешно. Однако для нас это происходит с buyProduct
, а не с buySubscription
. @hyochan, может быть, это та же
Здравствуйте! У меня такая же проблема после вызова RNIap.requestSubscription (). Я получаю неопределенный результат, но платеж прошел успешно, с кредитной карты снята оплата.
Единственный способ этого пользователя обойтись без покупки - это восстановить покупку.
У кого-нибудь есть исправление для этого? Я использую версию 3.5.9
Самый полезный комментарий
: +1: У нас эта проблема была хорошо. Похоже, что сейчас это происходит примерно с 10% наших пользователей. Мы собираемся попробовать добавить этого слушателя, но я не думаю, что в конечном итоге это отличное решение. @hyochan Есть ли способ получить более подробную информацию в тех случаях, когда это вызывает ошибку, или это стандартный ответ от API StoreKit? В каждом случае ошибки появляется сообщение «Не удается подключиться к iTunes Store», даже если покупка прошла успешно.