bool FOnlineStoreAmazonServices::BeginPurchase(const FInAppPurchaseProductRequest& ProductRequest, FOnlineInAppPurchaseTransactionRef& InPurchaseStateObject) { UE_LOG(LogOnline, Display, TEXT("FOnlineStoreAmazonServices::BeginPurchase")); bool bCreatedNewTransaction = false; if (IsAllowedToMakePurchases()) { CachedPurchaseStateObject = InPurchaseStateObject; #if PLATFORM_ANDROID if (JNIEnv* Env = FAndroidApplication::GetJavaEnv()) { jstring ProductIdentifierFinal = Env->NewStringUTF(TCHAR_TO_UTF8(*ProductRequest.ProductIdentifier)); static jmethodID Method = FJavaWrapper::FindMethod(Env, FJavaWrapper::GameActivityClassID, "AndroidThunkJava_IapBeginPurchaseAmazon", "(Ljava/lang/String;Z)Z", false); bCreatedNewTransaction = FJavaWrapper::CallBooleanMethod(Env, FJavaWrapper::GameActivityThis, Method, ProductIdentifierFinal, ProductRequest.bIsConsumable); Env->DeleteLocalRef(ProductIdentifierFinal); } #endif UE_LOG(LogOnline, Display, TEXT("Created Transaction? - %s"), bCreatedNewTransaction ? TEXT("Created a transaction.") : TEXT("Failed to create a transaction.")); if (!bCreatedNewTransaction) { UE_LOG(LogOnline, Display, TEXT("FOnlineStoreAmazonServices::BeginPurchase - Could not create a new transaction.")); CachedPurchaseStateObject->ReadState = EOnlineAsyncTaskState::Failed; TriggerOnInAppPurchaseCompleteDelegates(EInAppPurchaseState::Invalid); } else { CachedPurchaseStateObject->ReadState = EOnlineAsyncTaskState::InProgress; } } else { UE_LOG(LogOnline, Display, TEXT("This device is not able to make purchases.")); InPurchaseStateObject->ReadState = EOnlineAsyncTaskState::Failed; TriggerOnInAppPurchaseCompleteDelegates(EInAppPurchaseState::NotAllowed); } return bCreatedNewTransaction; }
bool FOnlineStoreGooglePlay::BeginPurchase(const FInAppPurchaseProductRequest& ProductRequest, FOnlineInAppPurchaseTransactionRef& InPurchaseStateObject) { UE_LOG(LogOnline, Display, TEXT( "FOnlineStoreGooglePlay::BeginPurchase" )); bool bCreatedNewTransaction = false; if (IsAllowedToMakePurchases()) { CachedPurchaseStateObject = InPurchaseStateObject; extern bool AndroidThunkCpp_Iap_BeginPurchase(const FString&, const bool); bCreatedNewTransaction = AndroidThunkCpp_Iap_BeginPurchase(ProductRequest.ProductIdentifier, ProductRequest.bIsConsumable); UE_LOG(LogOnline, Display, TEXT("Created Transaction? - %s"), bCreatedNewTransaction ? TEXT("Created a transaction.") : TEXT("Failed to create a transaction.")); if (!bCreatedNewTransaction) { UE_LOG(LogOnline, Display, TEXT("FOnlineStoreGooglePlay::BeginPurchase - Could not create a new transaction.")); CachedPurchaseStateObject->ReadState = EOnlineAsyncTaskState::Failed; TriggerOnInAppPurchaseCompleteDelegates(EInAppPurchaseState::Invalid); } else { CachedPurchaseStateObject->ReadState = EOnlineAsyncTaskState::InProgress; } } else { UE_LOG(LogOnline, Display, TEXT("This device is not able to make purchases.")); InPurchaseStateObject->ReadState = EOnlineAsyncTaskState::Failed; TriggerOnInAppPurchaseCompleteDelegates(EInAppPurchaseState::NotAllowed); } return bCreatedNewTransaction; }