2.2.2
iOS
await RNIap.buyProduct(MIXED_PACK);
не должно завершиться ошибкой
Я получаю сообщение об ошибке Cannot connect to iTunes Store
даже если использую пользователя песочницы
Настоящее устройство, iPad и iPhone 7
Просто попробуйте запустить этот фрагмент кода. Я внимательно прочитал блог, чтобы создать среду песочницы здесь https://medium.com/@dooboolab/react -native-in-app-Purchase-121622d26b67
Думаю, это старая ссылка. https://developer.apple.com/system-status/
@ raynor85 Вы все еще сталкиваетесь с этой проблемой?
@dooboolab Я все еще сталкиваюсь с проблемой, но я думаю, что это проблема Apple. Я попытался приобрести продукт с помощью своего личного пользователя Apple ID (который ранее использовался для реальных покупок), и мне удалось получить успешный ответ после выполнения RNIap.buyProduct(“my.sku.product”)
.
Забавно то, что в модальном окне, которое появляется непосредственно перед покупкой, написано environment: sandbox
, вероятно, потому, что я выполнял сборку разработчика, и, что наиболее важно, я думаю, что с меня вообще не взимали плату за покупку. Проверка истории покупок ничего с этим не связана, и если я выполню RNIap.getAvailablePurchases()
и RNIap.getPurchaseHistory()
я получу пустые ответы от обоих. Почему это?
@dooboolab, можешь мне с этим помочь? Есть ли причина, по которой с настоящим идентификатором яблока я смог успешно приобрести расходные материалы без взимания платы, но RNIap.getPurchaseHistory()
всегда является пустым массивом?
@ raynor85 Вы подключили результат транзакции к своему серверу?
@dooboolab Я пробовал использовать как RNIap.buyProduct(sku)
и RNIap.buyProductWithoutFinishTransaction(sku)
с RNIap.finishTransaction()
, и для обоих я использовал RNIap.validateReceiptIos(receiptBody, true);
с const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'};
, но неудачно. Также стоит отметить, что какой бы пароль я ни ввел в '[apple-id-password]', ответ validateReceiptIos
всегда один и тот же.
Это пример:
{ receipt:
{ receipt_type: 'ProductionSandbox',
adam_id: 0,
app_item_id: 0,
bundle_id: 'io.fantastec.swap',
application_version: '8',
download_id: 0,
version_external_identifier: 0,
receipt_creation_date: '2018-10-09 19:16:09 Etc/GMT',
receipt_creation_date_ms: '1539112569000',
receipt_creation_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
request_date: '2018-10-09 19:16:10 Etc/GMT',
request_date_ms: '1539112570436',
request_date_pst: '2018-10-09 12:16:10 America/Los_Angeles',
original_purchase_date: '2013-08-01 07:00:00 Etc/GMT',
original_purchase_date_ms: '1375340400000',
original_purchase_date_pst: '2013-08-01 00:00:00 America/Los_Angeles',
original_application_version: '1.0',
in_app:
[ { quantity: '1',
product_id: 'basic_pack',
transaction_id: '1000000455003078',
original_transaction_id: '1000000455003078',
purchase_date: '2018-10-09 19:16:09 Etc/GMT',
purchase_date_ms: '1539112569000',
purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
original_purchase_date: '2018-10-09 19:16:09 Etc/GMT',
original_purchase_date_ms: '1539112569000',
original_purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
is_trial_period: 'false' } ] },
status: 0,
environment: 'Sandbox' }
Как вы могли заметить, receipt_type: 'ProductionSandbox'
, что должно быть вызвано тем фактом, что я использую настоящее имя пользователя Apple ID в среде песочницы (я не могу создать пользователя рабочей тестовой песочницы, спасибо Apple за создание наша жизнь сущий ад).
@ raynor85 На самом деле, я не знаю, почему это происходит. Возможно, мне придется попробовать это в ближайшем будущем. Кроме того, вы пытались проверить это в тестовом полете? Если вы не загрузили приложение в test flight
думаю, это может случиться. Кроме того, я согласен с вашей последней цитатой!
Я не пробовал загружать приложение на testFlight, потому что хотел бы иметь версию для разработчиков, с которой можно было бы работать, прежде чем загружать неработающую бета-версию. Возможно, в этом случае может пригодиться codepush. В любом случае, не могли бы вы объяснить значение const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}
? Я пытался ввести любой пароль, но результат тот же. Представляет ли password
пароль пользователя Apple ID? Если это так, как я могу получить эту информацию, не прося пользователя вставить ее?
А как насчет accessToken
необходимого для validateReceiptAndroid
? Я проверил замечательный пост о переполнении стека, о котором вы упомянули, но нет четкого руководства о том, как я могу получить accessToken, вы рекомендуете мертвый простой способ получить этот access_token без необходимости создавать сервер? В документе говорится, что можно выполнить проверку получения на устройстве напрямую: https://developer.android.com/google/play/billing/billing_library_overview
@ raynor85
accessToken
через игровую консоль. Вы можете получить это, выполнив следующие действия.Также попробуйте 2.3.5
в качестве подтверждения получения в Android. Параметр отправлял неправильную идентификацию в transactionReceipt
для Android. Я надеюсь, что вы сможете попрактиковаться в этом и поделитесь своей историей успеха в нашем readme. Ура!
@ raynor85 Я также не могу получить ответ от PurchaseHistory () или getAvailablePurchases (). Мне интересно, не будут ли эти функции работать, пока приложение не будет запущено в производство. @JJMoon Должны ли эти функции работать в режиме песочницы?
Я понял, что я не называл «finishTransaction ()», поэтому я застрял в цикле в моей тестовой учетной записи песочницы «Покупка прошла успешно», но не полностью обработала со стороны Apple, они назвали это мертвой петлей.
Этот поток немного сбился с пути, но я вижу ту же исходную ошибку при запуске приложения через xcode на моем устройстве с учетной записью песочницы ( Error: Cannot connect to iTunes Store
). Я нахожусь на 2.3.19, которая, как мне кажется, самая последняя.
Примечание от Apple по поводу этой ошибки: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE
Я думаю, что в моем случае я получаю эту ошибку при попытке подписаться на продукт, когда я уже подписан на него. Он также появляется, когда я подписываюсь и пытаюсь изменить свою подписку (инициируя новый запрос RNIAP.buySubscription
.
Для всех, кто столкнется с проблемой, также обратите внимание: «Ваше приложение работает в Симуляторе, который не поддерживает покупки в приложении». это еще одна причина, по которой вы можете получить эту ошибку. Это необходимо сделать на реальном устройстве.
Я думаю, что в моем случае я получаю эту ошибку при попытке подписаться на продукт, когда я уже подписан на него. Он также появляется, когда я подписываюсь и пытаюсь изменить свою подписку (путем создания нового запроса RNIAP.buySubscription.
Итак, что вы должны делать в этом случае? Как узнать, действительно ли продукт был куплен пользователем? .. Я попытался восстановить покупки, но ничего не изменилось
Самый полезный комментарий
Для всех, кто столкнется с проблемой, также обратите внимание: «Ваше приложение работает в Симуляторе, который не поддерживает покупки в приложении». это еще одна причина, по которой вы можете получить эту ошибку. Это необходимо сделать на реальном устройстве.