Initial commit

This commit is contained in:
alexpete
2021-03-05 11:26:34 -08:00
commit a10351f38d
27091 changed files with 5521199 additions and 0 deletions
@@ -0,0 +1,102 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/EBus/EBus.h>
#include "InAppPurchases/InAppPurchasesInterface.h"
namespace InAppPurchases
{
class InAppPurchasesRequests
: public AZ::EBusTraits
{
public:
//////////////////////////////////////////////////////////////////////////
// EBusTraits overrides
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual void Initialize() = 0;
// All Queries and Purchase requests will send a response to the InAppPurchasesResponseBus
// Implement that class to receive those responses
// Request product details for a single product or a group of products
virtual void QueryProductInfoById(const AZStd::string& productId) const = 0;
virtual void QueryProductInfoByIds(AZStd::vector<AZStd::string>& productIds) const = 0;
virtual void QueryProductInfo() const = 0;
virtual void QueryProductInfoFromJson(const AZStd::string& filePath) const = 0;
virtual const AZStd::vector<AZStd::unique_ptr<ProductDetails const> >* GetCachedProductInfo() const = 0;
virtual const AZStd::vector<AZStd::unique_ptr<PurchasedProductDetails const> >* GetCachedPurchasedProductInfo() const = 0;
// Purchase a product
virtual void PurchaseProductWithDeveloperPayload(const AZStd::string& productId, const AZStd::string& developerPayload) const = 0;
virtual void PurchaseProduct(const AZStd::string& productId) const = 0;
// Request list of products already purchased by the user
virtual void QueryPurchasedProducts() const = 0;
virtual void RestorePurchasedProducts() const = 0;
// This should be called when a user buys any consumable product(like virtual currency). Otherwise, the user will not be able to buy this product again.
virtual void ConsumePurchase(const AZStd::string& purchaseToken) const = 0;
// This should be called for all transactions when you've processed on the purchase details and delivered the content.
virtual void FinishTransaction(const AZStd::string& transactionId, bool downloadHostedContent) const = 0;
virtual void ClearCachedProductDetails() = 0;
virtual void ClearCachedPurchasedProductDetails() = 0;
};
using InAppPurchasesRequestBus = AZ::EBus<InAppPurchasesRequests>;
class InAppPurchasesResponseAccessor
: public AZ::EBusTraits
{
public:
//////////////////////////////////////////////////////////////////////////
// EBusTraits overrides
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual bool GetNextProduct() { return false; }
virtual bool GetPreviousProduct() { return false; }
virtual bool GetNextPurchasedProduct() { return false; }
virtual bool GetPreviousPurchasedProduct() { return false; }
virtual AZStd::string GetProductId() { return ""; }
virtual AZStd::string GetProductTitle() { return ""; }
virtual AZStd::string GetProductDescription() { return ""; }
virtual AZStd::string GetProductPrice() { return ""; }
virtual AZStd::string GetProductCurrencyCode() { return ""; }
virtual AZ::u64 GetProductPriceMicro() { return 0; }
virtual AZStd::string GetPurchasedProductId() { return ""; }
virtual AZStd::string GetOrderId() { return ""; }
virtual AZStd::string GetDeveloperPayload() { return ""; }
virtual AZStd::string GetPurchaseSignature() { return ""; }
virtual AZStd::string GetPurchaseToken() { return""; }
virtual AZStd::string GetRestoredOrderId() { return ""; }
virtual AZStd::string GetPackageName() { return ""; }
virtual AZStd::string GetPurchaseTime() { return ""; }
virtual AZ::u64 GetSubscriptionExpirationTime() { return 0; }
virtual AZ::u64 GetRestoredPurchaseTime() { return 0; }
virtual bool IsAutoRenewing() { return false; }
virtual bool HasDownloads() { return false; }
virtual bool IsProductOwned() { return false; }
virtual void ResetIndices() {}
};
using InAppPurchasesResponseAccessorBus = AZ::EBus<InAppPurchasesResponseAccessor>;
}
@@ -0,0 +1,160 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/RTTI/RTTI.h>
#include <AzCore/std/string/string.h>
#include <AzCore/std/containers/vector.h>
#include <AzCore/std/smart_ptr/unique_ptr.h>
namespace InAppPurchases
{
/*
* Store a list of the product's details which are available for purchase
*/
class ProductDetails
{
public:
AZ_RTTI(ProductDetails, "{D90F4F87-E877-4503-917E-99E9D0A9EE5C}");
const AZStd::string& GetProductId() const { return m_productId; }
const AZStd::string& GetProductTitle() const { return m_productName; }
const AZStd::string& GetProductDescription() const { return m_productDescription; }
const AZStd::string& GetProductPrice() const { return m_productPrice; }
const AZStd::string& GetProductCurrencyCode() const { return m_productPriceCurrencyCode; }
AZ::u64 GetProductPriceMicro() const { return m_productPriceMicro; }
void SetProductId(const AZStd::string& productId) { m_productId = productId; }
void SetProductTitle(const AZStd::string& productTitle) { m_productName = productTitle; }
void SetProductDescription(const AZStd::string& productDescription) { m_productDescription = productDescription; }
void SetProductPrice(const AZStd::string& productPrice) { m_productPrice = productPrice; }
void SetProductCurrencyCode(const AZStd::string& productCurrencyCode) { m_productPriceCurrencyCode = productCurrencyCode; }
void SetProductPriceMicro(const AZ::u64& productPriceMicro) { m_productPriceMicro = productPriceMicro; }
virtual ~ProductDetails() {}
ProductDetails(const ProductDetails&) = default;
ProductDetails() = default;
protected:
AZStd::string m_productId;
AZStd::string m_productName;
AZStd::string m_productDescription;
AZStd::string m_productPrice;
AZStd::string m_productPriceCurrencyCode;
AZ::u64 m_productPriceMicro;
};
enum PurchaseState
{
PURCHASING,
DEFERRED,
PURCHASED,
CANCELLED,
FAILED,
RESTORED,
REFUNDED
};
/*
* Store a list of the purchased product's details
*/
class PurchasedProductDetails
{
public:
AZ_RTTI(PurchasedProductDetails, "{166DF716-D1C5-4239-BB93-7AFB14FA2400}");
const AZStd::string& GetProductId() const { return m_productId; }
const AZStd::string& GetOrderId() const { return m_orderId; }
const AZStd::string& GetDeveloperPayload() const { return m_developerPayload; }
virtual AZ::u64 GetPurchaseTime() const { return m_purchaseTime; }
PurchaseState GetPurchaseState() const { return m_purchaseState; }
void SetProductId(const AZStd::string& productId) { m_productId = productId; }
void SetOrderId(const AZStd::string& orderId) { m_orderId = orderId; }
void SetDeveloperPayload(const AZStd::string& developerPayload) { m_developerPayload = developerPayload; }
void SetPurchaseTime(AZ::u64 purchaseTime) { m_purchaseTime = purchaseTime; }
void SetPurchaseState(PurchaseState purchaseState) { m_purchaseState = purchaseState; }
virtual ~PurchasedProductDetails() {}
PurchasedProductDetails(const PurchasedProductDetails&) = default;
PurchasedProductDetails() = default;
protected:
AZStd::string m_productId;
AZStd::string m_orderId;
AZStd::string m_developerPayload;
AZ::u64 m_purchaseTime;
PurchaseState m_purchaseState;
};
/*
* Class to read from/write to cache
*/
class InAppPurchasesCache
{
public:
void ClearCachedProductDetails();
void ClearCachedPurchasedProductDetails();
void AddProductDetailsToCache(const ProductDetails* productDetails);
void AddPurchasedProductDetailsToCache(const PurchasedProductDetails* purchasedProductDetails);
const AZStd::vector<AZStd::unique_ptr<ProductDetails const> >& GetCachedProductDetails() const;
const AZStd::vector<AZStd::unique_ptr<PurchasedProductDetails const> >& GetCachedPurchasedProductDetails() const;
private:
AZStd::vector<AZStd::unique_ptr<ProductDetails const> > m_cachedProductDetails;
AZStd::vector<AZStd::unique_ptr<PurchasedProductDetails const> > m_cachedPurchasedProducts;
};
/*
* InAppPurchases interface which must be implemented
* by the platform specific classes for in-app purchasing
*/
class InAppPurchasesInterface
{
public:
virtual ~InAppPurchasesInterface() { }
static InAppPurchasesInterface* GetInstance();
static void DestroyInstance();
virtual void Initialize() = 0;
virtual void QueryProductInfo(AZStd::vector<AZStd::string>& productIds) const = 0;
virtual void QueryProductInfo() const = 0;
virtual void PurchaseProduct(const AZStd::string& productId, const AZStd::string& developerPayload) const = 0;
virtual void PurchaseProduct(const AZStd::string& productId) const = 0;
virtual void QueryPurchasedProducts() const = 0;
virtual void RestorePurchasedProducts() const = 0;
virtual void ConsumePurchase(const AZStd::string& purchaseToken) const = 0;
virtual void FinishTransaction(const AZStd::string& transactionId, bool downloadHostedContent) const = 0;
virtual InAppPurchasesCache* GetCache() = 0;
protected:
InAppPurchasesCache m_cache;
private:
static InAppPurchasesInterface* CreateInstance();
static InAppPurchasesInterface* iapInstance;
};
}
@@ -0,0 +1,95 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/EBus/EBus.h>
#include <InAppPurchases/InAppPurchasesInterface.h>
namespace InAppPurchases
{
class InAppPurchasesResponse
: public AZ::EBusTraits
{
public:
//////////////////////////////////////////////////////////////////////////
// EBusTraits overrides
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual void ProductInfoRetrieved(const AZStd::vector<AZStd::unique_ptr<ProductDetails const> >& productDetails) { (void)productDetails; }
virtual void PurchasedProductsRetrieved(const AZStd::vector<AZStd::unique_ptr<PurchasedProductDetails const> >& purchasedProductDetails) { (void)purchasedProductDetails; }
virtual void PurchasedProductsRestored(const AZStd::vector<AZStd::unique_ptr<PurchasedProductDetails const> >& purchasedProductDetails) { (void)purchasedProductDetails; }
virtual void NewProductPurchased(const PurchasedProductDetails* purchasedProductDetails) { (void)purchasedProductDetails; }
virtual void PurchaseConsumed(const AZStd::string& purchaseToken) { (void)purchaseToken; }
virtual void PurchaseCancelled(const PurchasedProductDetails* purchasedProductDetails) { (void)purchasedProductDetails; }
virtual void PurchaseRefunded(const PurchasedProductDetails* purchasedProductDetails) { (void)purchasedProductDetails; }
virtual void PurchaseFailed(const PurchasedProductDetails* purchasedProductDetails) { (void)purchasedProductDetails; }
virtual void HostedContentDownloadComplete(const AZStd::string& transactionId, const AZStd::string& downloadedFileLocation) { (void)downloadedFileLocation; (void)transactionId; }
virtual void HostedContentDownloadFailed(const AZStd::string& transactionId, const AZStd::string& contentId) { (void)transactionId; (void)contentId; }
};
using InAppPurchasesResponseBus = AZ::EBus<InAppPurchasesResponse>;
// This API should be re-designed to be platform-agnostic, or if that is
// not possible we should move it to an Android specific include folder.
// But it can stay here for now because it's not a restricted platform.
class PurchasedProductDetailsAndroid
: public PurchasedProductDetails
{
public:
AZ_RTTI(PurchasedProductDetailsAndroid, "{86A7072A-4661-4DAA-A811-F9279B089859}", PurchasedProductDetails);
AZ::u64 GetPurchaseTime() const override { return m_purchaseTime / 1000; }
const AZStd::string& GetPurchaseSignature() const { return m_purchaseSignature; }
const AZStd::string& GetPackageName() const { return m_packageName; }
const AZStd::string& GetPurchaseToken() const { return m_purchaseToken; }
bool GetIsAutoRenewing() const { return m_autoRenewing; }
void SetPurchaseSignature(const AZStd::string& purchaseSignature) { m_purchaseSignature = purchaseSignature; }
void SetPackageName(const AZStd::string& packageName) { m_packageName = packageName; }
void SetPurchaseToken(const AZStd::string& purchaseToken) { m_purchaseToken = purchaseToken; }
void SetIsAutoRenewing(bool autoRenewing) { m_autoRenewing = autoRenewing; }
protected:
AZStd::string m_purchaseSignature;
AZStd::string m_packageName;
AZStd::string m_purchaseToken;
bool m_autoRenewing;
};
// This API should be re-designed to be platform-agnostic, or if that is
// not possible we should move it to an Apple specific include folder.
// But it can stay here for now because it's not a restricted platform.
class PurchasedProductDetailsApple
: public PurchasedProductDetails
{
public:
AZ_RTTI(PurchasedProductDetailsApple, "{31C108A3-9676-457A-9F1E-B752DBF96BC6}", PurchasedProductDetails);
const AZStd::string& GetRestoredOrderId() const { return m_restoredOrderId; }
AZ::u64 GetSubscriptionExpirationTime() const { return m_subscriptionExpirationTime; }
AZ::u64 GetRestoredPurchaseTime() const { return m_restoredPurchaseTime; }
bool GetHasDownloads() const { return m_hasDownloads; }
void SetRestoredOrderId(const AZStd::string& restoredOrderId) { m_restoredOrderId = restoredOrderId; }
void SetSubscriptionExpirationTime(AZ::u64 subscriptionExpirationTime) { m_subscriptionExpirationTime = subscriptionExpirationTime; }
void SetRestoredPurchaseTime(AZ::u64 restoredPurchaseTime) { m_restoredPurchaseTime = restoredPurchaseTime; }
void SetHasDownloads(bool hasDownloads) { m_hasDownloads = hasDownloads; }
protected:
AZStd::string m_restoredOrderId;
AZ::u64 m_subscriptionExpirationTime;
AZ::u64 m_restoredPurchaseTime;
bool m_hasDownloads;
};
}