소스 검색

订阅功能

master
azazaz123456 1 주 전
부모
커밋
f54b794a93
4개의 변경된 파일1092개의 추가작업 그리고 94개의 파일을 삭제
  1. +996
    -83
      Assets/Resources/UI/UIMainModel.prefab
  2. +58
    -9
      Assets/Scripts/Buy/IAPManager.cs
  3. +1
    -1
      Assets/Scripts/UI/UILogin.cs
  4. +37
    -1
      Assets/Scripts/UI/UIMainModel.cs

+ 996
- 83
Assets/Resources/UI/UIMainModel.prefab
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 58
- 9
Assets/Scripts/Buy/IAPManager.cs 파일 보기

@@ -1,57 +1,106 @@
using System;
锘縰sing System;
using UnityEngine; using UnityEngine;
using UnityEngine.Purchasing; using UnityEngine.Purchasing;
using UnityEngine.Purchasing.Extension; using UnityEngine.Purchasing.Extension;


public class IAPManager : MonoBehaviour, IDetailedStoreListener public class IAPManager : MonoBehaviour, IDetailedStoreListener
{ {
public static IAPManager Instance { get; private set; } // 鍗曚緥

private IStoreController controller; private IStoreController controller;
private IExtensionProvider extensions; private IExtensionProvider extensions;


private string subscriptionId = "quewenYueKa"; private string subscriptionId = "quewenYueKa";



void Awake()
{
// 鍗曚緥鍒濆�鍖�
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject); // 鍙�€夛細闃叉�鍒囨崲鍦烘櫙琚�攢姣�
}
else
{
Destroy(gameObject); // 閬垮厤閲嶅�鍒涘缓
}
}

void Start() void Start()
{ {
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
builder.AddProduct(subscriptionId, ProductType.Subscription); builder.AddProduct(subscriptionId, ProductType.Subscription);


UnityPurchasing.Initialize(this, builder); // 使用新版接口
UnityPurchasing.Initialize(this, builder); // 浣跨敤鏂扮増鎺ュ彛
} }


public void OnInitialized(IStoreController controller, IExtensionProvider extensions) public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{ {
this.controller = controller; this.controller = controller;
this.extensions = extensions; this.extensions = extensions;
Debug.Log("IAP 初始化成功");
Debug.Log("IAP 鍒濆�鍖栨垚鍔�");
} }


public void OnInitializeFailed(InitializationFailureReason error) public void OnInitializeFailed(InitializationFailureReason error)
{ {
Debug.LogError("IAP 初始化失败: " + error);
Debug.LogError("IAP 鍒濆�鍖栧け璐�: " + error);
} }


public void OnInitializeFailed(InitializationFailureReason error, string message) public void OnInitializeFailed(InitializationFailureReason error, string message)
{ {
Debug.LogError($"详细失败信息: {error} - {message}");
Debug.LogError($"璇︾粏澶辫触淇℃伅: {error} - {message}");
} }


public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{ {
if (args.purchasedProduct.definition.id == subscriptionId) if (args.purchasedProduct.definition.id == subscriptionId)
{ {
Debug.Log("订阅成功!");
// 解锁功能
Debug.Log("璁㈤槄鎴愬姛锛�");
// 瑙i攣鍔熻兘
} }
return PurchaseProcessingResult.Complete; return PurchaseProcessingResult.Complete;
} }


public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription) public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
{ {
Debug.LogError($"购买失败: {failureDescription.message}");
Debug.LogError($"璐�拱澶辫触: {failureDescription.message}");
} }


public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
{ {
Debug.LogError($"购买失败: {failureReason}");
Debug.LogError($"璐�拱澶辫触: {failureReason}");
} }

public bool IsSubscribed()
{
if (controller == null) return false;

Product product = controller.products.WithID(subscriptionId);
if (product != null && product.hasReceipt)
{
// 瀵逛簬璁㈤槄鍟嗗搧锛宧asReceipt 閫氬父鎰忓懗鐫€鐢ㄦ埛宸茬粡璁㈤槄
Debug.Log("鐢ㄦ埛宸茶�闃咃紒");
return true;
}

Debug.Log("鐢ㄦ埛鏈��闃呫€�");
return false;
}

public void BuySubscription()
{
if (controller == null) return;

Product product = controller.products.WithID(subscriptionId);
if (product != null && product.availableToPurchase)
{
controller.InitiatePurchase(product);
}
else
{
Debug.LogWarning("璁㈤槄鍟嗗搧鏈�噯澶囧ソ");
}
}

} }

+ 1
- 1
Assets/Scripts/UI/UILogin.cs 파일 보기

@@ -101,7 +101,7 @@ public class UILogin : UIBase


private void SetupGameMenu(string appleUserId, ICredential credential) private void SetupGameMenu(string appleUserId, ICredential credential)
{ {
var appleIdCredential = credential as IAppleIDCredential;
//var appleIdCredential = credential as IAppleIDCredential;
//var passwordCredential = receivedCredential as IPasswordCredential; //var passwordCredential = receivedCredential as IPasswordCredential;
GameData.Instance.appleUserId = appleUserId; GameData.Instance.appleUserId = appleUserId;
GameData.Instance.isYouke = false; GameData.Instance.isYouke = false;


+ 37
- 1
Assets/Scripts/UI/UIMainModel.cs 파일 보기

@@ -29,6 +29,12 @@ public class UIMainModel : UIBase
[SerializeField] [SerializeField]
Image PlayButtonImages; Image PlayButtonImages;


[SerializeField]
Text SubDetailsText;

[SerializeField]
GameObject dingyueBg;

byte playType = 255; byte playType = 255;


bool _isPlaying = false; bool _isPlaying = false;
@@ -78,7 +84,16 @@ public class UIMainModel : UIBase
} }
else else
{ {
IsPlaying = true;
if (IAPManager.Instance.IsSubscribed())
{
IsPlaying = true;
}
else
{
int freeNum= PlayerPrefs.GetInt("FreeNum_" + GameData.Instance.appleUserId, 3);
SubDetailsText.text = $"<color=#1e92ff>{freeNum} free trals available and all types</color> of products can be used after subscription";
dingyueBg.SetActive(true);
}
} }
} }


@@ -131,4 +146,25 @@ public class UIMainModel : UIBase
} }
} }


public void ClickSubNowButton()
{
IAPManager.Instance.BuySubscription();
dingyueBg.SetActive(false);
}

public void ClickSubLaterButton()
{
int freeNum = PlayerPrefs.GetInt("FreeNum_" + GameData.Instance.appleUserId, 3);
if (freeNum > 0)
{
PlayerPrefs.SetInt("FreeNum_" + GameData.Instance.appleUserId, freeNum - 1);
IsPlaying = true;
}
dingyueBg.SetActive(false);
}

public void ClickCloseDingYueButton()
{
dingyueBg.SetActive(false);
}
} }

불러오는 중...
취소
저장