Commit 0f3088bc authored by gaorui's avatar gaorui
Browse files

Initial commit

parents
This diff is collapsed.
fileFormatVersion: 2
guid: 9fc0d4010bbf28b4594072e72b8655ab
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 01d236b657afd43c2a1c7f7ca5f7a2df
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 14422ca9d25954423a08b59088e07ddf
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: b2dbb909333c14c8d8775786c409dffc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
public class AndroidSdkInterface : MonoBehaviour
{
private static AndroidJavaClass _serviceClass;
private static AndroidJavaObject _serviceInstance;
// 缓存 AndroidJavaClass 和实例对象
private static AndroidJavaObject ServiceInstance
{
get
{
if (_serviceInstance == null)
{
try
{
_serviceClass = new AndroidJavaClass("com.unity.game.plugin.SdkManager");
_serviceInstance = _serviceClass.CallStatic<AndroidJavaObject>("getInstance");
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"JavaManager 初始化失败: {ex.Message}");
}
}
return _serviceInstance;
}
}
/// <summary>
/// 调用 SdkManager 的 login 方法,确保在主线程执行,异常安全,资源释放
/// </summary>
public static void CallSdkLogin()
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("login");
NativeLogger.I("fastsdk_btn_unity", "call SdkManager login");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.login 异常: {ex.Message}");
}
}
public static void CallSdkLogout()
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("logout");
NativeLogger.I("fastsdk_btn_unity", "call SdkManager logout");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.logout 异常: {ex.Message}");
}
}
public static void CallSdkStartPay(string jsonStr)
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("startPay", jsonStr);
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.pay 异常: {ex.Message}");
}
}
public static void CallSdkExit()
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("exit");
NativeLogger.I("fastsdk_btn_unity", "call SdkManager exit");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.exit 异常: {ex.Message}");
}
}
public static void CallSdkSendEvent(EventType type,string jsonStr)
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
int eventTypeCode = (int)type;
ServiceInstance?.Call("sendEvent", eventTypeCode, jsonStr);
NativeLogger.I("fastsdk_btn_unity", "call SdkManager sendEvent");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.enterServer 异常: {ex.Message}");
}
}
public static void CallSdkQueryGoodsInfo()
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("queryGoodsInfo");
NativeLogger.I("fastsdk_btn_unity", "call SdkManager queryGoodsInfo");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.CallSdkQueryGoodsInfo 异常: {ex.Message}");
}
}
public static void CallSdkCDKey(AccessActivityType accessType, string key)
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
int keyType = (int)accessType;
ServiceInstance?.Call("accessParticipate", keyType, key);
NativeLogger.I("fastsdk_btn_unity", "call SdkManager accessParticipate");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.accessParticipate 异常: {ex.Message}");
}
}
public static void CallSdkOpenService()
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("openService");
NativeLogger.I("fastsdk_btn_unity", "call SdkManager openService");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.openService 异常: {ex.Message}");
}
}
public static void CallSdkOpenAccount()
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("openAccount");
NativeLogger.I("fastsdk_btn_unity", "call SdkManager openAccount");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.openAccount 异常: {ex.Message}");
}
}
public static void CallSdkShareData(int type,int childType,string jsonStr)
{
try
{
UnityMainThreadDispatcher.Instance.Enqueue(() => {
ServiceInstance?.Call("shareData", type,childType,jsonStr);
NativeLogger.I("fastsdk_btn_unity", "call SdkManager shareData");
});
}
catch (System.Exception ex)
{
NativeLogger.I("fastsdk_btn_unity", $"调用 SdkManager.shareData 异常: {ex.Message}");
}
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 3f8639cdf110e47c39d70a11fefd7cac
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using Newtonsoft.Json;
using UnityEngine;
public static class HoolaiSdkManager
{
// ==================== 登录 ====================
public static void Login()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkLogin();
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.LoginSdk();
#else
Debug.Log("【UnifiedSdkManager】模拟调用:登录");
#endif
}
// ==================== 登出 ====================
public static void Logout()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkLogout();
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.LogoutSdk();
#else
Debug.Log("【UnifiedSdkManager】模拟调用:登出");
#endif
}
// ==================== 支付 ====================
public static void StartPay(PayParams payParams)
{
string jsonStr = JsonConvert.SerializeObject(payParams);
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkStartPay(jsonStr);
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.StartPay(jsonStr);
#else
Debug.Log($"【UnifiedSdkManager】模拟调用:支付,参数={jsonStr}");
#endif
}
// ==================== 数据上报 ====================
public static void SendEvent(EventType eventType, PlayerInfo playerInfo)
{
string jsonStr = JsonConvert.SerializeObject(playerInfo);
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkSendEvent(eventType, jsonStr);
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.ReportUserInfoFull(eventType, jsonStr);
#else
Debug.Log($"【UnifiedSdkManager】模拟调用:数据上报,类型={eventType},参数={jsonStr}");
#endif
}
// ==================== 查询商品信息 ====================
public static void QueryGoodsInfo()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkQueryGoodsInfo();
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.QueryGoodsInfo();
#else
Debug.Log("【UnifiedSdkManager】模拟调用:查询商品信息");
#endif
}
// ==================== CDKey 活动 ====================
public static void AccessParticipate(AccessActivityType accessType, string cdKey)
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkCDKey(accessType,cdKey);
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.AccessParticipate(accessType, cdKey);
#else
Debug.Log($"【UnifiedSdkManager】模拟调用:参与活动,CDKey={cdKey}");
#endif
}
// ==================== 打开客服 ====================
public static void OpenService()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkOpenService();
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.OpenService();
#else
Debug.Log("【UnifiedSdkManager】模拟调用:打开客服");
#endif
}
// ==================== 打开账号中心 ====================
public static void OpenAccountCenter()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkOpenAccount();
#elif UNITY_IOS && !UNITY_EDITOR
IosSdkInterface.OpenAccountCenter();
#else
Debug.Log("【UnifiedSdkManager】模拟调用:打开账号中心");
#endif
}
// ==================== 分享 ====================
public static void ShareData(int platform, int childType, string jsonStr)
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkShareData(platform, childType, jsonStr);
#elif UNITY_IOS && !UNITY_EDITOR
// iOS 分享参数解析(可根据需要扩展)
Debug.Log("【UnifiedSdkManager】iOS 分享暂未实现完整解析");
IosSdkInterface.StartShare(platform, "Title", "Content", "https://example.com");
#else
Debug.Log($"【UnifiedSdkManager】模拟调用:分享,平台={platform},子类型={childType}");
#endif
}
// ==================== 退出游戏 ====================
public static void ExitGame()
{
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidSdkInterface.CallSdkExit();
#elif UNITY_IOS && !UNITY_EDITOR
// iOS 通常不直接退出应用
Debug.Log("【UnifiedSdkManager】iOS 不支持直接退出应用");
#else
Debug.Log("【UnifiedSdkManager】模拟调用:退出游戏");
#endif
}
}
fileFormatVersion: 2
guid: ab62b7684d21a4ecc905ad6fd5c276a3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
#if UNITY_IOS && !UNITY_EDITOR
using UnityEngine;
using System.Runtime.InteropServices;
using System;
public class IosSdkInterface
{
// ================== DllImport 声明 ==================
// 基础功能
[DllImport("__Internal")] private static extern void _LoginSdk();
[DllImport("__Internal")] private static extern void _LogoutSdk();
// 支付功能
[DllImport("__Internal")] private static extern void _QueryGoodsInfo();
[DllImport("__Internal")] private static extern void _StartPay(string jsonInfo);
// 分享功能
[DllImport("__Internal")] private static extern void _StartShare(int shareType, string title, string content, string url);
// 数据上报
[DllImport("__Internal")] private static extern void _ReportUserInfoFull(int eventType, string jsonInfo);
// 活动功能
[DllImport("__Internal")] private static extern void _AccessParticipate(int activityType, string activityData);
// 其他功能
[DllImport("__Internal")] private static extern void _OpenAccountCenter();
[DllImport("__Internal")] private static extern void _OpenService();
// ========= C# 封装调用 ============
public static void LoginSdk()
{
_LoginSdk();
}
public static void LogoutSdk()
{
_LogoutSdk();
}
public static void QueryGoodsInfo()
{
_QueryGoodsInfo();
}
public static void StartPay(string json)
{
_StartPay(json);
}
public static void StartShare(int shareType, string title, string imagePath, string url)
{
_StartShare(shareType, title, imagePath, url);
}
public static void ReportUserInfoFull(EventType eventType, string jsonStr)
{
int eventTypeCode = (int)type;
_ReportUserInfoFull(eventTypeCode, jsonStr);
}
public static void AccessParticipate(AccessActivityType accessType, string cdKey = "")
{
int activityType = (int)accessType;
_AccessParticipate(activityType, activityData);
}
public static void OpenAccountCenter()
{
_OpenAccountCenter();
}
public static void OpenService()
{
_OpenService();
}
}
#endif // UNITY_IOS && !UNITY_EDITOR
\ No newline at end of file
fileFormatVersion: 2
guid: 74863d08882ac4630a7994c2befee099
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;
[System.Serializable]
public class InitResult
{
public string channel;
public int gameId;
public int channelId;
}
[System.Serializable]
public class LoginResult
{
public long uid;
public string accessToken;
public string channel;
public string channelUid; // 已弃用,默认为0
public string serverArea;
public string extendInfo; // 扩展参数转 JSON 字符串再传过来
}
[System.Serializable]
public class GoodsInfo
{
public string currency;
public string itemId;
public string itemName;
public string itemCount;
public string itemPrice;
public string showTag;
public string region;//仅 iOS返回
public string symbol;//仅 iOS返回
}
[System.Serializable]
public class GoodsListWrapper
{
public List<GoodsInfo> array;
}
public class PlatformCallback : MonoBehaviour
{
// 单例实现,确保只有一个接收器实例
public static PlatformCallback Instance { get; private set; }
void Awake()
{
// 单例模式实现
if (Instance != null && Instance != this)
{
NativeLogger.I("fastsdk_unity_result", "[ ] Destroying duplicate instance");
Destroy(gameObject);
return;
}
Instance = this;
// 确保接收器在场景切换中不被销毁
DontDestroyOnLoad(gameObject);
// 确保游戏对象名称与 Android 调用匹配
gameObject.name = "PlatformCallback";
NativeLogger.I("fastsdk_unity_result", "[PlatformCallback] Initialized with GameObject name: " + gameObject.name);
}
public void onInitSuccess(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", "[AndroidBrigsCall] onInitSuccess called with result: " + jsonStr);
InitResult result = JsonConvert.DeserializeObject<InitResult>(jsonStr);
if (result != null)
{
NativeLogger.I("fastsdk_unity_result", "反序列化成功!");
NativeLogger.I("fastsdk_unity_result", "Channel: " + result.channel);
NativeLogger.I("fastsdk_unity_result", "Game ID: " + result.gameId);
NativeLogger.I("fastsdk_unity_result", "Channel ID: " + result.channelId);
}
}
public void onInitFailed(string reason)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onInitFailed called with reason: " + reason);
}
//自定义退出界面
public void onCustomExit()
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onCustomExit called");
}
//预留
public void onUpdate(string data)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onUpdate called with data: " + data);
}
//登录成功
public void onLoginSuccess(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onLoginSuccess called with result: " + jsonStr);
//判断 null 或空字符串判断空白字符串(包括空格、制表符等)
if (string.IsNullOrEmpty(jsonStr) || string.IsNullOrWhiteSpace(jsonStr))
{
NativeLogger.I("fastsdk_unity_result", "[Unity] Android returned empty or invalid string");
return;
}
LoginResult loginResult = JsonConvert.DeserializeObject<LoginResult>(jsonStr);
if (loginResult.uid != 0) {
// 示例:如果接收到特定消息,切换到另一个场景
NativeLogger.I("fastsdk_unity_result", $"[Unity] Login successful, uid:{loginResult.uid} channel:{loginResult.channel} channelUid:{loginResult.channelUid} accessToken:{loginResult.accessToken}");
}
}
public void onRefreshUser(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onRefreshUser called with result: " + jsonStr);
//判断 null 或空字符串判断空白字符串(包括空格、制表符等)
if (string.IsNullOrEmpty(jsonStr) || string.IsNullOrWhiteSpace(jsonStr))
{
NativeLogger.I("fastsdk_unity_result", "[Unity] Android returned empty or invalid string");
return;
}
LoginResult loginResult = JsonConvert.DeserializeObject<LoginResult>(jsonStr);
if (loginResult.uid != 0)
{
// 示例:如果接收到特定消息,切换到另一个场景
NativeLogger.I("fastsdk_unity_result", $"[Unity] onRefreshUser Login successful, uid:{loginResult.uid} channel:{loginResult.channel} channelUid:{loginResult.channelUid} accessToken:{loginResult.accessToken}");
}
}
public void onLoginFailed(string reason)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onLoginFailed called with reason: " + reason);
}
public void onLogout(string message)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onLogout called with message: " + message);
}
public void onPayGoodsList(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onPayGoodsList called with message: " + jsonStr);
GoodsListWrapper wrapper = JsonConvert.DeserializeObject<GoodsListWrapper>(jsonStr);
if (wrapper != null && wrapper.array != null)
{
NativeLogger.I("fastsdk_unity_result", $"[Unity] onPayGoodsList: {wrapper}");
}
}
public void onPaySuccess(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", $"[Unity] onPaySuccess called {jsonStr}");
}
public void onPayFailed(string reason)
{
NativeLogger.I("fastsdk_unity_result", "[Unity] onPayFailed called with reason: " + reason);
}
//分享,无特殊处理可不实现
public void onShareSuccess(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", $"[Unity] onShareSuccess called {jsonStr}");
}
public void onShareFailed(string jsonStr)
{
NativeLogger.I("fastsdk_unity_result", $"[Unity] onShareFailed called {jsonStr}");
}
}
fileFormatVersion: 2
guid: 1339b90d384704209afa5c373e6c0035
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UnityMainThreadDispatcher : MonoBehaviour
{
private static readonly Queue<Action> _executionQueue = new Queue<Action>();
private static UnityMainThreadDispatcher _instance;
public static UnityMainThreadDispatcher Instance
{
get
{
if (_instance == null)
{
var go = new GameObject("MainThreadDispatcher");
_instance = go.AddComponent<UnityMainThreadDispatcher>();
DontDestroyOnLoad(go);
}
return _instance;
}
}
public void Enqueue(Action action)
{
lock (_executionQueue)
{
_executionQueue.Enqueue(action);
}
}
void Update()
{
lock (_executionQueue)
{
while (_executionQueue.Count > 0)
{
_executionQueue.Dequeue()?.Invoke();
}
}
}
}
fileFormatVersion: 2
guid: 961018ad1097642858806cffa50ef787
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 7cc20c96e2f4a4a80ad5d2e39d1dde68
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

public enum AccessActivityType
{
CD_KEY = 1 //CD_KEY
}
fileFormatVersion: 2
guid: 3e15ad2b0dd7a44fdb24799ebfb8054a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment