Unity3d ╋ QuickSDK接入教程总篇
随着渠道资源越来越丰富,SDK的接入也变得也来越复杂,100个SDK接入能把程序员整疯,因此很多聚合SDK应运而生,像棱镜SDK,易接等等。今天主要介绍的是另外一款QuickSDK,功能与前面说的类似,因为项目用到,所以在这里把接入经验跟大家分享一下。
1.SDK接入流程(部分QuickSDK及游戏客户端代码)
SDK接入流程都是大同小异,主要包括登录和支付,以下是登录流程:
1.打开SDK客户端界面:代码调用SDK客户端提供的登录方法。将玩家在SDK客户端界面中输入的玩家名称与密码传递给SDK暴露的方法。
/// <summary>
/// 登录账号
/// </summary>
public void OnClickLoginAccount()
{
Debug.LogError("AndroidSDKManager2 : OnClickLoginAccount");
QuickSDK.getInstance().login();
}
2.SDK客户端向SDK服务器请求:SDK客户端向SDK服务器传递玩家输入的用户名,密码等信息。同时还需要传递APP信息,比如APPID,APPKEY等验证信息。这些信息能够标识唯一的应用。
3.SDK服务器会向SDK客户端返回:token值保存了玩家的验证信息。以上就是一个SDK服务器返回的信息。这个信息包含了APPID(APP的唯一标识),data(根据用户名,密码等信息进行的加密数据),time(请求时间)。
4. SDK客户端将token值等数据传递给游戏客户端,游戏客户端再将数据传递给游戏服务器。游戏服务器拿到游戏客户端返回的数据之后,将数据传递给SDK服务器进行验证。
/// <summary>
/// 登录成功回调
/// </summary>
/// <param name="userInfo"></param>
public override void onLoginSuccess(UserInfo userInfo)
{
WindowManager.CloseWaittingWindow();
AndroidSDKManager2.Instance.LoginState = SDK_LOGIN_STATES.SUCCESSFUL;
JsonData jd = new JsonData();
jd["sid"] = userInfo.token;
jd["app_id"] = "";
jd["channel"] = QuickSDK.getInstance().channelType().ToString();//渠道类型
jd["sub_channel"] = QuickSDK.getInstance().channelType().ToString();
jd["channel_name"] = QuickSDK.getInstance().channelName();//渠道名称
jd["device_id"] = GameMain.MacAddress;
//jd["uid"] = userInfo.uid;//账户id
jd["uid"] = QuickSDK.getInstance().userId();//渠道id
Debug.LogError("渠道id:" + QuickSDK.getInstance().userId());
AndroidSDKManager2.Instance.GetKeySuc = false;
HttpLite.HttpRequest(REQUEST_URL_FOR_LAST_LOGIN_SETTING, GetUserLastLoginSetting, jd.ToJson());
WindowManager.OpenWaitServerWindow();
}
5. SDK服务器对游戏服务器传递过来的数据进行验证后,将验证结果返回给游戏服务器。文档:https://www.quicksdk.com/doc-15.html
6. 游戏服务器拿到SDK服务器返回的登录验证结果(如果成功,SDK服务器则会返回类似channelId和userId的东西,以便对此用户进行唯一标示)。对登录结果的数据进行自定义的拼接,已生成一个唯一ID,在此我们给这个唯一的ID起名叫login_key。然后把这个playerId在服务器进行保存,并将登录的结果和login_key返回给客户端。至此,一个SDK的登录流程就已经完成了。
进入游戏有两种方式,都是利用服务器发过来的login_key值:
- 登录成功之后直接调用进入游戏代码,进入游戏
- 登录成功之后界面上存在登录按钮,点击进入游戏
以下是支付流程:
简单介绍支付流程中的9个步骤:
在支付模块中,我们并没有像登录模块一样把游戏逻辑与集成SDK放在一起,而是把SDK与SDK服务器放在了一起,因为我并不确定SDK与SDK服务器之间的具体通信步骤。
由于现在只接了Apple的支付,所以支付服务器是Apple服务器。
支付服务器也可以是支付宝,银联等服务器。
1. 当用户在商城中点击支付按钮时,游戏客户端向游戏服务器发送消息,告知服务器购买的是什么商品。
我们的方法时为买个付费点分配一个唯一ID,游戏客户端向服务器发送这个唯一ID,由服务器向客户端返回具体信息。
2. 游戏服务器接收到客户端发送的唯一ID后,由游戏服务器向游戏客户端返回订单相关的信息(比如,订单号、价格、商品、购买时间等信息)。
3. 游戏客户端接收到游戏服务器返回的信息后,通过调用SDK暴露的方法进行支付。
4. 支付服务器对SDK发送的订单信息进行处理。
此后还会回调SDK的方法,弹出支付界面让用户支付,这个过程不是我们所关心的,所以不添加这个过程。
5. 支付服务器对用户输入的账号,密码进行验证,将登录结果返回给SDK。
6. SDK会将支付结果返回给游戏客户端和游戏服务器。
这个过程并不能保证先后顺序
7. 游戏服务器接收到SDK返回的支付结果后,会在后台将相关的道具加到这个用户的数据库中。
8. 游戏客户端此时虽然支付成功,但是没有及时同步道具。
所以此时客户端要每隔一段时间向服务器进行请求(规定请求间隔与最大请求次数)。
直到游戏服务器将购买的道具同步到客户端为止。