API/Autodoc/Files/URuStorePayClient.cpp.md


Defines

Name
PURCHASE_EVENT_LISTENER_CLASS

define PURCHASE_EVENT_LISTENER_CLASS

#define PURCHASE_EVENT_LISTENER_CLASS TEXT("ru/rustore/sdk/pay/callback/PurchaseEventListener")

Source code

// Copyright Epic Games, Inc. All Rights Reserved.

#define PURCHASE_EVENT_LISTENER_CLASS TEXT("ru/rustore/sdk/pay/callback/PurchaseEventListener")

using namespace RuStoreSDK;
using namespace RuStoreSDK::Pay;

const FString URuStorePayClient::PluginVersion = "10.5.0";
URuStorePayClient* URuStorePayClient::_instance = nullptr;
bool URuStorePayClient::_bIsInstanceInitialized = false;

bool URuStorePayClient::GetIsInitialized()
{
    return bIsInitialized;
}

URuStorePayClient* URuStorePayClient::Instance()
{
    if (!_bIsInstanceInitialized)
    {
        _bIsInstanceInitialized = true;
        _instance = NewObject<URuStorePayClient>(GetTransientPackage());
    }

    return _instance;
}

bool URuStorePayClient::Init()
{
    if (!URuStoreCore::IsPlatformSupported()) return false;
    if (bIsInitialized) return false;

    _instance->AddToRoot();

    URuStoreCore::Instance()->Init();

    auto clientJavaClass = MakeShared<AndroidJavaClass>("ru/rustore/unrealsdk/payclient/RuStoreUnrealPayClient");
    _clientWrapper = clientJavaClass->GetStaticAJObject("INSTANCE");
    
    return bIsInitialized = true;
}

void URuStorePayClient::Dispose()
{
    if (bIsInitialized)
    {
        bIsInitialized = false;
        ListenerRemoveAll();
        delete _clientWrapper;
        _instance->RemoveFromRoot();
    }
}

void URuStorePayClient::ConditionalBeginDestroy()
{
    Super::ConditionalBeginDestroy();

    Dispose();
    if (_bIsInstanceInitialized) _bIsInstanceInitialized = false;
}

bool URuStorePayClient::IsRuStoreInstalled()
{
    if (!URuStoreCore::IsPlatformSupported()) return false;
    if (!bIsInitialized) return false;

    return _clientWrapper->CallBool(TEXT("isRuStoreInstalled"));
}

URuStorePayProductId* URuStorePayClient::MakeProductId(FString value)
{
    auto productId = NewObject<URuStorePayProductId>(GetTransientPackage());
    productId->value = value;

    return productId;
}

TArray<URuStorePayProductId*> URuStorePayClient::MakeProductIdArray(TArray<FString> productIds)
{
    TArray<URuStorePayProductId*> _productIds;
    for (const auto& item : productIds)
    {
        auto productId = NewObject<URuStorePayProductId>(GetTransientPackage());
        productId->value = item;
        _productIds.Add(productId);
    }

    return _productIds;
}

URuStorePayOrderId* URuStorePayClient::MakeOrderId(FString value)
{
    auto orderId = NewObject<URuStorePayOrderId>(GetTransientPackage());
    orderId->value = value;

    return orderId;
}

URuStorePayQuantity* URuStorePayClient::MakeQuantity(int value)
{
    auto quantity = NewObject<URuStorePayQuantity>(GetTransientPackage());
    quantity->value = value;

    return quantity;
}

URuStorePayDeveloperPayload* URuStorePayClient::MakeDeveloperPayload(FString value)
{
    auto orderId = NewObject<URuStorePayDeveloperPayload>(GetTransientPackage());
    orderId->value = value;

    return orderId;
}

URuStorePayAppUserId* URuStorePayClient::MakeAppUserId(FString value)
{
    auto appUserId = NewObject<URuStorePayAppUserId>(GetTransientPackage());
    appUserId->value = value;

    return appUserId;
}

URuStorePayAppUserEmail* URuStorePayClient::MakeAppUserEmail(FString value)
{
    auto appUserEmail = NewObject<URuStorePayAppUserEmail>(GetTransientPackage());
    appUserEmail->value = value;

    return appUserEmail;
}

FURuStorePayProductPurchaseParams URuStorePayClient::MakeProductPurchaseParams(URuStorePayProductId* productId, URuStorePayAppUserEmail* appUserEmail, URuStorePayAppUserId* appUserId, URuStorePayDeveloperPayload* developerPayload, URuStorePayOrderId* orderId, URuStorePayQuantity* quantity)
{
    FURuStorePayProductPurchaseParams params;
    params.productId = productId;
    params.appUserEmail = appUserEmail;
    params.appUserId = appUserId;
    params.developerPayload = developerPayload;
    params.orderId = orderId;
    params.quantity = quantity;

    return params;
}

long URuStorePayClient::GetUserAuthorizationStatus(TFunction<void(long, EURuStorePayUserAuthorizationStatus)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto listener = ListenerBind(new GetUserAuthorizationStatusListenerImpl(onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid(TEXT("getUserAuthorizationStatus"), listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::GetPurchaseAvailability(TFunction<void(long, TSharedPtr<FURuStorePayPurchaseAvailabilityResult, ESPMode::ThreadSafe>)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto listener = ListenerBind(new PurchaseAvailabilityListenerImpl(onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid(TEXT("getPurchaseAvailability"), listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::GetProducts(TArray<URuStorePayProductId*>& productIds, TFunction<void(long, TSharedPtr<TArray<FURuStorePayProduct>, ESPMode::ThreadSafe>)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;
    auto _onSuccess = [onSuccess](long requestId, FString response) {
        auto products = DataConverter::ParseProducts(response);
        onSuccess(requestId, products);
    };
    TArray<FString> _productIds;
    for (const auto item : productIds)
    {
        if (item != nullptr) _productIds.Add(item->value);
    }
    auto listener = ListenerBind(new ProductsResponseListenerImpl(_onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid(TEXT("getProducts"), _productIds, listener->GetJWrapper());
    
    return listener->GetId();
}

long URuStorePayClient::GetPurchases(TFunction<void(long, TSharedPtr<TArray<FURuStorePayPurchase>, ESPMode::ThreadSafe>)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto _onSuccess = [onSuccess](long requestId, FString response) {
        auto purchases = DataConverter::ParsePurchases(response);
        onSuccess(requestId, purchases);
    };

    auto listener = ListenerBind(new PurchasesResponseListenerImpl(_onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid(TEXT("getPurchases"), TEXT(""), TEXT(""), TEXT(""), listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::GetPurchases(
    bool bUseProductType,
    bool bUsePurchaseStatusFilter,
    bool bUseAcknowledgementState,
    EURuStorePayProductType productType,
    EURuStorePayPurchaseStatusFilter purchaseStatusFilter,
    EURuStorePayAcknowledgementState acknowledgementState,
    TFunction<void(long, TSharedPtr<TArray<FURuStorePayPurchase>, ESPMode::ThreadSafe>)> onSuccess,
    TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure
)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto _onSuccess = [onSuccess](long requestId, FString response) {
        auto purchases = DataConverter::ParsePurchases(response);
        onSuccess(requestId, purchases);
    };

    FString _productType = bUseProductType ? UEnum::GetDisplayValueAsText(productType).ToString() : "";
    FString _purchaseStatusFilter = bUsePurchaseStatusFilter ? DataConverter::PurchaseStatusFilterToString(purchaseStatusFilter) : "";
    FString _acknowledgementState = bUseAcknowledgementState ? UEnum::GetDisplayValueAsText(acknowledgementState).ToString() : "";

    auto listener = ListenerBind(new PurchasesResponseListenerImpl(_onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid(TEXT("getPurchases"), _productType, _purchaseStatusFilter, _acknowledgementState, listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::GetPurchase(URuStorePayPurchaseId* purchaseId, TFunction<void(long, TSharedPtr<FURuStorePayPurchase, ESPMode::ThreadSafe>)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto _onSuccess = [onSuccess](long requestId, FString response) {
        auto purchase = DataConverter::ParsePurchase(response);
        onSuccess(requestId, purchase);
    };

    auto listener = ListenerBind(new PurchaseResponseListenerImpl(_onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid("getPurchase", purchaseId->value, listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::Purchase(
    FURuStorePayProductPurchaseParams& productPurchaseParams,
    EURuStorePayPreferredPurchaseType preferredPurchaseType,
    EURuStorePaySdkTheme sdkTheme,
    TFunction<void(long, TSharedPtr<FURuStorePayProductPurchaseResult, ESPMode::ThreadSafe>)> onSuccess,
    TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure,
    TSharedPtr<PurchaseEventListenerImpl, ESPMode::ThreadSafe> purchaseEventListener
)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto _onSuccess = [onSuccess](long requestId, FString response) {
        auto result = DataConverter::ParsePurchaseResult(response);
        onSuccess(requestId, result);
    };

    FString _productId = "";
    if (productPurchaseParams.productId != nullptr) _productId = productPurchaseParams.productId->value;

    FString _appUserEmail = "";
    if (productPurchaseParams.appUserEmail != nullptr) _appUserEmail = productPurchaseParams.appUserEmail->value;

    FString _appUserId = "";
    if (productPurchaseParams.appUserId != nullptr) _appUserId = productPurchaseParams.appUserId->value;

    FString _developerPayload = "";
    if (productPurchaseParams.developerPayload != nullptr) _developerPayload = productPurchaseParams.developerPayload->value;

    FString _orderId = "";
    if (productPurchaseParams.orderId != nullptr) _orderId = productPurchaseParams.orderId->value;

    int _quantity = 1;
    if (productPurchaseParams.quantity != nullptr) _quantity = productPurchaseParams.quantity->value;

    FString _preferredPurchaseType = UEnum::GetDisplayValueAsText(preferredPurchaseType).ToString();
    FString _sdkTheme = UEnum::GetDisplayValueAsText(sdkTheme).ToString();

    AndroidJavaObject* purchaseEventListenerNullprr = nullptr;
#if PLATFORM_ANDROID
    AndroidJavaObject jInterface((jobject)nullptr, PURCHASE_EVENT_LISTENER_CLASS);
    purchaseEventListenerNullprr = &jInterface;
#endif

    if (purchaseEventListener) purchaseEventListener->SetWeakPtr(purchaseEventListener);

    auto purchaseEventListenerWrapper = purchaseEventListener
        ? purchaseEventListener->GetJWrapper()
        : purchaseEventListenerNullprr;

    auto listener = ListenerBind(
        new ProductPurchaseResultListenerImpl(
            _onSuccess,
            onFailure,
            [this](RuStoreListener* item) {
                ListenerUnbind(item);
            }
        )
    );

    _clientWrapper->CallVoid(
        "purchase",
        _productId,
        _appUserEmail,
        _appUserId,
        _developerPayload,
        _orderId,
        _quantity,
        _preferredPurchaseType,
        _sdkTheme,
        listener->GetJWrapper(),
        purchaseEventListenerWrapper
    );

    return listener->GetId();
}

long URuStorePayClient::PurchaseTwoStep(
    FURuStorePayProductPurchaseParams& productPurchaseParams,
    EURuStorePaySdkTheme sdkTheme,
    TFunction<void(long, TSharedPtr<FURuStorePayProductPurchaseResult, ESPMode::ThreadSafe>)> onSuccess,
    TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure,
    TSharedPtr<PurchaseEventListenerImpl, ESPMode::ThreadSafe> purchaseEventListener
)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto _onSuccess = [onSuccess](long requestId, FString response) {
        auto result = DataConverter::ParsePurchaseResult(response);
        onSuccess(requestId, result);
    };

    FString _productId = "";
    if (productPurchaseParams.productId != nullptr) _productId = productPurchaseParams.productId->value;

    FString _appUserEmail = "";
    if (productPurchaseParams.appUserEmail != nullptr) _appUserEmail = productPurchaseParams.appUserEmail->value;

    FString _appUserId = "";
    if (productPurchaseParams.appUserId != nullptr) _appUserId = productPurchaseParams.appUserId->value;

    FString _developerPayload = "";
    if (productPurchaseParams.developerPayload != nullptr) _developerPayload = productPurchaseParams.developerPayload->value;

    FString _orderId = "";
    if (productPurchaseParams.orderId != nullptr) _orderId = productPurchaseParams.orderId->value;

    int _quantity = 1;
    if (productPurchaseParams.quantity != nullptr) _quantity = productPurchaseParams.quantity->value;

    FString _sdkTheme = UEnum::GetDisplayValueAsText(sdkTheme).ToString();

    AndroidJavaObject* purchaseEventListenerNullprr = nullptr;
#if PLATFORM_ANDROID
    AndroidJavaObject jInterface((jobject)nullptr, PURCHASE_EVENT_LISTENER_CLASS);
    purchaseEventListenerNullprr = &jInterface;
#endif

    if (purchaseEventListener) purchaseEventListener->SetWeakPtr(purchaseEventListener);

    auto purchaseEventListenerWrapper = purchaseEventListener
        ? purchaseEventListener->GetJWrapper()
        : purchaseEventListenerNullprr;

    auto listener = ListenerBind(
        new ProductPurchaseResultListenerImpl(
            _onSuccess,
            onFailure,
            [this](RuStoreListener* item) {
                ListenerUnbind(item);
            }
        )
    );

    _clientWrapper->CallVoid(
        "purchaseTwoStep",
        _productId,
        _appUserEmail,
        _appUserId,
        _developerPayload,
        _orderId,
        _quantity,
        _sdkTheme,
        listener->GetJWrapper(),
        purchaseEventListenerWrapper
    );

    return listener->GetId();
}

long URuStorePayClient::ConfirmTwoStepPurchase(URuStorePayPurchaseId* purchaseId, URuStorePayDeveloperPayload* developerPayload, TFunction<void(long)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    FString _developerPayload = "";
    if (developerPayload != nullptr) _developerPayload = developerPayload->value;

    auto listener = ListenerBind(new ConfirmTwoStepPurchaseResponseListenerImpl(onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid("confirmTwoStepPurchase", purchaseId->value, _developerPayload, listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::CancelTwoStepPurchase(URuStorePayPurchaseId* purchaseId, TFunction<void(long)> onSuccess, TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    auto listener = ListenerBind(new CancelTwoStepPurchaseResponseListenerImpl(onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid("cancelTwoStepPurchase", purchaseId->value, listener->GetJWrapper());

    return listener->GetId();
}

long URuStorePayClient::UpdateAcknowledgementState(
    URuStorePayPurchaseId* purchaseId,
    EURuStorePayAcknowledgementState state,
    URuStorePayDeveloperPayload* developerPayload,
    TFunction<void(long, EURuStorePayAcknowledgementState)> onSuccess,
    TFunction<void(long, TSharedPtr<FURuStoreError, ESPMode::ThreadSafe>)> onFailure
)
{
    if (!URuStoreCore::IsPlatformSupported(onFailure)) return 0;
    if (!bIsInitialized) return 0;

    FString _state = UEnum::GetDisplayValueAsText(state).ToString();

    FString _developerPayload = "";
    if (developerPayload != nullptr) _developerPayload = developerPayload->value;

    auto listener = ListenerBind(new UpdateAcknowledgementStateListenerImpl(onSuccess, onFailure, [this](RuStoreListener* item) { ListenerUnbind(item); }));
    _clientWrapper->CallVoid("updateAcknowledgementState", purchaseId->value, _state, _developerPayload, listener->GetJWrapper());

    return listener->GetId();
}

Назад