Что мы понимаем под проблемами с покупками в приложениях?

Проблемы с покупками – это когда пользователь не получает приобретенный товар из-за ошибки (например, ошибки соединения) при синхронизации данных между приложением и сервером для покупок в приложении.

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

К чему обычно приводят сбои при покупках?

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

Интеграция сервиса HUAWEI IAP решит проблемы с покупками в ваших приложениях

Использование сервиса HUAWEI IAP гарантирует пользователю получение оплаченной покупки.

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

 Для интеграции сервиса воспользуйтесь следующими инструкциями:

HUAWEI IAP: процесс покупки

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

Стандартный процесс приобретения товаров:

  1. Пользователь создает запрос на покупку в вашем приложении, а ваше приложение затем направляет этот запрос в HMS Core (APK).

  2. Запрос доставки. Проверка подписи в данных о покупке перед доставкой запрошенного продукта.

  3. Доставка покупки и отправка токена на сервер вашего приложения. Этот токен используется для получения статуса доставки покупки. Таким образом, вы сможете понять, необходима ли повторная доставка, если при покупке произошла ошибка.

  4. После того, как продукт успешно доставлен пользователю, вызовите метод API consumeOwnedPurchase для использования продукта и отправки уведомления на сервер Huawei IAP для обновления статуса доставки. Токен purchaseToken передается в запросе вызова API и, после того, как покупка использована пользователем, сервер Huawei IAP изменяет статус продукта на «доступно для покупки». После этого продукт можно купить заново.

Кроме метода API consumeOwnedPurchase, предоставленного IAP клиентом, ваше приложение также может воспользоваться API от IAP сервера для использования продукта. Чтобы узнать об этом более подробно, смотрите раздел Подтверждение покупки для сервиса заказов.

Как HUAWEI IAP осуществляет повторную доставку продукта

HUAWEI IAP поможет вам повторно доставить расходуемую покупку при сбоях доставки, которые возникли из-запроблем с синхронизацией данных (ошибки соединения, завершение процесса и др.) между вашим приложением и сервером IAP. На рисунке показан процесс доставки.

Ваше приложение требует активации повторной доставки в следующих случаях:

  • Запуск приложения.

  • Код результата -1 (OrderStatusCode. ORDER_STATE_FAILED) вернулся в ответ на запрос о покупке.

  • Код результата 60051 (OrderStatusCode. ORDER_PRODUCT_OWNED) вернулся в ответ на запрос о покупке.

Функция повторной доставки реализуется следующим образом:

Шаг 1. Используйте obtainOwnedPurchases для получения информации о покупке для оплаченных, но не доставленных товаров. Укажите priceType равный 0 в OwnedPurchasesReq.

Если вызов API прошел успешно, HUAWEI IAP вернет объект  OwnedPurchasesResult, содержащий данные о покупке и подписи по всем приобретенным, но не доставленным продуктам. Используйте публичный ключ в AppGallery Connect для проверки подписи. Подробную информацию о способе проверки можно найти в разделе «Проверка подписи при возвращении результата».

Данные о каждой покупке представляют собой строку символов в формате JSON, которая содержит параметры, указанные в InAppPurchaseData. Вам нужно распарсить поле purchaseState из строки символов InAppPurchaseData. Если purchaseState покупки равен 0 - то покупка успешно состоялась и доставка будет выполнена.

// Создайте объект OwnedPurchasesReq.
OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
// priceType: 0: расходуемая покупка; 1: нерасходуемая покупка; 2: подписка
ownedPurchasesReq.setPriceType(0);
// Получите объект Activity, вызывающий API.
final Activity activity = getActivity();
// Вызовите API obtainOwnedPurchases для получения информации о заказе по всем расходуемым покупкам, которые были приобретены, но не доставлены.
Task<OwnedPurchasesResult> task = Iap.getIapClient(activity).obtainOwnedPurchases(ownedPurchasesReq);
task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
    @Override
    public void onSuccess(OwnedPurchasesResult result) {
        // Получите результат выполнения при успешном запросе.
        if (result != null && result.getInAppPurchaseDataList() != null) {
            for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
                String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
                String inAppSignature = result.getInAppSignature().get(i);
                // Используйте публичный ключ IAP для проверки подписи inAppPurchaseData.
               // Проверьте статус покупки каждого продукта, если проверка прошла успешно. После совершения платежа, доставьте необходимый продукт пользователю. После успешной доставки используйте продукт.
                try {
                    InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData);
                    Int  purchaseState = inAppPurchaseDataBean.getPurchaseState();
                } catch (JSONException e) {
                }
            }
        }
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(Exception e) {
        if (e instanceof IapApiException) {
            IapApiException apiException = (IapApiException) e;
            Status status = apiException.getStatus();
            Int returnCode = apiException.getStatusCode();
        } else {
            // Другие внешние ошибки.
        }
    }
});

Шаг 2. Вызовите метод API consumeOwnedPurchase для использования доставленного продукта.

Шаг 3. Подтвердите доставку для всех запрошенных продуктов через метод API obtainOwnedPurchases. Если продукт уже доставлен, вызовите метод API consumeOwnedPurchase для использования продукта и дайте инструкцию серверу Huawei IAP для обновления статуса доставки. После использования продукта, сервер Huawei IAP изменяет статус продукта на «доступно для покупки», позволяя  купить его снова.

Для получения более подробной информации перейдите по ссылкам:

HUAWEI IAP: официальный сайт

HUAWEI IAP: информация для разработчиков

Сообщество HUAWEI HMS Core

Адреса репозиториев с открытым исходным кодом с образцами интеграции HMS: GitHub и Gitee

Подпишитесь на нас, чтобы получать информацию о новейших технологиях HMS.

Комментарии (4)


  1. trak
    26.08.2021 10:07

    Пользователи жалуются, что везде сплошной донат и pay-to-win. детали этой гадости не важны.


    1. OrlandoFurioso Автор
      26.08.2021 10:09
      +1

      Если вам не нравится донат и PTW, зачем играть в эти игры? Какое это имеет отношения к деталям реализации?


      1. trak
        26.08.2021 10:49

        Если вам не нравится торговля героином, то какое это имеет отношение к способу торговли? Я про то, что это рекламная статья, и ее заголовок маркетоложеское клише.


  1. ksr123
    27.08.2021 02:34

    По заголовку я решил, что это стёбная статья. Оказалось, просто крайне неудачная реклама.