React-native-iap: Добавлена ​​поддержка IAP Amazon Appstore.

Созданный на 26 февр. 2020  ·  35Комментарии  ·  Источник: dooboolab/react-native-iap

Думаю, было бы неплохо иметь поддержку IAP API Amazon Appstore .

🎯 feature 📢 announcement 🚶🏻 stale

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

Я видел, что в прошлом была работа по его поддержке, но она, похоже, устарела и не может использоваться с текущей библиотекой react-native-iap:
https://github.com/dooboolab/react-native-iap/issues/370
Поэтому я запустил свой собственный форк на https://github.com/nochkin/react-native-iap/tree/amazon-iap.

Кажется, он работает в моей собственной среде разработки. Но прежде чем я создам для него PR, было бы неплохо, чтобы некоторые настоящие альфа/бета-тестеры рассмотрели определенные крайние случаи и отполировали их должным образом, поскольку вполне возможно, что я не использую все функции в своем собственном приложении.

Я старался оставаться в рамках исходного API-интерфейса react-native-iap, насколько это возможно. Есть несколько методов, которые я еще не использую (я могу добавить их, если у кого-то есть способ правильно протестировать).

Одно из решающих дизайнерских решений в моей вилке — как отличить Google от Amazon. Я думаю, что определение модели/марки устройства не является хорошим подходом, потому что пользователь может установить Google Play на Kindle и получить приложение через Google (и наоборот, если вы можете установить Amazon Appstore на устройство на базе Play). В этом случае мы должны выполнить IAP через соответствующий API.
Мои вилки проверяют источник установки и действуют соответственно. В среде разработки источник установки не существует, поэтому вы можете установить запасной вариант, чтобы иметь возможность правильно его протестировать.
Я задокументирую это, если есть интерес к тому, чтобы мой форк был объединен с репозиторием основной ветки разработки.

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

Я видел, что в прошлом была работа по его поддержке, но она, похоже, устарела и не может использоваться с текущей библиотекой react-native-iap:
https://github.com/dooboolab/react-native-iap/issues/370
Поэтому я запустил свой собственный форк на https://github.com/nochkin/react-native-iap/tree/amazon-iap.

Кажется, он работает в моей собственной среде разработки. Но прежде чем я создам для него PR, было бы неплохо, чтобы некоторые настоящие альфа/бета-тестеры рассмотрели определенные крайние случаи и отполировали их должным образом, поскольку вполне возможно, что я не использую все функции в своем собственном приложении.

Я старался оставаться в рамках исходного API-интерфейса react-native-iap, насколько это возможно. Есть несколько методов, которые я еще не использую (я могу добавить их, если у кого-то есть способ правильно протестировать).

Одно из решающих дизайнерских решений в моей вилке — как отличить Google от Amazon. Я думаю, что определение модели/марки устройства не является хорошим подходом, потому что пользователь может установить Google Play на Kindle и получить приложение через Google (и наоборот, если вы можете установить Amazon Appstore на устройство на базе Play). В этом случае мы должны выполнить IAP через соответствующий API.
Мои вилки проверяют источник установки и действуют соответственно. В среде разработки источник установки не существует, поэтому вы можете установить запасной вариант, чтобы иметь возможность правильно его протестировать.
Я задокументирую это, если есть интерес к тому, чтобы мой форк был объединен с репозиторием основной ветки разработки.

@nochkin Звучит очень мило. Я хотел бы знать шаг, чтобы проверить это. У меня нет устройства amazon . Могу ли я еще протестировать его? Надеюсь, вы сможете привести какой-нибудь документ для тех, кто заинтересован в продолжении этой интеграции.

Я использую настоящее устройство Amazon для тестирования. Я думаю, если вы установите Amazon Appstore на устройство, отличное от Amazon, это должно сработать.
Я создам некоторую документацию позже сегодня, чтобы начать. Я рад, что есть интерес к этому.

Вот руководство о том, как добавить поддержку Amazon IAP в существующее приложение:
https://github.com/nochkin/react-native-iap/blob/amazon-iap/README_AMAZON.md
Дайте мне знать, если что-то нуждается в дополнительных разъяснениях.

К вашему сведению,
Прошлой ночью я внес еще несколько изменений в свой форк, а также выпустил свое приложение в производство, используя его.
Пока выглядит хорошо.
Мне было бы интересно получить отзывы от других в случае, если есть необходимость в каких-либо дополнительных функциях или вариантах использования, которые не описаны в моем собственном приложении.

@hyochan Есть ли планы добавить это в релиз?

@curiousdustin ,
Вы можете использовать мою вилку для тестирования и обратной связи:
https://github.com/nochkin/react-native-iap/tree/amazon-iap
Я уверен, что ваши варианты использования отличаются от моих, поэтому вы можете оставить дополнительный отзыв, чтобы внести в него больше изменений.

@nochkin включает ли ваша вилка поддержку IAP с подпиской на Amazon?

@curiousdustin ,
Хоть и прошло много времени с момента реализации, но я так считаю. Я просто не тестировал его с подписками.
Вам все равно нужно будет реализовать проверку на стороне сервера, так как я никогда ничего не проверяю на клиенте.

Amazon не приносит такого большого трафика, поэтому мои тесты в реальной жизни довольно медленные. Если бы вы могли внести свой вклад в этом аспекте, это было бы хорошо.

Хорошо, я, вероятно, буду тестировать это. В настоящее время я использую свой собственный форк в производстве, но это было до серьезных изменений, связанных с жизненным циклом. Я бы очень хотел воспользоваться всеми замечательными обновлениями с тех пор.

Хороший. Я все еще нахожусь в процессе реализации подписок для своего собственного приложения (внутренняя логика, связанная с приложением, а не rn-iap), так что дайте мне знать, если что.

API подписки Amazon немного странный при запросе. Например, у меня есть месячная и годовая подписка на один и тот же сервис, но Amazon сообщает о них одинаково. Единственная разница в цене, поэтому я подумал, что выясню, какой из них какой, основываясь только на цене.

У вас много подписанных и новых подписчиков?

Да, приложение, для которого я это использую, имеет сотни новых подписок каждый месяц. Кроме того, любое обновление, использующее это, будет тщательно проверяться перед выпуском.

У нас также есть ежемесячные и ежегодные варианты. Как вы описали, они оба находятся под одним идентификатором Amazon. В нашем случае мы подтверждаем подписку через Amazon API, который дает нам информацию о периоде.

Это звучит здорово. Я рад, что мой форк пройдет надлежащее тестирование в другом сценарии.

Мне нужно показать период подписки в пользовательском интерфейсе для выбора пользователем.
Странно, что в консоли разработчика Amazon есть необходимые поля, но API не имеет к ним доступа.

Возможно, это изменилось, но мы обнаружили, что даже если вы предоставите 2 варианта для использования, как только они инициируют процесс покупки, Amazon отобразит параметры периода с предварительно выбранным первым. Итак, нам пришлось реализовать новый пользовательский интерфейс для Amazon, в котором пользователь фактически не выбирает период, пока он не окажется в пользовательском интерфейсе потока покупок Amazon.

Интересная идея на самом деле. Мой пользовательский интерфейс не подходит для этой модели, но я могу рассмотреть этот вариант, если решу его изменить. Я все еще могу использовать его в любом случае. Спасибо.

@curiousdustin @nochkin
Привет, как я понял, ты много сделал для этого выпуска, вау! Я тоже в процессе реализации подписки. Как узнать, что подписка обновлена? И нужно ли обновлять его на сервере? Как это работает с RVS, я имею в виду, что в квитанции amazon нет конечной даты подписки, поэтому как обновить конкретную подписку для пользователя на сервере. Было бы приятно услышать от вас, если вы что-то знаете обо всем этом)

На самом деле я еще не начал внедрять эту вилку в свой проект. Вероятно, будет делать это в следующем месяце.

Извините, у меня мало информации о том, как работает Amazon на стороне сервера. Другой человек в моей команде занимался серверной частью. Я знаю, что в настоящее время мы просто передаем идентификатор продукта и идентификатор квитанции на наш сервер, и он обрабатывает все остальное, включая проверку и обновление действительности подписки по мере необходимости.

@kostiantyn-solianik
Мое собственное приложение в настоящее время реализовано только в Google Play и App Store, я еще не использовал Amazon RVS для подписки.
Я регулярно проверяю покупки в приложении для Amazon, и это было достаточно легко реализовать, поэтому я предполагаю, что подписки должны быть чем-то похожи.

да в тестовом режиме с ним все ок, да и с форком собственно тоже, работает как надо(в тех случаях которые я проверял).

Мы застряли на проблеме с обновлением подписки, потому что в квитанции Amazon нет endDate подписки, и это действительно странно.

Я посмотрю, смогу ли я изменить приоритеты своих задач, чтобы я мог поиграть с проверками Amazon на их подписках.
Я предполагаю, что у вас тоже есть проблема с их тестовым сервером, верно?

@nochkin Кстати, я заметил, что методы getAvailablePurchases и getPurchaseHistory возвращают ошибки. Я думаю, что эти 2 еще не реализованы для Amazon IAP в вашей вилке?

Ты прав. Моя собственная модель приложения не использует их.
Я взгляну. Спасибо.

Как и в случае с @kostiantyn-solianyk, я обнаружил, что для Amazon необходимо реализовать следующие методы:

RNIapAmazonModule.endConnection() вызвал RNIap.endConnection()

Я думаю, что это просто нужно решить обещание. Также требуется внести изменения в index.ts , иначе он никогда не будет использоваться.

RNIapAmazonModule.refreshItems() вызвал RNIap.consumeAllItemsAndroid()

Мое приложение не использует consumeAllItemsAndroid , поэтому я не изучал, что нужно сделать.

RNIapAmazonModule.getPurchaseHistoryByType() уравнял RNIap.getPurchaseHistory()

Мое приложение не использует getPurchaseHistory , поэтому я не изучал, что нужно сделать.

RNIapAmazonModule.getAvailableItemsByType() коллировал RNIap.getAvailablePurchases()

Это необходимо для обеспечения потока _Restore Purchases_ в вашем приложении. У меня это работает, но то, что я знаю, кажется немного хакерским. Я опубликую решение здесь, если я его немного почищу.

Помимо этого, тестирование пока идет хорошо. Спасибо за это @nochkin !

@nochkin , не могли бы вы описать, как вы устанавливаете эту вилку в своем проекте приложения?

Когда я делаю что-то вроде этого:

"react-native-iap": "github:nochkin/react-native-iap.git#amazon-iap"

Модуль не разрешается, потому что он ожидает, что js, созданный из машинописного текста, будет там, но встроенная версия проекта не существует на github. Он создается только для пакета выпуска модуля. На самом деле при установке с помощью npm и строки выше он даже не загружает index.ts, я думаю, из-за файла .npmignore.

Имеет ли это смысл?

Большое спасибо за краткий обзор отсутствующих реализаций методов. Я не реализовал «endConnection», потому что он не нужен, но я согласен, что метод должен быть в целях совместимости.
Я рассмотрю другие. Извините, это заняло некоторое время, но сейчас все проясняется, и я ожидаю, что скоро это проверю / реализую.

Я установил локально, что-то вроде этого:
"react-native-iap": "../react-native-iap"
Хотя каталог «react-native-iap» просто является клоном моего репозитория.

Не беспокойся!

Хорошо, да, я подумал, что локальная ссылка на файл будет работать, но не делает проект очень переносимым.

Обходной путь, который я использую прямо сейчас для ссылки на мою собственную ветку/ветвь, заключается в определении зависимости следующим образом:

"react-native-iap": "github:curiousdustin/react-native-iap.git#curious-amazon-iap-ts"

И в моей ветке я изменил свойство main в react-native-iap package.json на index.ts вместо .js . Я также удалил записи, связанные с TypeScript, в .npmignore .

На данный момент это работает, я думаю, потому что моя установка RN автоматически создает модули на основе TS...

Еще одна важная часть, которая, по-видимому, отсутствует, — это обработка ошибок.

Реализация Amazon никогда не запускает какой-либо код для генерации событий ошибок, например, из версии Google:

sendEvent(reactContext, "purchase-error", error);

Это означает, что purchaseErrorListener никогда не будет вызываться.

Отмеченный. Хорошая точка зрения. Спасибо.

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

Удар!

Было бы здорово иметь поддержку Amazon в этом плагине. Я использовал реализацию amazon, сделанную @nochkin для автопродления подписки, и вещь довольно надежная. Было бы здорово интегрировать этот форк в репозиторий и иметь большую базу участников, поддерживающих реализацию!

Будут ли какие-нибудь новости по этому поводу позже или идея будет отброшена?

Я не думаю, что это будет брошено. Я считаю, что основной точкой торможения является несколько недостающих функций (незначительные для моих вариантов использования, но, возможно, важные для кого-то еще). Мое собственное приложение тоже доволен текущим состоянием.
Эти оставшиеся кусочки головоломки все еще находятся в поле моего зрения, и я начал работать над ними. К сожалению, завершение/тестирование занимает больше времени, чем ожидалось, из-за других приоритетов.

Да, я понимаю ситуацию, тогда я буду следить за этим!

Спасибо за ответ, и я надеюсь, что у вас будет немного дополнительного времени для этого 🤣

Я отправил PR (#1134) на основе вашей замечательной работы @nochkin @curiousdustin ! 👏
Проведены тесты, отлично работает на нашей стороне! Мы добавим поддержку Amazon на react-native-iaphub, когда PR будет объединен.
Это функционально, но, как сказал @nochkin , в будущем мы можем внести некоторые улучшения.

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

Решено и теперь является частью выпуска 5.0.0:
https://github.com/dooboolab/react-native-iap/releases/tag/5.0.0

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