在上一篇中,我实现Android项目的实现,现在我们来完善Unity端的封装
public interface IPlatformSdkHelper
{
///
/// 通知 SDK 初始化
///
void Init();
///
/// 执行特殊命令,如执行自更新指令
///
/// 指令
/// 参数
bool Exec(string command, string arg0);
///
/// 执行特殊命令,如执行自更新指令
///
/// 指令
bool Exec(string command);
///
/// 通知 SDK 启动登录界面
///
void Login();
///
/// 通知 SDK 用户注销
///
void Logout();
///
/// 通知 SDK 应用退出
///
void Exit();
///
/// 尝试游戏客户端自升级
///
bool TryAppUpgrade(string downloadUrl);
///
/// 获取配置信息
///
string GetConfig(string key);
///
/// 显示悬浮求
///
void ShowToolBar();
///
/// 关闭悬浮求
///
void HideToolBar();
///
/// 判断当前渠道是否有用户中心功能
///
bool HasUserCenter();
///
/// 进入用户中心
///
void EnterUserCenter();
///
/// 判断当前渠道是否有客服中心功能
///
bool HasCustomerCenter();
///
/// 进入客服中心
///
void EnterCustomerCenter();
///
/// 判断当前渠道是否有论坛功能
///
bool HasForum();
///
/// 进入论坛
///
void EnterForum();
///
/// 玩家创建角色时调用
///
///
void ReportRoleCreated(GameRoleInfo roleInfo);
///
/// 玩家选择角色,并成功登录游戏后调用
///
void ReportRoleLogin();
///
/// 玩家角色等级变化时调用
///
void ReportRoleUpgrade();
///
/// 玩家退出游戏时调用
///
void ReportRoleLogout();
///
/// 发起购买
///
/// 订单信息
void Pay(OrderInfo order);
///
/// 报告支付结果
///
///
void ReportPaymentResult(OrderInfo order);
}
public class GameRoleInfo
{
public int Id = 1000;
public string Name = "xxx004";
public byte Gender = 2;
public int Level = 99;
public int Power = 9999;
public int ProfessionId = 240;
public string Profession = "Unity";
public int ServerId = 1;
public string ServerName = "unityServer";
public int UnionId = 10;
public string UnionName = "Union";
public int UnionMemberId = 10;
public string UnionMemberName = "MemberName";
public string FriendId = "12_12_12_41";
public int VipLevel = 10;
public float VipExp = 240000;
public long DiamondCount = 12222;
public long GoldCoins = 10000;
public long LoginAt { get; set; }
public long LogoutAt { get; set; }
public long CreatedAt { get; set; }
public string ServerToken { get; set; }
public string SdkAppId { get; set; }
public string SdkName { get; set; }
public string SdkChannel { get; set; }
public string SdkUID { get; set; }
public string SdkUName { get; set; }
public string SdkToken { get; set; }
}
public class OrderInfo
{
///
/// 订单对应的商品
///
public GoodsInfo Goods;
///
/// 是否首次购买此商品
///
public bool isFirstPaymentOfGoods;
///
/// 厂商订单
///
public string cpOrderId;
///
/// 订单回调地址
///
public string callbackUrl;
///
/// 与渠道对接时的透传参数
///
public string extraParams;
///
/// 交易结束后后设置,用于统计报告
///
public bool success;
///
/// 交易结束后设置,订单获得额外代币
///
public int rewardCount;
}
public class GoodsInfo
{
///
/// 商品编号
///
public string Id;
///
/// 商品代币名称,如“钻石”
///
public string Name;
///
/// 商品代币数量
///
public int count;
///
/// 首冲奖励
///
public int firstRewardCount;
///
/// 首冲之后,每次购买的额外奖励
///
public int rewardCount;
///
/// 商品描述,用于在UI显示
///
public string description;
///
/// 商品量词,如“个”
///
public string quantifier;
///
/// 货币名称,如"USD"
///
public string currency;
///
/// 单价
///
public double price;
}
PlatformSdkHelper 实现 IPlatformSdkHelper 接口,这里是和Android交互的场所,所有的和Android相关的接口都写着在这里。方面项目管理。也是符合设计模式的单一职责。
using System;
using UnityEngine;
public class PlatformSdkHelper : IPlatformSdkHelper
{
private static PlatformSdkHelper singleton;
public static PlatformSdkHelper Singleton
{
get
{
if (singleton == null)
{
singleton = new PlatformSdkHelper();
}
return singleton;
}
}
private AndroidJavaObject GetAndroidJavaObject()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
return jc.GetStatic("currentActivity");
}
private AndroidJavaObject sdk
{
get { return _sdk ?? (_sdk = GetAndroidJavaObject()); }
}
private AndroidJavaObject _sdk;
public void ShowToolBar()
{
sdk.Call("requestShowToolBar");
}
public void HideToolBar()
{
sdk.Call("requestHideToolBar");
}
public bool HasUserCenter()
{
return sdk.Call("requestHasUserCenter");
}
public void EnterUserCenter()
{
sdk.Call("requestEnterUserCenter");
}
public bool HasCustomerCenter()
{
return sdk.Call("requestHasCustomerCenter");
}
public void EnterCustomerCenter()
{
sdk.Call("requestEnterCustomerCenter");
}
public bool HasForum()
{
return sdk.Call("requestHasForum");
}
public void EnterForum()
{
sdk.Call("requestEnterForum");
}
public void Init()
{
sdk.Call("requestInit");
}
public bool Exec(string command, string arg0)
{
return sdk.Call("requestCommand", command, arg0);
}
public bool Exec(string command)
{
return Exec(command, "");
}
public void Login()
{
sdk.Call("requestLogin");
}
public void Logout()
{
sdk.Call("requestLogout");
}
public void Exit()
{
sdk.Call("requestExit");
}
public string GetConfig(string key)
{
return sdk.Call("requestConfig", key);
}
public bool TryAppUpgrade(string downloadUrl)
{
return sdk.Call("requestUpgrade", downloadUrl);
}
public void ReportRoleCreated(GameRoleInfo roleInfo)
{
ReportRoleInfo("register", roleInfo);
}
public void ReportRoleLogin()
{
ReportRoleInfo("login");
}
public void ReportRoleUpgrade()
{
ReportRoleInfo("upgrade");
}
public void ReportRoleLogout()
{
ReportRoleInfo("logout");
}
private void ReportRoleInfo(string reason, GameRoleInfo roleInfo)
{
GameRoleInfo role = new GameRoleInfo();
sdk.Call("reportRoleInfo", reason,
role.Id.ToString(),
role.Name,
role.Level.ToString(),
role.Gender.ToString(),
role.Power.ToString(),
role.CreatedAt.ToString(),
role.LoginAt.ToString(),
role.LogoutAt.ToString(),
role.ProfessionId.ToString(),
role.Profession,
role.ServerId.ToString(),
role.ServerName,
role.UnionId.ToString(),
role.UnionName,
role.UnionMemberId.ToString(),
role.UnionMemberName,
role.FriendId,
role.VipLevel.ToString(),
role.VipExp.ToString("0.00"),
role.DiamondCount.ToString(),
role.GoldCoins.ToString()
);
}
private void ReportRoleInfo(string reason)
{
ReportRoleInfo(reason, null);
}
public void Pay(OrderInfo order)
{
ReportRoleInfo("payment");
sdk.Call("requestPay",
order.Goods.Id,
order.Goods.Name,
order.Goods.count.ToString(),
order.Goods.firstRewardCount.ToString(),
order.Goods.rewardCount.ToString(),
order.Goods.quantifier.ToString(),
order.Goods.currency,
order.Goods.price.ToString("0.00"),
order.isFirstPaymentOfGoods ? "1" : "0",
order.cpOrderId,
order.callbackUrl,
order.extraParams
);
}
public void ReportPaymentResult(OrderInfo order)
{
sdk.Call("reportPaymentResult",
order.Goods.Id,
order.Goods.Name,
order.Goods.count.ToString(),
order.Goods.firstRewardCount.ToString(),
order.Goods.rewardCount.ToString(),
order.Goods.quantifier.ToString(),
order.Goods.currency,
order.Goods.price.ToString("0.00"),
order.isFirstPaymentOfGoods ? "1" : "0",
order.rewardCount.ToString(),
order.success ? "1" : "0"
);
}
}
基本上算是完成了,只需要在项目需要调用的地方调用相关的接口。也可以以这个为基础,以后的项目中,直接导入使用。
下载工程链接