React-native-iap: Не удается подключиться к iTunes Store для пользователей песочницы

Созданный на 2 окт. 2018  ·  17Комментарии  ·  Источник: dooboolab/react-native-iap

Версия react-native-iap

2.2.2

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

iOS

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

await RNIap.buyProduct(MIXED_PACK); не должно завершиться ошибкой

Фактическое поведение

Я получаю сообщение об ошибке Cannot connect to iTunes Store даже если использую пользователя песочницы

Протестированная среда (Эмулятор? Настоящее устройство?)

Настоящее устройство, iPad и iPhone 7

Шаги по воспроизведению поведения

Просто попробуйте запустить этот фрагмент кода. Я внимательно прочитал блог, чтобы создать среду песочницы здесь https://medium.com/@dooboolab/react -native-in-app-Purchase-121622d26b67

📱 iOS 🙏 help wanted

Самый полезный комментарий

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

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

Думаю, это старая ссылка. 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

  1. Вы можете проверить подтверждающую квитанцию ​​в ios, в которой объясняется, что пароль «_Используется только для квитанций, содержащих автоматически возобновляемые подписки. Общий секрет вашего приложения (шестнадцатеричная строка) ._».
  2. На самом деле я этого не пробовал. Я разработал эту функцию, чтобы другие разработчики могли легко внести свой вклад, которые знают об этом. Однако я думаю, что вы можете получить accessToken через игровую консоль. Вы можете получить это, выполнив следующие действия.
    Выберите свое приложение> Сервисы и API> «ВАШ ЛИЦЕНЗИОННЫЙ КЛЮЧ ДЛЯ ДАННОГО ПРИЛОЖЕНИЯ Открытый ключ RSA в кодировке Base64 для включения в ваш двоичный файл». ссылка .

Также попробуйте 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.

Итак, что вы должны делать в этом случае? Как узнать, действительно ли продукт был куплен пользователем? .. Я попытался восстановить покупки, но ничего не изменилось

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