SDK_UnityMoney/Assets/EFSDK/EFSdk.cs

434 lines
13 KiB
C#
Raw Normal View History

2025-09-01 06:57:00 +00:00
using System;
using System.Collections.Generic;
using UnityEngine;
namespace EFSDK
{
/// <summary>
/// TKG Native SDK Android platform interface call
/// </summary>
public class EFSdk
{
private static EFSdk _mEfSdk;
private static string mappingInfo = @"{""items"":[{""key"":""_sdk_float_balloon.png"",""value"":""aoa38ay.png""}]}";
public static EFSdk get()
{
if (_mEfSdk == null)
{
_mEfSdk = new EFSdk();
}
return _mEfSdk;
}
private AndroidJavaObject jo;
public EFSdk()
{
// java interface class
using (AndroidJavaClass jc = new AndroidJavaClass("com.earn.push._SDK"))
{
jo = jc.GetStatic<AndroidJavaObject>("INSTANCE");
}
}
private T SDKCall<T>(string _method, params object[] _param)
{
try
{
return jo.Call<T>(_method, _param);
}
catch (Exception e)
{
Debug.LogError(e);
}
return default(T);
}
private void SDKCall(string _method, params object[] _param)
{
try
{
jo.Call(_method, _param);
}
catch (Exception e)
{
Debug.LogError(e);
}
}
public enum ActionType
{
COIN_CLICK, //点击金币
BALLOON_CLICK, //点击气球
COIN_SHOW, //金币展示出来了
BOX_SHOW, //气球/宝箱展示出来了
GAM_LOAD_SUCC, //GAM页面加载成功
ON_RESUME, //游戏可见时回调,
// CAN_GOBACK, //游戏可见时回调,
}
public Action<ActionType, string> ActionCallback;
public Action<string, Dictionary<string, string>> ActionSDKEventCallback;
public Action<string> HdH5ImpressionAction;
public Action<bool> mCanGobackAction;
public Action<bool> mReqNotifyPermissionAction;
/// <summary>
/// 在Init方法之后调用这个方法,设置SDK上报事件回调, 将SDK传过来的事件上报到Firebase,数数等
/// </summary>
/// <param name="actionCallbvack">
/// 事件ID,事件属性
/// </param>
public void SetSDKEventCallback(Action<string, Dictionary<string, string>> eventKeyDict)
{
ActionSDKEventCallback = eventKeyDict;
}
/// <summary>
/// 互动广告展示回调,此时可以计算上报互动广告展示次数和收益
/// </summary>
/// <param name="callback">string 是互动广告的url</param>
public void SetHdH5ImpressionCallback(Action<string> callback)
{
HdH5ImpressionAction = callback;
}
/// <summary>
/// 初始化
/// </summary>
/// <param name="actionCallbvack">ActionType 回调类型 ; string msg </param>
public void Init(Action<ActionType, string> actionCallbvack)
{
ActionCallback = actionCallbvack;
SDKInit();
}
private void SDKInit()
{
// SDKCall("init");
ActionCallback?.Invoke(ActionType.GAM_LOAD_SUCC, string.Empty);
}
/// <summary>
/// 展示WebView
/// </summary>
/// <param name="id">标签id</param>
/// <param name="url">网址</param>
/// <param name="pRect"></param>
/// <param name="pCam"></param>
public void ShowWebView(int id, string url, RectTransform pRect, Camera pCam = null)
{
Vector3[] tWorldCorners = new Vector3[4];
pRect.GetWorldCorners(tWorldCorners);
Vector2 tTopLeft = RectTransformUtility.WorldToScreenPoint(pCam, tWorldCorners[1]);
Vector2 tBottomRight = RectTransformUtility.WorldToScreenPoint(pCam, tWorldCorners[3]);
int tWidth = (int)Mathf.Abs(tBottomRight.x - tTopLeft.x);
int tHeight = (int)Mathf.Abs(tBottomRight.y - tTopLeft.y);
SDKCall("showWebViewToActivity", id, url, (int)tTopLeft.x, (int)(Screen.height - tTopLeft.y), tWidth,
tHeight);
}
/// <summary>
/// 移除所有原生View, 回到游戏时调用
/// </summary>
/// <returns></returns>
public void RemoveAll()
{
SDKCall("removeAll");
}
/// <summary>
/// 刷新当前页面
/// </summary>
/// <returns></returns>
public void Refresh()
{
SDKCall("refresh");
}
/// <summary>
/// 回上一页
/// </summary>
/// <returns></returns>
public void GoBack()
{
SDKCall("goBack");
}
/// <summary>
/// 回首页
/// </summary>
/// <returns></returns>
public void GoHome()
{
SDKCall("goHome");
}
/// <summary>
/// 是否手动控制漂浮道具显示/隐藏
/// SDK内默认当H5页面加载完成后自动显示漂浮道具
/// </summary>
/// <param name="autoShow">true: 自动显示/隐藏道具 false: 游戏主动控制道具显示/隐藏</param>
/// <returns></returns>
public void AutoShowFloat(bool autoShow)
{
SDKCall("autoShowFloat", autoShow);
}
/// <summary>
/// 飘金币
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public void ShowFloatCoin(int id)
{
SDKCall("showFloatCoin", id);
}
/// <summary>
/// 飘金币
/// </summary>
/// <param name="id"></param>
/// <param name="res">悬浮金币按钮的图片资源,传字符串 0 或 1 0:金币图 1:红点宝箱图 </param>
/// <returns></returns>
public void ShowFloatCoin(int id, String res)
{
SDKCall("showFloatCoin", id, res);
}
/// <summary>
/// 设置悬浮金币按钮的图片资源
/// </summary>
/// <param name="res">传字符串 0 或 1 0:金币图 1:红点宝箱图</param>
public void SetFloatCoinRes(String res)
{
SDKCall("setFloatCoinRes", res);
}
/// <summary>
/// 隐藏金币
/// </summary>
/// <returns></returns>
public void HideFloatCoin()
{
SDKCall("hideFloatCoin");
}
/// <summary>
/// 飘气球
/// </summary>
/// <param name="startId"></param>
/// <param name="endId"></param>
/// <param name="fly_first_time"></param>
/// <param name="fly_gap_time"></param>
/// <returns></returns>
public void ShowBalloon(int startId, int endId, int fly_first_time, int fly_gap_time)
{
SDKCall("showBalloon", startId, endId, fly_first_time, fly_gap_time);
}
/// <summary>
/// 隐藏气球
/// </summary>
/// <returns></returns>
public void HideBalloon()
{
SDKCall("hideBalloon");
}
/// <summary>
///
/// </summary>
/// <param name="message"></param>
public void ShowToast(string message)
{
SDKCall("showToast", message);
}
/// <summary>
/// 判断当前网页是否还能返回上一页, true:可以返回,此时页面不在首页 false: 不能返回了,当前页面就在首页
/// </summary>
public void CanGoback(Action<bool> canGobackAction)
{
mCanGobackAction = canGobackAction;
SDKCall("canGoback");
}
#region
/// <summary>
/// 满足条件:未领取 R0.1 的 买量用户, 调用这个方法
/// </summary>
public void SubscribeUnclaimed01()
{
SDKCall("subscribeUnclaimed01");
}
/// <summary>
/// 不满足条件:未领取 R0.1 的 买量用户, 调用这个方法
/// </summary>
public void UnSubscribeUnclaimed01()
{
SDKCall("unSubscribeUnclaimed01");
}
/// <summary>
// 满足条件: 在排队中 且 当日R1 未领取 的买量用户, 调用这个方法
/// </summary>
public void SubscribePending1()
{
SDKCall("subscribePending1");
}
/// <summary>
/// 不满足条件: 在排队中 且 当日R1 未领取 的买量用户, 调用这个方法
/// </summary>
public void UnSubscribePending1()
{
SDKCall("unSubscribePending1");
}
/// <summary>
/// 订阅Firebase推送主题
/// </summary>
/// <param name="topic">主题名称</param>
public void SubscribeToTopic(string topic)
{
SDKCall("subscribeToTopic", topic);
}
/// <summary>
/// 取消订阅Firebase推送主题
/// </summary>
/// <param name="topic">主题名称</param>
public void UnSubscribeToTopic(string topic)
{
SDKCall("UnSubscribeToTopic", topic);
}
/// <summary>
/// 向SDK上报当前金币总数,每次金币变化都要调用一次
/// </summary>
/// <param name="totalGold"></param>
public void SendTotalGold2SDK(int totalGold)
{
SDKCall("setGoldNum", totalGold.ToString());
}
/// <summary>
/// 向SDK上报当前要提现的现金额,每次变化都要调用一次
/// </summary>
/// <param name="cashNum"></param>
public void SendCashNum2SDK(double cashNum)
{
SDKCall("setCashNum", cashNum.ToString("0.00"));
}
/// <summary>
/// 向SDK上报 游戏名字(当前语言的),每次语言变化都上报
/// </summary>
/// <param name="gameName"></param>
public void SetGameName(string gameName)
{
SDKCall("setGameName", gameName);
}
// /// <summary>
// /// 设置推送 消息通知 的文案
// /// </summary>
// /// <param name="message"></param>
// public void SetCommPushMessage(string message)
// {
// SDKCall("setCommPushMessage", message);
// }
/// <summary>
/// 设置当前游戏语言是否是 西班牙语
///
/// </summary>
/// <param name="isEs">西班牙语传 true, 其他的都传 false </param>
public void SetCurrLang(bool isEs)
{
SDKCall("setCurrLang", isEs);
}
/// <summary>
/// 获取当前是否有通知权限
/// </summary>
public bool HasNotifyPermission()
{
return SDKCall<bool>("hasNotifyPermission");
}
/// <summary>
/// 请求获取通知权限
/// </summary>
public void ReqNotifyPermission()
{
SDKCall("reqNotifyPermission");
}
/// <summary>
/// 请求获取通知权限
/// <param name="action">授权弹窗关闭回调 bool:表示用户是否允许了权限 true:有权限 false:无权限</param>
/// </summary>
public void ReqNotifyPermission(Action<bool> action)
{
mReqNotifyPermissionAction = action;
SDKCall("reqNotifyPermission");
}
/// <summary>
/// 设置推送开关, SDK默认关闭通知
/// </summary>
/// <param name="isOpen"></param>
public void SetPushSwitch(bool isOpen)
{
SDKCall("pushSwitch", isOpen);
}
/// <summary>
/// 消息类通知弹出间隔设置为60秒在线参数控制-Key: messagenotif Value:60
/// </summary>
/// <param name="timeSeconds"></param>
public void SetPushMessagenotif(int timeSeconds)
{
SDKCall("setPushMessagenotif", timeSeconds);
}
/// <summary>
/// 持续性通知在进入游戏时弹出的时间间隔设置为300秒在线参数控制 -Key:persistentnotif Value:300
/// </summary>
/// <param name="timeSeconds"></param>
public void SetPushPersistentnotif(int timeSeconds)
{
SDKCall("setPushPersistentnotif", timeSeconds);
}
/// <summary>
/// 每次回调游戏的onResume的时候都调用一次,获取游戏要跳转的页面
/// </summary>
/// <returns>
/// 0 不需要进行任何跳转
/// 1 进行游戏主页
/// 2 进入游戏的金币提现界面
/// 3 进入对应小游戏1界面
/// 4 进入对应小游戏2界面
/// </returns>
public int GetJumpPage()
{
return SDKCall<int>("getJumpPage");
}
#endregion
}
}